Parcourir la source

Fixes #611: Power/console/interface connection import: status field should be case-insensitive

Jeremy Stretch il y a 8 ans
Parent
commit
0ff46bf5d0
1 fichiers modifiés avec 12 ajouts et 3 suppressions
  1. 12 3
      netbox/dcim/forms.py

+ 12 - 3
netbox/dcim/forms.py

@@ -1,6 +1,7 @@
 import re
 import re
 
 
 from django import forms
 from django import forms
+from django.core.exceptions import ValidationError
 from django.db.models import Count, Q
 from django.db.models import Count, Q
 
 
 from extras.forms import CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
 from extras.forms import CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
@@ -42,6 +43,14 @@ def get_device_by_name_or_pk(name):
     return device
     return device
 
 
 
 
+def validate_connection_status(value):
+    """
+    Custom validator for connection statuses. value must be either "planned" or "connected" (case-insensitive).
+    """
+    if value.lower() not in ['planned', 'connected']:
+        raise ValidationError('Invalid connection status ({}); must be either "planned" or "connected".'.format(value))
+
+
 #
 #
 # Sites
 # Sites
 #
 #
@@ -606,7 +615,7 @@ class ConsoleConnectionCSVForm(forms.Form):
     device = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
     device = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
                                       error_messages={'invalid_choice': 'Device not found'})
                                       error_messages={'invalid_choice': 'Device not found'})
     console_port = forms.CharField()
     console_port = forms.CharField()
-    status = forms.ChoiceField(choices=[('planned', 'Planned'), ('connected', 'Connected')])
+    status = forms.CharField(validators=[validate_connection_status])
 
 
     def clean(self):
     def clean(self):
 
 
@@ -801,7 +810,7 @@ class PowerConnectionCSVForm(forms.Form):
     device = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
     device = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
                                       error_messages={'invalid_choice': 'Device not found'})
                                       error_messages={'invalid_choice': 'Device not found'})
     power_port = forms.CharField()
     power_port = forms.CharField()
-    status = forms.ChoiceField(choices=[('planned', 'Planned'), ('connected', 'Connected')])
+    status = forms.CharField(validators=[validate_connection_status])
 
 
     def clean(self):
     def clean(self):
 
 
@@ -1062,7 +1071,7 @@ class InterfaceConnectionCSVForm(forms.Form):
     device_b = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
     device_b = FlexibleModelChoiceField(queryset=Device.objects.all(), to_field_name='name',
                                         error_messages={'invalid_choice': 'Device B not found.'})
                                         error_messages={'invalid_choice': 'Device B not found.'})
     interface_b = forms.CharField()
     interface_b = forms.CharField()
-    status = forms.ChoiceField(choices=[('planned', 'Planned'), ('connected', 'Connected')])
+    status = forms.CharField(validators=[validate_connection_status])
 
 
     def clean(self):
     def clean(self):