diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index bff89a3b5..541ffbfa3 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -50,12 +50,25 @@ def get_device_by_name_or_pk(name): return device -def validate_connection_status(value): +class ConnectionStatusCSVField(forms.CharField): """ - Custom validator for connection statuses. value must be either "planned" or "connected" (case-insensitive). + This field accepts either "planned" or "connected" as a connection status for CSV imports. """ - if value.lower() not in ['planned', 'connected']: - raise ValidationError('Invalid connection status ({}); must be either "planned" or "connected".'.format(value)) + def __init__(self, *args, **kwargs): + super(ConnectionStatusCSVField, self).__init__(*args, **kwargs) + if not self.help_text: + self.help_text = 'Connection status ("planned" or "connected")' + + def clean(self, value): + value = super(ConnectionStatusCSVField, self).clean(value) + try: + return { + 'planned': CONNECTION_STATUS_PLANNED, + 'connected': CONNECTION_STATUS_CONNECTED, + }[value.lower()] + except KeyError: + raise ValidationError( + 'Invalid connection status ({}); must be either "planned" or "connected".'.format(value)) class DeviceComponentForm(BootstrapMixin, forms.Form): @@ -968,11 +981,11 @@ class ConsoleConnectionCSVForm(forms.ModelForm): console_port = forms.CharField( help_text='Console port name' ) - status = forms.CharField(validators=[validate_connection_status]) + connection_status = ConnectionStatusCSVField() class Meta: model = ConsolePort - fields = ['console_server', 'cs_port', 'device', 'console_port'] + fields = ['console_server', 'cs_port', 'device', 'console_port', 'connection_status'] def clean_console_port(self): @@ -1222,11 +1235,11 @@ class PowerConnectionCSVForm(forms.ModelForm): power_port = forms.CharField( help_text='Power port name' ) - status = forms.CharField(validators=[validate_connection_status]) + connection_status = ConnectionStatusCSVField() class Meta: model = PowerPort - fields = ['pdu', 'power_outlet', 'device', 'power_port'] + fields = ['pdu', 'power_outlet', 'device', 'power_port', 'connection_status'] def clean_power_port(self): @@ -1622,10 +1635,7 @@ class InterfaceConnectionCSVForm(forms.ModelForm): interface_b = forms.CharField( help_text='Interface name' ) - connection_status = forms.CharField( - help_text='Connection status', - validators=[validate_connection_status] - ) + connection_status = ConnectionStatusCSVField() class Meta: model = InterfaceConnection