Front/RearPort.type to slug (#3569)

This commit is contained in:
Jeremy Stretch 2019-11-25 19:39:25 -05:00
parent bcc34f6099
commit dead5b42be
7 changed files with 127 additions and 89 deletions

View File

@ -266,7 +266,7 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
class RearPortTemplateSerializer(ValidatedModelSerializer): class RearPortTemplateSerializer(ValidatedModelSerializer):
device_type = NestedDeviceTypeSerializer() device_type = NestedDeviceTypeSerializer()
type = ChoiceField(choices=PORT_TYPE_CHOICES) type = ChoiceField(choices=PortTypeChoices)
class Meta: class Meta:
model = RearPortTemplate model = RearPortTemplate
@ -275,7 +275,7 @@ class RearPortTemplateSerializer(ValidatedModelSerializer):
class FrontPortTemplateSerializer(ValidatedModelSerializer): class FrontPortTemplateSerializer(ValidatedModelSerializer):
device_type = NestedDeviceTypeSerializer() device_type = NestedDeviceTypeSerializer()
type = ChoiceField(choices=PORT_TYPE_CHOICES) type = ChoiceField(choices=PortTypeChoices)
rear_port = NestedRearPortTemplateSerializer() rear_port = NestedRearPortTemplateSerializer()
class Meta: class Meta:
@ -511,7 +511,7 @@ class InterfaceSerializer(TaggitSerializer, ConnectedEndpointSerializer):
class RearPortSerializer(TaggitSerializer, ValidatedModelSerializer): class RearPortSerializer(TaggitSerializer, ValidatedModelSerializer):
device = NestedDeviceSerializer() device = NestedDeviceSerializer()
type = ChoiceField(choices=PORT_TYPE_CHOICES) type = ChoiceField(choices=PortTypeChoices)
cable = NestedCableSerializer(read_only=True) cable = NestedCableSerializer(read_only=True)
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)
@ -533,7 +533,7 @@ class FrontPortRearPortSerializer(WritableNestedSerializer):
class FrontPortSerializer(TaggitSerializer, ValidatedModelSerializer): class FrontPortSerializer(TaggitSerializer, ValidatedModelSerializer):
device = NestedDeviceSerializer() device = NestedDeviceSerializer()
type = ChoiceField(choices=PORT_TYPE_CHOICES) type = ChoiceField(choices=PortTypeChoices)
rear_port = FrontPortRearPortSerializer() rear_port = FrontPortRearPortSerializer()
cable = NestedCableSerializer(read_only=True) cable = NestedCableSerializer(read_only=True)
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)

View File

@ -20,47 +20,6 @@ WIRELESS_IFACE_TYPES = [
NONCONNECTABLE_IFACE_TYPES = VIRTUAL_IFACE_TYPES + WIRELESS_IFACE_TYPES NONCONNECTABLE_IFACE_TYPES = VIRTUAL_IFACE_TYPES + WIRELESS_IFACE_TYPES
# Pass-through port types
PORT_TYPE_8P8C = 1000
PORT_TYPE_110_PUNCH = 1100
PORT_TYPE_BNC = 1200
PORT_TYPE_ST = 2000
PORT_TYPE_SC = 2100
PORT_TYPE_SC_APC = 2110
PORT_TYPE_FC = 2200
PORT_TYPE_LC = 2300
PORT_TYPE_LC_APC = 2310
PORT_TYPE_MTRJ = 2400
PORT_TYPE_MPO = 2500
PORT_TYPE_LSH = 2600
PORT_TYPE_LSH_APC = 2610
PORT_TYPE_CHOICES = [
[
'Copper',
[
[PORT_TYPE_8P8C, '8P8C'],
[PORT_TYPE_110_PUNCH, '110 Punch'],
[PORT_TYPE_BNC, 'BNC'],
],
],
[
'Fiber Optic',
[
[PORT_TYPE_FC, 'FC'],
[PORT_TYPE_LC, 'LC'],
[PORT_TYPE_LC_APC, 'LC/APC'],
[PORT_TYPE_LSH, 'LSH'],
[PORT_TYPE_LSH_APC, 'LSH/APC'],
[PORT_TYPE_MPO, 'MPO'],
[PORT_TYPE_MTRJ, 'MTRJ'],
[PORT_TYPE_SC, 'SC'],
[PORT_TYPE_SC_APC, 'SC/APC'],
[PORT_TYPE_ST, 'ST'],
]
]
]
# Bootstrap CSS classes for device/rack statuses # Bootstrap CSS classes for device/rack statuses
STATUS_CLASSES = { STATUS_CLASSES = {
0: 'warning', 0: 'warning',

View File

@ -1133,7 +1133,7 @@ class FrontPortTemplateCreateForm(ComponentForm):
label='Name' label='Name'
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=PORT_TYPE_CHOICES, choices=PortTypeChoices,
widget=StaticSelect2() widget=StaticSelect2()
) )
rear_port_set = forms.MultipleChoiceField( rear_port_set = forms.MultipleChoiceField(
@ -1203,7 +1203,7 @@ class RearPortTemplateCreateForm(ComponentForm):
label='Name' label='Name'
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=PORT_TYPE_CHOICES, choices=PortTypeChoices,
widget=StaticSelect2(), widget=StaticSelect2(),
) )
positions = forms.IntegerField( positions = forms.IntegerField(
@ -1328,11 +1328,6 @@ class FrontPortTemplateImportForm(ComponentTemplateImportForm):
'device_type', 'name', 'type', 'rear_port', 'rear_port_position', 'device_type', 'name', 'type', 'rear_port', 'rear_port_position',
] ]
def clean_type(self):
# Convert slug value to field integer value
slug = self.cleaned_data['type']
return PortTypeChoices.slug_to_id(slug)
class RearPortTemplateImportForm(ComponentTemplateImportForm): class RearPortTemplateImportForm(ComponentTemplateImportForm):
type = forms.ChoiceField( type = forms.ChoiceField(
@ -1345,11 +1340,6 @@ class RearPortTemplateImportForm(ComponentTemplateImportForm):
'device_type', 'name', 'type', 'positions', 'device_type', 'name', 'type', 'positions',
] ]
def clean_type(self):
# Convert slug value to field integer value
slug = self.cleaned_data['type']
return PortTypeChoices.slug_to_id(slug)
class DeviceBayTemplateImportForm(ComponentTemplateImportForm): class DeviceBayTemplateImportForm(ComponentTemplateImportForm):
@ -2686,7 +2676,7 @@ class FrontPortCreateForm(ComponentForm):
label='Name' label='Name'
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=PORT_TYPE_CHOICES, choices=PortTypeChoices,
widget=StaticSelect2(), widget=StaticSelect2(),
) )
rear_port_set = forms.MultipleChoiceField( rear_port_set = forms.MultipleChoiceField(
@ -2746,7 +2736,7 @@ class FrontPortBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
widget=forms.MultipleHiddenInput() widget=forms.MultipleHiddenInput()
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=add_blank_choice(PORT_TYPE_CHOICES), choices=add_blank_choice(PortTypeChoices),
required=False, required=False,
widget=StaticSelect2() widget=StaticSelect2()
) )
@ -2800,7 +2790,7 @@ class RearPortCreateForm(ComponentForm):
label='Name' label='Name'
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=PORT_TYPE_CHOICES, choices=PortTypeChoices,
widget=StaticSelect2(), widget=StaticSelect2(),
) )
positions = forms.IntegerField( positions = forms.IntegerField(
@ -2820,7 +2810,7 @@ class RearPortBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
widget=forms.MultipleHiddenInput() widget=forms.MultipleHiddenInput()
) )
type = forms.ChoiceField( type = forms.ChoiceField(
choices=add_blank_choice(PORT_TYPE_CHOICES), choices=add_blank_choice(PortTypeChoices),
required=False, required=False,
widget=StaticSelect2() widget=StaticSelect2()
) )

View File

@ -0,0 +1,85 @@
from django.db import migrations, models
PORT_TYPE_CHOICES = (
(1000, '8p8c'),
(1100, '110-punch'),
(1200, 'bnc'),
(2000, 'st'),
(2100, 'sc'),
(2110, 'sc-apc'),
(2200, 'fc'),
(2300, 'lc'),
(2310, 'lc-apc'),
(2400, 'mtrj'),
(2500, 'mpo'),
(2600, 'lsh'),
(2610, 'lsh-apc'),
)
def frontporttemplate_type_to_slug(apps, schema_editor):
FrontPortTemplate = apps.get_model('dcim', 'FrontPortTemplate')
for id, slug in PORT_TYPE_CHOICES:
FrontPortTemplate.objects.filter(type=id).update(type=slug)
def rearporttemplate_type_to_slug(apps, schema_editor):
RearPortTemplate = apps.get_model('dcim', 'RearPortTemplate')
for id, slug in PORT_TYPE_CHOICES:
RearPortTemplate.objects.filter(type=id).update(type=slug)
def frontport_type_to_slug(apps, schema_editor):
FrontPort = apps.get_model('dcim', 'FrontPort')
for id, slug in PORT_TYPE_CHOICES:
FrontPort.objects.filter(type=id).update(type=slug)
def rearport_type_to_slug(apps, schema_editor):
RearPort = apps.get_model('dcim', 'RearPort')
for id, slug in PORT_TYPE_CHOICES:
RearPort.objects.filter(type=id).update(type=slug)
class Migration(migrations.Migration):
atomic = False
dependencies = [
('dcim', '0082_3569_interface_fields'),
]
operations = [
migrations.AlterField(
model_name='frontporttemplate',
name='type',
field=models.CharField(max_length=50),
),
migrations.RunPython(
code=frontporttemplate_type_to_slug
),
migrations.AlterField(
model_name='rearporttemplate',
name='type',
field=models.CharField(max_length=50),
),
migrations.RunPython(
code=rearporttemplate_type_to_slug
),
migrations.AlterField(
model_name='frontport',
name='type',
field=models.CharField(max_length=50),
),
migrations.RunPython(
code=frontport_type_to_slug
),
migrations.AlterField(
model_name='rearport',
name='type',
field=models.CharField(max_length=50),
),
migrations.RunPython(
code=rearport_type_to_slug
),
]

View File

@ -1252,8 +1252,9 @@ class FrontPortTemplate(ComponentTemplateModel):
name = models.CharField( name = models.CharField(
max_length=64 max_length=64
) )
type = models.PositiveSmallIntegerField( type = models.CharField(
choices=PORT_TYPE_CHOICES max_length=50,
choices=PortTypeChoices
) )
rear_port = models.ForeignKey( rear_port = models.ForeignKey(
to='dcim.RearPortTemplate', to='dcim.RearPortTemplate',
@ -1319,8 +1320,9 @@ class RearPortTemplate(ComponentTemplateModel):
name = models.CharField( name = models.CharField(
max_length=64 max_length=64
) )
type = models.PositiveSmallIntegerField( type = models.CharField(
choices=PORT_TYPE_CHOICES max_length=50,
choices=PortTypeChoices
) )
positions = models.PositiveSmallIntegerField( positions = models.PositiveSmallIntegerField(
default=1, default=1,
@ -2475,8 +2477,9 @@ class FrontPort(CableTermination, ComponentModel):
name = models.CharField( name = models.CharField(
max_length=64 max_length=64
) )
type = models.PositiveSmallIntegerField( type = models.CharField(
choices=PORT_TYPE_CHOICES max_length=50,
choices=PortTypeChoices
) )
rear_port = models.ForeignKey( rear_port = models.ForeignKey(
to='dcim.RearPort', to='dcim.RearPort',
@ -2542,8 +2545,9 @@ class RearPort(CableTermination, ComponentModel):
name = models.CharField( name = models.CharField(
max_length=64 max_length=64
) )
type = models.PositiveSmallIntegerField( type = models.CharField(
choices=PORT_TYPE_CHOICES max_length=50,
choices=PortTypeChoices
) )
positions = models.PositiveSmallIntegerField( positions = models.PositiveSmallIntegerField(
default=1, default=1,

View File

@ -3034,16 +3034,16 @@ class ConnectionTest(APITestCase):
device=self.device2, name='Test Console Server Port 1' device=self.device2, name='Test Console Server Port 1'
) )
rearport1 = RearPort.objects.create( rearport1 = RearPort.objects.create(
device=self.panel1, name='Test Rear Port 1', type=PORT_TYPE_8P8C device=self.panel1, name='Test Rear Port 1', type=PortTypeChoices.TYPE_8P8C
) )
frontport1 = FrontPort.objects.create( frontport1 = FrontPort.objects.create(
device=self.panel1, name='Test Front Port 1', type=PORT_TYPE_8P8C, rear_port=rearport1 device=self.panel1, name='Test Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport1
) )
rearport2 = RearPort.objects.create( rearport2 = RearPort.objects.create(
device=self.panel2, name='Test Rear Port 2', type=PORT_TYPE_8P8C device=self.panel2, name='Test Rear Port 2', type=PortTypeChoices.TYPE_8P8C
) )
frontport2 = FrontPort.objects.create( frontport2 = FrontPort.objects.create(
device=self.panel2, name='Test Front Port 2', type=PORT_TYPE_8P8C, rear_port=rearport2 device=self.panel2, name='Test Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport2
) )
url = reverse('dcim-api:cable-list') url = reverse('dcim-api:cable-list')
@ -3162,16 +3162,16 @@ class ConnectionTest(APITestCase):
device=self.device2, name='Test Interface 2' device=self.device2, name='Test Interface 2'
) )
rearport1 = RearPort.objects.create( rearport1 = RearPort.objects.create(
device=self.panel1, name='Test Rear Port 1', type=PORT_TYPE_8P8C device=self.panel1, name='Test Rear Port 1', type=PortTypeChoices.TYPE_8P8C
) )
frontport1 = FrontPort.objects.create( frontport1 = FrontPort.objects.create(
device=self.panel1, name='Test Front Port 1', type=PORT_TYPE_8P8C, rear_port=rearport1 device=self.panel1, name='Test Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport1
) )
rearport2 = RearPort.objects.create( rearport2 = RearPort.objects.create(
device=self.panel2, name='Test Rear Port 2', type=PORT_TYPE_8P8C device=self.panel2, name='Test Rear Port 2', type=PortTypeChoices.TYPE_8P8C
) )
frontport2 = FrontPort.objects.create( frontport2 = FrontPort.objects.create(
device=self.panel2, name='Test Front Port 2', type=PORT_TYPE_8P8C, rear_port=rearport2 device=self.panel2, name='Test Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport2
) )
url = reverse('dcim-api:cable-list') url = reverse('dcim-api:cable-list')
@ -3273,16 +3273,16 @@ class ConnectionTest(APITestCase):
circuit=circuit, term_side='A', site=self.site, port_speed=10000 circuit=circuit, term_side='A', site=self.site, port_speed=10000
) )
rearport1 = RearPort.objects.create( rearport1 = RearPort.objects.create(
device=self.panel1, name='Test Rear Port 1', type=PORT_TYPE_8P8C device=self.panel1, name='Test Rear Port 1', type=PortTypeChoices.TYPE_8P8C
) )
frontport1 = FrontPort.objects.create( frontport1 = FrontPort.objects.create(
device=self.panel1, name='Test Front Port 1', type=PORT_TYPE_8P8C, rear_port=rearport1 device=self.panel1, name='Test Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport1
) )
rearport2 = RearPort.objects.create( rearport2 = RearPort.objects.create(
device=self.panel2, name='Test Rear Port 2', type=PORT_TYPE_8P8C device=self.panel2, name='Test Rear Port 2', type=PortTypeChoices.TYPE_8P8C
) )
frontport2 = FrontPort.objects.create( frontport2 = FrontPort.objects.create(
device=self.panel2, name='Test Front Port 2', type=PORT_TYPE_8P8C, rear_port=rearport2 device=self.panel2, name='Test Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rearport2
) )
url = reverse('dcim-api:cable-list') url = reverse('dcim-api:cable-list')

View File

@ -200,7 +200,7 @@ class DeviceTestCase(TestCase):
rpt = RearPortTemplate( rpt = RearPortTemplate(
device_type=self.device_type, device_type=self.device_type,
name='Rear Port 1', name='Rear Port 1',
type=PORT_TYPE_8P8C, type=PortTypeChoices.TYPE_8P8C,
positions=8 positions=8
) )
rpt.save() rpt.save()
@ -208,7 +208,7 @@ class DeviceTestCase(TestCase):
FrontPortTemplate( FrontPortTemplate(
device_type=self.device_type, device_type=self.device_type,
name='Front Port 1', name='Front Port 1',
type=PORT_TYPE_8P8C, type=PortTypeChoices.TYPE_8P8C,
rear_port=rpt, rear_port=rpt,
rear_port_position=2 rear_port_position=2
).save() ).save()
@ -264,14 +264,14 @@ class DeviceTestCase(TestCase):
rp = RearPort.objects.get( rp = RearPort.objects.get(
device=d, device=d,
name='Rear Port 1', name='Rear Port 1',
type=PORT_TYPE_8P8C, type=PortTypeChoices.TYPE_8P8C,
positions=8 positions=8
) )
FrontPort.objects.get( FrontPort.objects.get(
device=d, device=d,
name='Front Port 1', name='Front Port 1',
type=PORT_TYPE_8P8C, type=PortTypeChoices.TYPE_8P8C,
rear_port=rp, rear_port=rp,
rear_port_position=2 rear_port_position=2
) )
@ -421,16 +421,16 @@ class CablePathTestCase(TestCase):
device_type=devicetype, device_role=devicerole, name='Test Panel 2', site=site device_type=devicetype, device_role=devicerole, name='Test Panel 2', site=site
) )
self.rear_port1 = RearPort.objects.create( self.rear_port1 = RearPort.objects.create(
device=self.panel1, name='Rear Port 1', type=PORT_TYPE_8P8C device=self.panel1, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C
) )
self.front_port1 = FrontPort.objects.create( self.front_port1 = FrontPort.objects.create(
device=self.panel1, name='Front Port 1', type=PORT_TYPE_8P8C, rear_port=self.rear_port1 device=self.panel1, name='Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=self.rear_port1
) )
self.rear_port2 = RearPort.objects.create( self.rear_port2 = RearPort.objects.create(
device=self.panel2, name='Rear Port 2', type=PORT_TYPE_8P8C device=self.panel2, name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C
) )
self.front_port2 = FrontPort.objects.create( self.front_port2 = FrontPort.objects.create(
device=self.panel2, name='Front Port 2', type=PORT_TYPE_8P8C, rear_port=self.rear_port2 device=self.panel2, name='Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=self.rear_port2
) )
def test_path_completion(self): def test_path_completion(self):