mirror of
https://github.com/netbox-community/netbox.git
synced 2025-12-19 03:42:25 -06:00
Simplify nested port assignment representation
This commit is contained in:
@@ -295,13 +295,16 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect
|
|||||||
|
|
||||||
|
|
||||||
class RearPortAssignmentSerializer(serializers.ModelSerializer):
|
class RearPortAssignmentSerializer(serializers.ModelSerializer):
|
||||||
|
position = serializers.IntegerField(
|
||||||
|
source='rear_port_position'
|
||||||
|
)
|
||||||
front_port = serializers.PrimaryKeyRelatedField(
|
front_port = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=FrontPort.objects.all(),
|
queryset=FrontPort.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PortAssignment
|
model = PortAssignment
|
||||||
fields = ('id', 'rear_port_position', 'front_port', 'front_port_position')
|
fields = ('position', 'front_port', 'front_port_position')
|
||||||
|
|
||||||
|
|
||||||
class RearPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
|
class RearPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
|
||||||
@@ -352,13 +355,16 @@ class RearPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class FrontPortAssignmentSerializer(serializers.ModelSerializer):
|
class FrontPortAssignmentSerializer(serializers.ModelSerializer):
|
||||||
|
position = serializers.IntegerField(
|
||||||
|
source='front_port_position'
|
||||||
|
)
|
||||||
rear_port = serializers.PrimaryKeyRelatedField(
|
rear_port = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=RearPort.objects.all(),
|
queryset=RearPort.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PortAssignment
|
model = PortAssignment
|
||||||
fields = ('id', 'front_port_position', 'rear_port', 'rear_port_position')
|
fields = ('position', 'rear_port', 'rear_port_position')
|
||||||
|
|
||||||
|
|
||||||
class FrontPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
|
class FrontPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
|
||||||
|
|||||||
@@ -207,13 +207,16 @@ class InterfaceTemplateSerializer(ComponentTemplateSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class RearPortTemplateAssignmentSerializer(serializers.ModelSerializer):
|
class RearPortTemplateAssignmentSerializer(serializers.ModelSerializer):
|
||||||
|
position = serializers.IntegerField(
|
||||||
|
source='rear_port_position'
|
||||||
|
)
|
||||||
front_port = serializers.PrimaryKeyRelatedField(
|
front_port = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=FrontPortTemplate.objects.all(),
|
queryset=FrontPortTemplate.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PortAssignmentTemplate
|
model = PortAssignmentTemplate
|
||||||
fields = ('id', 'rear_port_position', 'front_port', 'front_port_position')
|
fields = ('position', 'front_port', 'front_port_position')
|
||||||
|
|
||||||
|
|
||||||
class RearPortTemplateSerializer(ComponentTemplateSerializer):
|
class RearPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
@@ -268,13 +271,16 @@ class RearPortTemplateSerializer(ComponentTemplateSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateAssignmentSerializer(serializers.ModelSerializer):
|
class FrontPortTemplateAssignmentSerializer(serializers.ModelSerializer):
|
||||||
|
position = serializers.IntegerField(
|
||||||
|
source='front_port_position'
|
||||||
|
)
|
||||||
rear_port = serializers.PrimaryKeyRelatedField(
|
rear_port = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=RearPortTemplate.objects.all(),
|
queryset=RearPortTemplate.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PortAssignmentTemplate
|
model = PortAssignmentTemplate
|
||||||
fields = ('id', 'front_port_position', 'rear_port', 'rear_port_position')
|
fields = ('position', 'rear_port', 'rear_port_position')
|
||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateSerializer(ComponentTemplateSerializer):
|
class FrontPortTemplateSerializer(ComponentTemplateSerializer):
|
||||||
|
|||||||
@@ -973,25 +973,20 @@ class FrontPortTemplateTest(APIViewTestCases.APIViewTestCase):
|
|||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 4', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 4', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(module_type=moduletype, name='Rear Port Template 5', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 5', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(module_type=moduletype, name='Rear Port Template 6', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 6', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(module_type=moduletype, name='Rear Port Template 7', type=PortTypeChoices.TYPE_8P8C),
|
|
||||||
RearPortTemplate(module_type=moduletype, name='Rear Port Template 8', type=PortTypeChoices.TYPE_8P8C),
|
|
||||||
)
|
)
|
||||||
RearPortTemplate.objects.bulk_create(rear_port_templates)
|
RearPortTemplate.objects.bulk_create(rear_port_templates)
|
||||||
|
|
||||||
front_port_templates = (
|
front_port_templates = (
|
||||||
FrontPortTemplate(device_type=devicetype, name='Front Port Template 1', type=PortTypeChoices.TYPE_8P8C),
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
FrontPortTemplate(device_type=devicetype, name='Front Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
FrontPortTemplate(module_type=moduletype, name='Front Port Template 5', type=PortTypeChoices.TYPE_8P8C),
|
FrontPortTemplate(module_type=moduletype, name='Front Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
||||||
FrontPortTemplate(module_type=moduletype, name='Front Port Template 6', type=PortTypeChoices.TYPE_8P8C),
|
|
||||||
)
|
)
|
||||||
FrontPortTemplate.objects.bulk_create(front_port_templates)
|
FrontPortTemplate.objects.bulk_create(front_port_templates)
|
||||||
PortAssignmentTemplate.objects.bulk_create([
|
PortAssignmentTemplate.objects.bulk_create([
|
||||||
PortAssignmentTemplate(front_port=front_port_templates[0], rear_port=rear_port_templates[0]),
|
PortAssignmentTemplate(front_port=front_port_templates[0], rear_port=rear_port_templates[0]),
|
||||||
PortAssignmentTemplate(front_port=front_port_templates[1], rear_port=rear_port_templates[1]),
|
PortAssignmentTemplate(front_port=front_port_templates[1], rear_port=rear_port_templates[1]),
|
||||||
PortAssignmentTemplate(front_port=front_port_templates[2], rear_port=rear_port_templates[4]),
|
PortAssignmentTemplate(front_port=front_port_templates[2], rear_port=rear_port_templates[2]),
|
||||||
PortAssignmentTemplate(front_port=front_port_templates[3], rear_port=rear_port_templates[5]),
|
|
||||||
])
|
])
|
||||||
|
|
||||||
cls.create_data = [
|
cls.create_data = [
|
||||||
@@ -1001,8 +996,8 @@ class FrontPortTemplateTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_port_templates[2].pk,
|
'rear_port': rear_port_templates[3].pk,
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -1013,8 +1008,8 @@ class FrontPortTemplateTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_port_templates[3].pk,
|
'rear_port': rear_port_templates[4].pk,
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -1025,20 +1020,8 @@ class FrontPortTemplateTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_port_templates[6].pk,
|
'rear_port': rear_port_templates[5].pk,
|
||||||
'rear_port_position': 1,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'module_type': moduletype.pk,
|
|
||||||
'name': 'Front Port Template 8',
|
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
|
||||||
'rear_ports': [
|
|
||||||
{
|
|
||||||
'front_port_position': 1,
|
|
||||||
'rear_port': rear_port_templates[7].pk,
|
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -1063,33 +1046,63 @@ class RearPortTemplateTest(APIViewTestCases.APIViewTestCase):
|
|||||||
manufacturer=manufacturer, model='Module Type 1'
|
manufacturer=manufacturer, model='Module Type 1'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
front_port_templates = (
|
||||||
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPortTemplate(module_type=moduletype, name='Front Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPortTemplate(module_type=moduletype, name='Front Port Template 4', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPortTemplate(module_type=moduletype, name='Front Port Template 5', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPortTemplate(module_type=moduletype, name='Front Port Template 6', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
)
|
||||||
|
FrontPortTemplate.objects.bulk_create(front_port_templates)
|
||||||
rear_port_templates = (
|
rear_port_templates = (
|
||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 1', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPortTemplate(device_type=devicetype, name='Rear Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 3', type=PortTypeChoices.TYPE_8P8C),
|
||||||
)
|
)
|
||||||
RearPortTemplate.objects.bulk_create(rear_port_templates)
|
RearPortTemplate.objects.bulk_create(rear_port_templates)
|
||||||
|
PortAssignmentTemplate.objects.bulk_create([
|
||||||
|
PortAssignmentTemplate(front_port=front_port_templates[0], rear_port=rear_port_templates[0]),
|
||||||
|
PortAssignmentTemplate(front_port=front_port_templates[1], rear_port=rear_port_templates[1]),
|
||||||
|
PortAssignmentTemplate(front_port=front_port_templates[2], rear_port=rear_port_templates[2]),
|
||||||
|
])
|
||||||
|
|
||||||
cls.create_data = [
|
cls.create_data = [
|
||||||
{
|
{
|
||||||
'device_type': devicetype.pk,
|
'device_type': devicetype.pk,
|
||||||
'name': 'Rear Port Template 4',
|
'name': 'Rear Port Template 4',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'front_ports': [
|
||||||
|
{
|
||||||
|
'position': 1,
|
||||||
|
'front_port': front_port_templates[3].pk,
|
||||||
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'device_type': devicetype.pk,
|
'device_type': devicetype.pk,
|
||||||
'name': 'Rear Port Template 5',
|
'name': 'Rear Port Template 5',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'front_ports': [
|
||||||
|
{
|
||||||
|
'position': 1,
|
||||||
|
'front_port': front_port_templates[4].pk,
|
||||||
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'module_type': moduletype.pk,
|
'module_type': moduletype.pk,
|
||||||
'name': 'Rear Port Template 6',
|
'name': 'Rear Port Template 6',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
},
|
'front_ports': [
|
||||||
{
|
{
|
||||||
'module_type': moduletype.pk,
|
'position': 1,
|
||||||
'name': 'Rear Port Template 7',
|
'front_port': front_port_templates[5].pk,
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2021,7 +2034,6 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
RearPort(device=device, name='Rear Port 6', type=PortTypeChoices.TYPE_8P8C),
|
RearPort(device=device, name='Rear Port 6', type=PortTypeChoices.TYPE_8P8C),
|
||||||
)
|
)
|
||||||
RearPort.objects.bulk_create(rear_ports)
|
RearPort.objects.bulk_create(rear_ports)
|
||||||
|
|
||||||
front_ports = (
|
front_ports = (
|
||||||
FrontPort(device=device, name='Front Port 1', type=PortTypeChoices.TYPE_8P8C),
|
FrontPort(device=device, name='Front Port 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
FrontPort(device=device, name='Front Port 2', type=PortTypeChoices.TYPE_8P8C),
|
FrontPort(device=device, name='Front Port 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
@@ -2041,7 +2053,7 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_ports[3].pk,
|
'rear_port': rear_ports[3].pk,
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
@@ -2053,7 +2065,7 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_ports[4].pk,
|
'rear_port': rear_ports[4].pk,
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
@@ -2065,7 +2077,7 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
'rear_ports': [
|
'rear_ports': [
|
||||||
{
|
{
|
||||||
'front_port_position': 1,
|
'position': 1,
|
||||||
'rear_port': rear_ports[5].pk,
|
'rear_port': rear_ports[5].pk,
|
||||||
'rear_port_position': 1,
|
'rear_port_position': 1,
|
||||||
},
|
},
|
||||||
@@ -2106,6 +2118,15 @@ class RearPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000')
|
role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000')
|
||||||
device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site)
|
device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site)
|
||||||
|
|
||||||
|
front_ports = (
|
||||||
|
FrontPort(device=device, name='Front Port 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPort(device=device, name='Front Port 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPort(device=device, name='Front Port 3', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPort(device=device, name='Front Port 4', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPort(device=device, name='Front Port 5', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
FrontPort(device=device, name='Front Port 6', type=PortTypeChoices.TYPE_8P8C),
|
||||||
|
)
|
||||||
|
FrontPort.objects.bulk_create(front_ports)
|
||||||
rear_ports = (
|
rear_ports = (
|
||||||
RearPort(device=device, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C),
|
RearPort(device=device, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C),
|
||||||
RearPort(device=device, name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C),
|
RearPort(device=device, name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C),
|
||||||
@@ -2118,16 +2139,37 @@ class RearPortTest(APIViewTestCases.APIViewTestCase):
|
|||||||
'device': device.pk,
|
'device': device.pk,
|
||||||
'name': 'Rear Port 4',
|
'name': 'Rear Port 4',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'front_ports': [
|
||||||
|
{
|
||||||
|
'position': 1,
|
||||||
|
'front_port': front_ports[3].pk,
|
||||||
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'device': device.pk,
|
'device': device.pk,
|
||||||
'name': 'Rear Port 5',
|
'name': 'Rear Port 5',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'front_ports': [
|
||||||
|
{
|
||||||
|
'position': 1,
|
||||||
|
'front_port': front_ports[4].pk,
|
||||||
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'device': device.pk,
|
'device': device.pk,
|
||||||
'name': 'Rear Port 6',
|
'name': 'Rear Port 6',
|
||||||
'type': PortTypeChoices.TYPE_8P8C,
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'front_ports': [
|
||||||
|
{
|
||||||
|
'position': 1,
|
||||||
|
'front_port': front_ports[5].pk,
|
||||||
|
'front_port_position': 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user