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

PowerOutlet.feed_leg to slug (#3569)

This commit is contained in:
Jeremy Stretch
2019-11-27 21:29:58 -05:00
parent 8c7f6c62b0
commit 21fe5902a8
8 changed files with 99 additions and 28 deletions

View File

@ -245,7 +245,7 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
required=False required=False
) )
feed_leg = ChoiceField( feed_leg = ChoiceField(
choices=POWERFEED_LEG_CHOICES, choices=PowerOutletFeedLegChoices,
required=False, required=False,
allow_null=True allow_null=True
) )
@ -429,7 +429,7 @@ class PowerOutletSerializer(TaggitSerializer, ConnectedEndpointSerializer):
required=False required=False
) )
feed_leg = ChoiceField( feed_leg = ChoiceField(
choices=POWERFEED_LEG_CHOICES, choices=PowerOutletFeedLegChoices,
required=False, required=False,
allow_null=True allow_null=True
) )

View File

@ -391,6 +391,25 @@ class PowerOutletTypeChoices(ChoiceSet):
) )
class PowerOutletFeedLegChoices(ChoiceSet):
FEED_LEG_A = 'A'
FEED_LEG_B = 'B'
FEED_LEG_C = 'C'
CHOICES = (
(FEED_LEG_A, 'A'),
(FEED_LEG_B, 'B'),
(FEED_LEG_C, 'C'),
)
LEGACY_MAP = {
FEED_LEG_A: 1,
FEED_LEG_B: 2,
FEED_LEG_C: 3,
}
# #
# Interfaces # Interfaces
# #

View File

@ -55,13 +55,3 @@ COMPATIBLE_TERMINATION_TYPES = {
'rearport': ['consoleport', 'consoleserverport', 'interface', 'frontport', 'rearport', 'circuittermination'], 'rearport': ['consoleport', 'consoleserverport', 'interface', 'frontport', 'rearport', 'circuittermination'],
'circuittermination': ['interface', 'frontport', 'rearport'], 'circuittermination': ['interface', 'frontport', 'rearport'],
} }
# Power feeds
POWERFEED_LEG_A = 1
POWERFEED_LEG_B = 2
POWERFEED_LEG_C = 3
POWERFEED_LEG_CHOICES = (
(POWERFEED_LEG_A, 'A'),
(POWERFEED_LEG_B, 'B'),
(POWERFEED_LEG_C, 'C'),
)

View File

@ -1043,7 +1043,7 @@ class PowerOutletTemplateCreateForm(ComponentForm):
required=False required=False
) )
feed_leg = forms.ChoiceField( feed_leg = forms.ChoiceField(
choices=add_blank_choice(POWERFEED_LEG_CHOICES), choices=add_blank_choice(PowerOutletFeedLegChoices),
required=False, required=False,
widget=StaticSelect2() widget=StaticSelect2()
) )
@ -2241,7 +2241,7 @@ class PowerOutletCreateForm(ComponentForm):
required=False required=False
) )
feed_leg = forms.ChoiceField( feed_leg = forms.ChoiceField(
choices=add_blank_choice(POWERFEED_LEG_CHOICES), choices=add_blank_choice(PowerOutletFeedLegChoices),
required=False required=False
) )
description = forms.CharField( description = forms.CharField(
@ -2270,7 +2270,7 @@ class PowerOutletBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
required=False required=False
) )
feed_leg = forms.ChoiceField( feed_leg = forms.ChoiceField(
choices=add_blank_choice(POWERFEED_LEG_CHOICES), choices=add_blank_choice(PowerOutletFeedLegChoices),
required=False, required=False,
) )
power_port = forms.ModelChoiceField( power_port = forms.ModelChoiceField(

View File

@ -0,0 +1,62 @@
from django.db import migrations, models
POWEROUTLET_FEED_LEG_CHOICES_CHOICES = (
(1, 'A'),
(2, 'B'),
(3, 'C'),
)
def poweroutlettemplate_feed_leg_to_slug(apps, schema_editor):
PowerOutletTemplate = apps.get_model('dcim', 'PowerOutletTemplate')
for id, slug in POWEROUTLET_FEED_LEG_CHOICES_CHOICES:
PowerOutletTemplate.objects.filter(feed_leg=id).update(feed_leg=slug)
def poweroutlet_feed_leg_to_slug(apps, schema_editor):
PowerOutlet = apps.get_model('dcim', 'PowerOutlet')
for id, slug in POWEROUTLET_FEED_LEG_CHOICES_CHOICES:
PowerOutlet.objects.filter(feed_leg=id).update(feed_leg=slug)
class Migration(migrations.Migration):
atomic = False
dependencies = [
('dcim', '0084_3569_powerfeed_fields'),
]
operations = [
# PowerOutletTemplate.feed_leg
migrations.AlterField(
model_name='poweroutlettemplate',
name='feed_leg',
field=models.CharField(blank=True, default='', max_length=50),
),
migrations.RunPython(
code=poweroutlettemplate_feed_leg_to_slug
),
migrations.AlterField(
model_name='poweroutlettemplate',
name='feed_leg',
field=models.CharField(blank=True, max_length=50),
),
# PowerOutlet.feed_leg
migrations.AlterField(
model_name='poweroutlet',
name='feed_leg',
field=models.CharField(blank=True, default='', max_length=50),
),
migrations.RunPython(
code=poweroutlet_feed_leg_to_slug
),
migrations.AlterField(
model_name='poweroutlet',
name='feed_leg',
field=models.CharField(blank=True, max_length=50),
),
]

View File

@ -1164,10 +1164,10 @@ class PowerOutletTemplate(ComponentTemplateModel):
null=True, null=True,
related_name='poweroutlet_templates' related_name='poweroutlet_templates'
) )
feed_leg = models.PositiveSmallIntegerField( feed_leg = models.CharField(
choices=POWERFEED_LEG_CHOICES, max_length=50,
choices=PowerOutletFeedLegChoices,
blank=True, blank=True,
null=True,
help_text="Phase (for three-phase feeds)" help_text="Phase (for three-phase feeds)"
) )
@ -2109,7 +2109,7 @@ class PowerPort(CableTermination, ComponentModel):
# Calculate per-leg aggregates for three-phase feeds # Calculate per-leg aggregates for three-phase feeds
if self._connected_powerfeed and self._connected_powerfeed.phase == PowerFeedPhaseChoices.PHASE_3PHASE: if self._connected_powerfeed and self._connected_powerfeed.phase == PowerFeedPhaseChoices.PHASE_3PHASE:
for leg, leg_name in POWERFEED_LEG_CHOICES: for leg, leg_name in PowerOutletFeedLegChoices:
outlet_ids = PowerOutlet.objects.filter(power_port=self, feed_leg=leg).values_list('pk', flat=True) outlet_ids = PowerOutlet.objects.filter(power_port=self, feed_leg=leg).values_list('pk', flat=True)
utilization = PowerPort.objects.filter(_connected_poweroutlet_id__in=outlet_ids).aggregate( utilization = PowerPort.objects.filter(_connected_poweroutlet_id__in=outlet_ids).aggregate(
maximum_draw_total=Sum('maximum_draw'), maximum_draw_total=Sum('maximum_draw'),
@ -2161,10 +2161,10 @@ class PowerOutlet(CableTermination, ComponentModel):
null=True, null=True,
related_name='poweroutlets' related_name='poweroutlets'
) )
feed_leg = models.PositiveSmallIntegerField( feed_leg = models.CharField(
choices=POWERFEED_LEG_CHOICES, max_length=50,
choices=PowerOutletFeedLegChoices,
blank=True, blank=True,
null=True,
help_text="Phase (for three-phase feeds)" help_text="Phase (for three-phase feeds)"
) )
connection_status = models.NullBooleanField( connection_status = models.NullBooleanField(

View File

@ -187,7 +187,7 @@ class DeviceTestCase(TestCase):
device_type=self.device_type, device_type=self.device_type,
name='Power Outlet 1', name='Power Outlet 1',
power_port=ppt, power_port=ppt,
feed_leg=POWERFEED_LEG_A feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
).save() ).save()
InterfaceTemplate( InterfaceTemplate(
@ -251,7 +251,7 @@ class DeviceTestCase(TestCase):
device=d, device=d,
name='Power Outlet 1', name='Power Outlet 1',
power_port=pp, power_port=pp,
feed_leg=POWERFEED_LEG_A feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
) )
Interface.objects.get( Interface.objects.get(

View File

@ -255,15 +255,15 @@ power-outlets:
- name: Power Outlet 1 - name: Power Outlet 1
type: iec-60320-c13 type: iec-60320-c13
power_port: Power Port 1 power_port: Power Port 1
feed_leg: 1 feed_leg: A
- name: Power Outlet 2 - name: Power Outlet 2
type: iec-60320-c13 type: iec-60320-c13
power_port: Power Port 1 power_port: Power Port 1
feed_leg: 1 feed_leg: A
- name: Power Outlet 3 - name: Power Outlet 3
type: iec-60320-c13 type: iec-60320-c13
power_port: Power Port 1 power_port: Power Port 1
feed_leg: 1 feed_leg: A
interfaces: interfaces:
- name: Interface 1 - name: Interface 1
type: 1000base-t type: 1000base-t
@ -343,7 +343,7 @@ device-bays:
self.assertEqual(po1.name, 'Power Outlet 1') self.assertEqual(po1.name, 'Power Outlet 1')
self.assertEqual(po1.type, PowerOutletTypeChoices.TYPE_IEC_C13) self.assertEqual(po1.type, PowerOutletTypeChoices.TYPE_IEC_C13)
self.assertEqual(po1.power_port, pp1) self.assertEqual(po1.power_port, pp1)
self.assertEqual(po1.feed_leg, POWERFEED_LEG_A) self.assertEqual(po1.feed_leg, PowerOutletFeedLegChoices.FEED_LEG_A)
self.assertEqual(dt.interface_templates.count(), 3) self.assertEqual(dt.interface_templates.count(), 3)
iface1 = InterfaceTemplate.objects.first() iface1 = InterfaceTemplate.objects.first()