Sfoglia il codice sorgente

Convert console port types to slugs (#3569)

Jeremy Stretch 6 anni fa
parent
commit
8cb7eb0382

+ 17 - 5
netbox/dcim/api/serializers.py

@@ -4,7 +4,7 @@ from rest_framework import serializers
 from rest_framework.validators import UniqueTogetherValidator
 from rest_framework.validators import UniqueTogetherValidator
 from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField
 from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField
 
 
-from dcim.choices import PowerOutletTypes, PowerPortTypes
+from dcim.choices import *
 from dcim.constants import *
 from dcim.constants import *
 from dcim.models import (
 from dcim.models import (
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
@@ -201,7 +201,10 @@ class DeviceTypeSerializer(TaggitSerializer, CustomFieldModelSerializer):
 
 
 class ConsolePortTemplateSerializer(ValidatedModelSerializer):
 class ConsolePortTemplateSerializer(ValidatedModelSerializer):
     device_type = NestedDeviceTypeSerializer()
     device_type = NestedDeviceTypeSerializer()
-    type = ChoiceField(choices=CONSOLE_TYPE_CHOICES, required=False)
+    type = ChoiceField(
+        choices=ConsolePortTypes.CHOICES,
+        required=False
+    )
 
 
     class Meta:
     class Meta:
         model = ConsolePortTemplate
         model = ConsolePortTemplate
@@ -210,7 +213,10 @@ class ConsolePortTemplateSerializer(ValidatedModelSerializer):
 
 
 class ConsoleServerPortTemplateSerializer(ValidatedModelSerializer):
 class ConsoleServerPortTemplateSerializer(ValidatedModelSerializer):
     device_type = NestedDeviceTypeSerializer()
     device_type = NestedDeviceTypeSerializer()
-    type = ChoiceField(choices=CONSOLE_TYPE_CHOICES, required=False)
+    type = ChoiceField(
+        choices=ConsolePortTypes.CHOICES,
+        required=False
+    )
 
 
     class Meta:
     class Meta:
         model = ConsoleServerPortTemplate
         model = ConsoleServerPortTemplate
@@ -381,7 +387,10 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
 
 
 class ConsoleServerPortSerializer(TaggitSerializer, ConnectedEndpointSerializer):
 class ConsoleServerPortSerializer(TaggitSerializer, ConnectedEndpointSerializer):
     device = NestedDeviceSerializer()
     device = NestedDeviceSerializer()
-    type = ChoiceField(choices=CONSOLE_TYPE_CHOICES, required=False)
+    type = ChoiceField(
+        choices=ConsolePortTypes.CHOICES,
+        required=False
+    )
     cable = NestedCableSerializer(read_only=True)
     cable = NestedCableSerializer(read_only=True)
     tags = TagListSerializerField(required=False)
     tags = TagListSerializerField(required=False)
 
 
@@ -395,7 +404,10 @@ class ConsoleServerPortSerializer(TaggitSerializer, ConnectedEndpointSerializer)
 
 
 class ConsolePortSerializer(TaggitSerializer, ConnectedEndpointSerializer):
 class ConsolePortSerializer(TaggitSerializer, ConnectedEndpointSerializer):
     device = NestedDeviceSerializer()
     device = NestedDeviceSerializer()
-    type = ChoiceField(choices=CONSOLE_TYPE_CHOICES, required=False)
+    type = ChoiceField(
+        choices=ConsolePortTypes.CHOICES,
+        required=False
+    )
     cable = NestedCableSerializer(read_only=True)
     cable = NestedCableSerializer(read_only=True)
     tags = TagListSerializerField(required=False)
     tags = TagListSerializerField(required=False)
 
 

+ 1 - 21
netbox/dcim/choices.py

@@ -21,7 +21,7 @@ class ConsolePortTypes:
     TYPE_USB_MICRO_B = 'usb-micro-b'
     TYPE_USB_MICRO_B = 'usb-micro-b'
     TYPE_OTHER = 'other'
     TYPE_OTHER = 'other'
 
 
-    TYPE_CHOICES = (
+    CHOICES = (
         ('Serial', (
         ('Serial', (
             (TYPE_DE9, 'DE-9'),
             (TYPE_DE9, 'DE-9'),
             (TYPE_DB25, 'DB-25'),
             (TYPE_DB25, 'DB-25'),
@@ -41,26 +41,6 @@ class ConsolePortTypes:
         )),
         )),
     )
     )
 
 
-    @classmethod
-    def slug_to_integer(cls, slug):
-        """
-        Provide backward-compatible mapping of the type slug to integer.
-        """
-        return {
-            # Slug: integer
-            cls.TYPE_DE9: CONSOLE_TYPE_DE9,
-            cls.TYPE_DB25: CONSOLE_TYPE_DB25,
-            cls.TYPE_RJ45: CONSOLE_TYPE_RJ45,
-            cls.TYPE_USB_A: CONSOLE_TYPE_USB_A,
-            cls.TYPE_USB_B: CONSOLE_TYPE_USB_B,
-            cls.TYPE_USB_C: CONSOLE_TYPE_USB_C,
-            cls.TYPE_USB_MINI_A: CONSOLE_TYPE_USB_MINI_A,
-            cls.TYPE_USB_MINI_B: CONSOLE_TYPE_USB_MINI_B,
-            cls.TYPE_USB_MICRO_A: CONSOLE_TYPE_USB_MICRO_A,
-            cls.TYPE_USB_MICRO_B: CONSOLE_TYPE_USB_MICRO_B,
-            cls.TYPE_OTHER: CONSOLE_TYPE_OTHER,
-        }.get(slug)
-
 
 
 #
 #
 # Power port types
 # Power port types

+ 0 - 35
netbox/dcim/constants.py

@@ -57,41 +57,6 @@ SUBDEVICE_ROLE_CHOICES = (
     (SUBDEVICE_ROLE_CHILD, 'Child'),
     (SUBDEVICE_ROLE_CHILD, 'Child'),
 )
 )
 
 
-#
-# Numeric console port types
-#
-
-CONSOLE_TYPE_DE9 = 1000
-CONSOLE_TYPE_DB25 = 1100
-CONSOLE_TYPE_RJ45 = 2000
-CONSOLE_TYPE_USB_A = 3000
-CONSOLE_TYPE_USB_B = 3010
-CONSOLE_TYPE_USB_C = 3020
-CONSOLE_TYPE_USB_MINI_A = 3100
-CONSOLE_TYPE_USB_MINI_B = 3110
-CONSOLE_TYPE_USB_MICRO_A = 3200
-CONSOLE_TYPE_USB_MICRO_B = 3210
-CONSOLE_TYPE_OTHER = 32767
-CONSOLE_TYPE_CHOICES = [
-    ['Serial', [
-        [CONSOLE_TYPE_DE9, 'DE-9'],
-        [CONSOLE_TYPE_DB25, 'DB-25'],
-        [CONSOLE_TYPE_RJ45, 'RJ-45'],
-    ]],
-    ['USB', [
-        [CONSOLE_TYPE_USB_A, 'USB Type A'],
-        [CONSOLE_TYPE_USB_B, 'USB Type B'],
-        [CONSOLE_TYPE_USB_C, 'USB Type C'],
-        [CONSOLE_TYPE_USB_MINI_A, 'USB Mini A'],
-        [CONSOLE_TYPE_USB_MINI_B, 'USB Mini B'],
-        [CONSOLE_TYPE_USB_MICRO_A, 'USB Micro A'],
-        [CONSOLE_TYPE_USB_MICRO_B, 'USB Micro B'],
-    ]],
-    ['Other', [
-        [CONSOLE_TYPE_OTHER, 'Other'],
-    ]],
-]
-
 #
 #
 # Numeric interface types
 # Numeric interface types
 #
 #

+ 15 - 6
netbox/dcim/filters.py

@@ -11,6 +11,7 @@ from utilities.filters import (
     TreeNodeMultipleChoiceFilter,
     TreeNodeMultipleChoiceFilter,
 )
 )
 from virtualization.models import Cluster
 from virtualization.models import Cluster
+from .choices import *
 from .constants import *
 from .constants import *
 from .models import (
 from .models import (
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
@@ -642,7 +643,7 @@ class DeviceComponentFilterSet(django_filters.FilterSet):
 
 
 class ConsolePortFilter(DeviceComponentFilterSet):
 class ConsolePortFilter(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
-        choices=CONSOLE_TYPE_CHOICES,
+        choices=ConsolePortTypes.CHOICES,
         null_value=None
         null_value=None
     )
     )
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
@@ -653,12 +654,12 @@ class ConsolePortFilter(DeviceComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = ConsolePort
         model = ConsolePort
-        fields = ['id', 'name', 'type', 'description', 'connection_status']
+        fields = ['id', 'name', 'description', 'connection_status']
 
 
 
 
 class ConsoleServerPortFilter(DeviceComponentFilterSet):
 class ConsoleServerPortFilter(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
-        choices=CONSOLE_TYPE_CHOICES,
+        choices=ConsolePortTypes.CHOICES,
         null_value=None
         null_value=None
     )
     )
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
@@ -669,10 +670,14 @@ class ConsoleServerPortFilter(DeviceComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = ConsoleServerPort
         model = ConsoleServerPort
-        fields = ['id', 'name', 'type', 'description', 'connection_status']
+        fields = ['id', 'name', 'description', 'connection_status']
 
 
 
 
 class PowerPortFilter(DeviceComponentFilterSet):
 class PowerPortFilter(DeviceComponentFilterSet):
+    type = django_filters.MultipleChoiceFilter(
+        choices=PowerPortTypes.CHOICES,
+        null_value=None
+    )
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
         field_name='cable',
         field_name='cable',
         lookup_expr='isnull',
         lookup_expr='isnull',
@@ -681,10 +686,14 @@ class PowerPortFilter(DeviceComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = PowerPort
         model = PowerPort
-        fields = ['id', 'name', 'type', 'maximum_draw', 'allocated_draw', 'description', 'connection_status']
+        fields = ['id', 'name', 'maximum_draw', 'allocated_draw', 'description', 'connection_status']
 
 
 
 
 class PowerOutletFilter(DeviceComponentFilterSet):
 class PowerOutletFilter(DeviceComponentFilterSet):
+    type = django_filters.MultipleChoiceFilter(
+        choices=PowerOutletTypes.CHOICES,
+        null_value=None
+    )
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
         field_name='cable',
         field_name='cable',
         lookup_expr='isnull',
         lookup_expr='isnull',
@@ -693,7 +702,7 @@ class PowerOutletFilter(DeviceComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = PowerOutlet
         model = PowerOutlet
-        fields = ['id', 'name', 'type', 'feed_leg', 'description', 'connection_status']
+        fields = ['id', 'name', 'feed_leg', 'description', 'connection_status']
 
 
 
 
 class InterfaceFilter(django_filters.FilterSet):
 class InterfaceFilter(django_filters.FilterSet):

+ 13 - 25
netbox/dcim/forms.py

@@ -954,7 +954,7 @@ class ConsolePortTemplateCreateForm(ComponentForm):
         label='Name'
         label='Name'
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
-        choices=CONSOLE_TYPE_CHOICES,
+        choices=ConsolePortTypes.CHOICES,
         widget=StaticSelect2()
         widget=StaticSelect2()
     )
     )
 
 
@@ -976,7 +976,7 @@ class ConsoleServerPortTemplateCreateForm(ComponentForm):
         label='Name'
         label='Name'
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
-        choices=CONSOLE_TYPE_CHOICES,
+        choices=add_blank_choice(ConsolePortTypes.CHOICES),
         widget=StaticSelect2()
         widget=StaticSelect2()
     )
     )
 
 
@@ -1265,9 +1265,6 @@ class ComponentTemplateImportForm(BootstrapMixin, forms.ModelForm):
 
 
 
 
 class ConsolePortTemplateImportForm(ComponentTemplateImportForm):
 class ConsolePortTemplateImportForm(ComponentTemplateImportForm):
-    type = forms.ChoiceField(
-        choices=ConsolePortTypes.TYPE_CHOICES
-    )
 
 
     class Meta:
     class Meta:
         model = ConsolePortTemplate
         model = ConsolePortTemplate
@@ -1275,16 +1272,8 @@ class ConsolePortTemplateImportForm(ComponentTemplateImportForm):
             'device_type', 'name', 'type',
             'device_type', 'name', 'type',
         ]
         ]
 
 
-    def clean_type(self):
-        # Convert slug value to field integer value
-        slug = self.cleaned_data['type']
-        return ConsolePortTypes.slug_to_integer(slug)
-
 
 
 class ConsoleServerPortTemplateImportForm(ComponentTemplateImportForm):
 class ConsoleServerPortTemplateImportForm(ComponentTemplateImportForm):
-    type = forms.ChoiceField(
-        choices=ConsolePortTypes.TYPE_CHOICES
-    )
 
 
     class Meta:
     class Meta:
         model = ConsoleServerPortTemplate
         model = ConsoleServerPortTemplate
@@ -1292,11 +1281,6 @@ class ConsoleServerPortTemplateImportForm(ComponentTemplateImportForm):
             'device_type', 'name', 'type',
             'device_type', 'name', 'type',
         ]
         ]
 
 
-    def clean_type(self):
-        # Convert slug value to field integer value
-        slug = self.cleaned_data['type']
-        return ConsolePortTypes.slug_to_integer(slug)
-
 
 
 class PowerPortTemplateImportForm(ComponentTemplateImportForm):
 class PowerPortTemplateImportForm(ComponentTemplateImportForm):
 
 
@@ -2099,8 +2083,9 @@ class ConsolePortCreateForm(ComponentForm):
         label='Name'
         label='Name'
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
-        choices=CONSOLE_TYPE_CHOICES,
-        widget=StaticSelect2(),
+        choices=add_blank_choice(ConsolePortTypes.CHOICES),
+        required=False,
+        widget=StaticSelect2()
     )
     )
     description = forms.CharField(
     description = forms.CharField(
         max_length=100,
         max_length=100,
@@ -2135,8 +2120,9 @@ class ConsoleServerPortCreateForm(ComponentForm):
         label='Name'
         label='Name'
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
-        choices=CONSOLE_TYPE_CHOICES,
-        widget=StaticSelect2(),
+        choices=add_blank_choice(ConsolePortTypes.CHOICES),
+        required=False,
+        widget=StaticSelect2()
     )
     )
     description = forms.CharField(
     description = forms.CharField(
         max_length=100,
         max_length=100,
@@ -2153,7 +2139,7 @@ class ConsoleServerPortBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditF
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
-        choices=add_blank_choice(CONSOLE_TYPE_CHOICES),
+        choices=add_blank_choice(ConsolePortTypes.CHOICES),
         required=False,
         required=False,
         widget=StaticSelect2()
         widget=StaticSelect2()
     )
     )
@@ -2207,7 +2193,8 @@ class PowerPortCreateForm(ComponentForm):
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerPortTypes.CHOICES),
         choices=add_blank_choice(PowerPortTypes.CHOICES),
-        required=False
+        required=False,
+        widget=StaticSelect2()
     )
     )
     maximum_draw = forms.IntegerField(
     maximum_draw = forms.IntegerField(
         min_value=1,
         min_value=1,
@@ -2266,7 +2253,8 @@ class PowerOutletCreateForm(ComponentForm):
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerOutletTypes.CHOICES),
         choices=add_blank_choice(PowerOutletTypes.CHOICES),
-        required=False
+        required=False,
+        widget=StaticSelect2()
     )
     )
     power_port = forms.ModelChoiceField(
     power_port = forms.ModelChoiceField(
         queryset=PowerPort.objects.all(),
         queryset=PowerPort.objects.all(),

+ 4 - 4
netbox/dcim/migrations/0076_console_port_types.py

@@ -13,21 +13,21 @@ class Migration(migrations.Migration):
         migrations.AddField(
         migrations.AddField(
             model_name='consoleport',
             model_name='consoleport',
             name='type',
             name='type',
-            field=models.PositiveSmallIntegerField(blank=True, null=True),
+            field=models.CharField(blank=True, max_length=50),
         ),
         ),
         migrations.AddField(
         migrations.AddField(
             model_name='consoleporttemplate',
             model_name='consoleporttemplate',
             name='type',
             name='type',
-            field=models.PositiveSmallIntegerField(blank=True, null=True),
+            field=models.CharField(blank=True, max_length=50),
         ),
         ),
         migrations.AddField(
         migrations.AddField(
             model_name='consoleserverport',
             model_name='consoleserverport',
             name='type',
             name='type',
-            field=models.PositiveSmallIntegerField(blank=True, null=True),
+            field=models.CharField(blank=True, max_length=50),
         ),
         ),
         migrations.AddField(
         migrations.AddField(
             model_name='consoleserverporttemplate',
             model_name='consoleserverporttemplate',
             name='type',
             name='type',
-            field=models.PositiveSmallIntegerField(blank=True, null=True),
+            field=models.CharField(blank=True, max_length=50),
         ),
         ),
     ]
     ]

+ 17 - 17
netbox/dcim/models.py

@@ -20,7 +20,7 @@ from utilities.fields import ColorField
 from utilities.managers import NaturalOrderingManager
 from utilities.managers import NaturalOrderingManager
 from utilities.models import ChangeLoggedModel
 from utilities.models import ChangeLoggedModel
 from utilities.utils import serialize_object, to_meters
 from utilities.utils import serialize_object, to_meters
-from .choices import PowerOutletTypes, PowerPortTypes
+from .choices import *
 from .constants import *
 from .constants import *
 from .exceptions import LoopDetected
 from .exceptions import LoopDetected
 from .fields import ASNField, MACAddressField
 from .fields import ASNField, MACAddressField
@@ -1015,10 +1015,10 @@ class ConsolePortTemplate(ComponentTemplateModel):
     name = models.CharField(
     name = models.CharField(
         max_length=50
         max_length=50
     )
     )
-    type = models.PositiveSmallIntegerField(
-        choices=CONSOLE_TYPE_CHOICES,
-        blank=True,
-        null=True
+    type = models.CharField(
+        max_length=50,
+        choices=ConsolePortTypes.CHOICES,
+        blank=True
     )
     )
 
 
     objects = NaturalOrderingManager()
     objects = NaturalOrderingManager()
@@ -1050,10 +1050,10 @@ class ConsoleServerPortTemplate(ComponentTemplateModel):
     name = models.CharField(
     name = models.CharField(
         max_length=50
         max_length=50
     )
     )
-    type = models.PositiveSmallIntegerField(
-        choices=CONSOLE_TYPE_CHOICES,
-        blank=True,
-        null=True
+    type = models.CharField(
+        max_length=50,
+        choices=ConsolePortTypes.CHOICES,
+        blank=True
     )
     )
 
 
     objects = NaturalOrderingManager()
     objects = NaturalOrderingManager()
@@ -1869,10 +1869,10 @@ class ConsolePort(CableTermination, ComponentModel):
     name = models.CharField(
     name = models.CharField(
         max_length=50
         max_length=50
     )
     )
-    type = models.PositiveSmallIntegerField(
-        choices=CONSOLE_TYPE_CHOICES,
-        blank=True,
-        null=True
+    type = models.CharField(
+        max_length=50,
+        choices=ConsolePortTypes.CHOICES,
+        blank=True
     )
     )
     connected_endpoint = models.OneToOneField(
     connected_endpoint = models.OneToOneField(
         to='dcim.ConsoleServerPort',
         to='dcim.ConsoleServerPort',
@@ -1926,10 +1926,10 @@ class ConsoleServerPort(CableTermination, ComponentModel):
     name = models.CharField(
     name = models.CharField(
         max_length=50
         max_length=50
     )
     )
-    type = models.PositiveSmallIntegerField(
-        choices=CONSOLE_TYPE_CHOICES,
-        blank=True,
-        null=True
+    type = models.CharField(
+        max_length=50,
+        choices=ConsolePortTypes.CHOICES,
+        blank=True
     )
     )
     connection_status = models.NullBooleanField(
     connection_status = models.NullBooleanField(
         choices=CONNECTION_STATUS_CHOICES,
         choices=CONNECTION_STATUS_CHOICES,

+ 3 - 2
netbox/dcim/tests/test_views.py

@@ -3,6 +3,7 @@ import urllib.parse
 from django.test import Client, TestCase
 from django.test import Client, TestCase
 from django.urls import reverse
 from django.urls import reverse
 
 
+from dcim.choices import *
 from dcim.constants import *
 from dcim.constants import *
 from dcim.models import (
 from dcim.models import (
     Cable, ConsolePortTemplate, ConsoleServerPortTemplate, Device, DeviceBayTemplate, DeviceRole, DeviceType,
     Cable, ConsolePortTemplate, ConsoleServerPortTemplate, Device, DeviceBayTemplate, DeviceRole, DeviceType,
@@ -319,12 +320,12 @@ device-bays:
         self.assertEqual(dt.consoleport_templates.count(), 3)
         self.assertEqual(dt.consoleport_templates.count(), 3)
         cp1 = ConsolePortTemplate.objects.first()
         cp1 = ConsolePortTemplate.objects.first()
         self.assertEqual(cp1.name, 'Console Port 1')
         self.assertEqual(cp1.name, 'Console Port 1')
-        self.assertEqual(cp1.type, CONSOLE_TYPE_DE9)
+        self.assertEqual(cp1.type, ConsolePortTypes.TYPE_DE9)
 
 
         self.assertEqual(dt.consoleserverport_templates.count(), 3)
         self.assertEqual(dt.consoleserverport_templates.count(), 3)
         csp1 = ConsoleServerPortTemplate.objects.first()
         csp1 = ConsoleServerPortTemplate.objects.first()
         self.assertEqual(csp1.name, 'Console Server Port 1')
         self.assertEqual(csp1.name, 'Console Server Port 1')
-        self.assertEqual(csp1.type, CONSOLE_TYPE_RJ45)
+        self.assertEqual(csp1.type, ConsolePortTypes.TYPE_RJ45)
 
 
         self.assertEqual(dt.powerport_templates.count(), 3)
         self.assertEqual(dt.powerport_templates.count(), 3)
         pp1 = PowerPortTemplate.objects.first()
         pp1 = PowerPortTemplate.objects.first()