1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #117: Improved device import validation

This commit is contained in:
Jeremy Stretch
2016-06-29 14:53:24 -04:00
parent 995447ae0b
commit 004f5c448e
2 changed files with 15 additions and 8 deletions

View File

@ -427,7 +427,7 @@ class DeviceFromCSVForm(forms.ModelForm):
'invalid_choice': 'Invalid site name.', 'invalid_choice': 'Invalid site name.',
}) })
rack_name = forms.CharField() rack_name = forms.CharField()
face = forms.ChoiceField(choices=[('Front', 'Front'), ('Rear', 'Rear')]) face = forms.CharField(required=False)
class Meta: class Meta:
model = Device model = Device
@ -446,7 +446,7 @@ class DeviceFromCSVForm(forms.ModelForm):
try: try:
self.instance.device_type = DeviceType.objects.get(manufacturer=manufacturer, model=model_name) self.instance.device_type = DeviceType.objects.get(manufacturer=manufacturer, model=model_name)
except DeviceType.DoesNotExist: except DeviceType.DoesNotExist:
self.add_error('model_name', "Invalid device type ({})".format(model_name)) self.add_error('model_name', "Invalid device type ({} {})".format(manufacturer, model_name))
# Validate rack # Validate rack
if site and rack_name: if site and rack_name:
@ -457,11 +457,15 @@ class DeviceFromCSVForm(forms.ModelForm):
def clean_face(self): def clean_face(self):
face = self.cleaned_data['face'] face = self.cleaned_data['face']
if face.lower() == 'front': if face:
return 0 try:
if face.lower() == 'rear': return {
return 1 'front': 0,
raise forms.ValidationError("Invalid rack face ({})".format(face)) 'rear': 1,
}[face.lower()]
except KeyError:
raise forms.ValidationError('Invalid rack face ({}); must be "front" or "rear".'.format(face))
return face
class DeviceImportForm(BulkImportForm, BootstrapMixin): class DeviceImportForm(BulkImportForm, BootstrapMixin):

View File

@ -568,7 +568,10 @@ class Device(CreatedUpdatedModel):
raise ValidationError("Must specify rack face with rack position.") raise ValidationError("Must specify rack face with rack position.")
# Validate rack space # Validate rack space
try:
rack_face = self.face if not self.device_type.is_full_depth else None rack_face = self.face if not self.device_type.is_full_depth else None
except DeviceType.DoesNotExist:
raise ValidationError("Must specify device type.")
exclude_list = [self.pk] if self.pk else [] exclude_list = [self.pk] if self.pk else []
try: try:
available_units = self.rack.get_available_units(u_height=self.device_type.u_height, rack_face=rack_face, available_units = self.rack.get_available_units(u_height=self.device_type.u_height, rack_face=rack_face,