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:
@ -245,7 +245,7 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
|
||||
required=False
|
||||
)
|
||||
feed_leg = ChoiceField(
|
||||
choices=POWERFEED_LEG_CHOICES,
|
||||
choices=PowerOutletFeedLegChoices,
|
||||
required=False,
|
||||
allow_null=True
|
||||
)
|
||||
@ -429,7 +429,7 @@ class PowerOutletSerializer(TaggitSerializer, ConnectedEndpointSerializer):
|
||||
required=False
|
||||
)
|
||||
feed_leg = ChoiceField(
|
||||
choices=POWERFEED_LEG_CHOICES,
|
||||
choices=PowerOutletFeedLegChoices,
|
||||
required=False,
|
||||
allow_null=True
|
||||
)
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -55,13 +55,3 @@ COMPATIBLE_TERMINATION_TYPES = {
|
||||
'rearport': ['consoleport', 'consoleserverport', 'interface', 'frontport', 'rearport', 'circuittermination'],
|
||||
'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'),
|
||||
)
|
||||
|
@ -1043,7 +1043,7 @@ class PowerOutletTemplateCreateForm(ComponentForm):
|
||||
required=False
|
||||
)
|
||||
feed_leg = forms.ChoiceField(
|
||||
choices=add_blank_choice(POWERFEED_LEG_CHOICES),
|
||||
choices=add_blank_choice(PowerOutletFeedLegChoices),
|
||||
required=False,
|
||||
widget=StaticSelect2()
|
||||
)
|
||||
@ -2241,7 +2241,7 @@ class PowerOutletCreateForm(ComponentForm):
|
||||
required=False
|
||||
)
|
||||
feed_leg = forms.ChoiceField(
|
||||
choices=add_blank_choice(POWERFEED_LEG_CHOICES),
|
||||
choices=add_blank_choice(PowerOutletFeedLegChoices),
|
||||
required=False
|
||||
)
|
||||
description = forms.CharField(
|
||||
@ -2270,7 +2270,7 @@ class PowerOutletBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
|
||||
required=False
|
||||
)
|
||||
feed_leg = forms.ChoiceField(
|
||||
choices=add_blank_choice(POWERFEED_LEG_CHOICES),
|
||||
choices=add_blank_choice(PowerOutletFeedLegChoices),
|
||||
required=False,
|
||||
)
|
||||
power_port = forms.ModelChoiceField(
|
||||
|
62
netbox/dcim/migrations/0085_3569_poweroutlet_fields.py
Normal file
62
netbox/dcim/migrations/0085_3569_poweroutlet_fields.py
Normal 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),
|
||||
),
|
||||
|
||||
]
|
@ -1164,10 +1164,10 @@ class PowerOutletTemplate(ComponentTemplateModel):
|
||||
null=True,
|
||||
related_name='poweroutlet_templates'
|
||||
)
|
||||
feed_leg = models.PositiveSmallIntegerField(
|
||||
choices=POWERFEED_LEG_CHOICES,
|
||||
feed_leg = models.CharField(
|
||||
max_length=50,
|
||||
choices=PowerOutletFeedLegChoices,
|
||||
blank=True,
|
||||
null=True,
|
||||
help_text="Phase (for three-phase feeds)"
|
||||
)
|
||||
|
||||
@ -2109,7 +2109,7 @@ class PowerPort(CableTermination, ComponentModel):
|
||||
|
||||
# Calculate per-leg aggregates for three-phase feeds
|
||||
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)
|
||||
utilization = PowerPort.objects.filter(_connected_poweroutlet_id__in=outlet_ids).aggregate(
|
||||
maximum_draw_total=Sum('maximum_draw'),
|
||||
@ -2161,10 +2161,10 @@ class PowerOutlet(CableTermination, ComponentModel):
|
||||
null=True,
|
||||
related_name='poweroutlets'
|
||||
)
|
||||
feed_leg = models.PositiveSmallIntegerField(
|
||||
choices=POWERFEED_LEG_CHOICES,
|
||||
feed_leg = models.CharField(
|
||||
max_length=50,
|
||||
choices=PowerOutletFeedLegChoices,
|
||||
blank=True,
|
||||
null=True,
|
||||
help_text="Phase (for three-phase feeds)"
|
||||
)
|
||||
connection_status = models.NullBooleanField(
|
||||
|
@ -187,7 +187,7 @@ class DeviceTestCase(TestCase):
|
||||
device_type=self.device_type,
|
||||
name='Power Outlet 1',
|
||||
power_port=ppt,
|
||||
feed_leg=POWERFEED_LEG_A
|
||||
feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
|
||||
).save()
|
||||
|
||||
InterfaceTemplate(
|
||||
@ -251,7 +251,7 @@ class DeviceTestCase(TestCase):
|
||||
device=d,
|
||||
name='Power Outlet 1',
|
||||
power_port=pp,
|
||||
feed_leg=POWERFEED_LEG_A
|
||||
feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
|
||||
)
|
||||
|
||||
Interface.objects.get(
|
||||
|
@ -255,15 +255,15 @@ power-outlets:
|
||||
- name: Power Outlet 1
|
||||
type: iec-60320-c13
|
||||
power_port: Power Port 1
|
||||
feed_leg: 1
|
||||
feed_leg: A
|
||||
- name: Power Outlet 2
|
||||
type: iec-60320-c13
|
||||
power_port: Power Port 1
|
||||
feed_leg: 1
|
||||
feed_leg: A
|
||||
- name: Power Outlet 3
|
||||
type: iec-60320-c13
|
||||
power_port: Power Port 1
|
||||
feed_leg: 1
|
||||
feed_leg: A
|
||||
interfaces:
|
||||
- name: Interface 1
|
||||
type: 1000base-t
|
||||
@ -343,7 +343,7 @@ device-bays:
|
||||
self.assertEqual(po1.name, 'Power Outlet 1')
|
||||
self.assertEqual(po1.type, PowerOutletTypeChoices.TYPE_IEC_C13)
|
||||
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)
|
||||
iface1 = InterfaceTemplate.objects.first()
|
||||
|
Reference in New Issue
Block a user