Browse Source

Implemented ConnectionStatusCSVField

Jeremy Stretch 8 years ago
parent
commit
ec9d0d4008
1 changed files with 22 additions and 12 deletions
  1. 22 12
      netbox/dcim/forms.py

+ 22 - 12
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