From 62494f295edb2fbb0accffc3561ffae3b7b7f963 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 25 Nov 2019 21:03:11 -0500 Subject: [PATCH] PowerFeed.type to slug (#3569) --- netbox/dcim/api/serializers.py | 4 +-- netbox/dcim/choices.py | 20 +++++++++++ netbox/dcim/constants.py | 6 ---- netbox/dcim/forms.py | 6 ++-- .../migrations/0084_3569_powerfeed_fields.py | 35 +++++++++++++++++++ netbox/dcim/models.py | 6 ++-- netbox/dcim/tests/test_api.py | 20 +++++------ 7 files changed, 73 insertions(+), 24 deletions(-) create mode 100644 netbox/dcim/migrations/0084_3569_powerfeed_fields.py diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 13781a696..7883ca169 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -691,8 +691,8 @@ class PowerFeedSerializer(TaggitSerializer, CustomFieldModelSerializer): default=None ) type = ChoiceField( - choices=POWERFEED_TYPE_CHOICES, - default=POWERFEED_TYPE_PRIMARY + choices=PowerFeedTypeChoices, + default=PowerFeedTypeChoices.TYPE_PRIMARY ) status = ChoiceField( choices=POWERFEED_STATUS_CHOICES, diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index 2ffb30b38..7b7b18b4d 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -872,3 +872,23 @@ class CableLengthUnitChoices(ChoiceSet): UNIT_FOOT: 2100, UNIT_INCH: 2000, } + + +# +# PowerFeeds +# + +class PowerFeedTypeChoices(ChoiceSet): + + TYPE_PRIMARY = 'primary' + TYPE_REDUNDANT = 'redundant' + + CHOICES = ( + (TYPE_PRIMARY, 'Primary'), + (TYPE_REDUNDANT, 'Redundant'), + ) + + LEGACY_MAP = { + TYPE_PRIMARY: 1, + TYPE_REDUNDANT: 2, + } diff --git a/netbox/dcim/constants.py b/netbox/dcim/constants.py index 4aca9a2a1..8a574b185 100644 --- a/netbox/dcim/constants.py +++ b/netbox/dcim/constants.py @@ -68,12 +68,6 @@ COMPATIBLE_TERMINATION_TYPES = { } # Power feeds -POWERFEED_TYPE_PRIMARY = 1 -POWERFEED_TYPE_REDUNDANT = 2 -POWERFEED_TYPE_CHOICES = ( - (POWERFEED_TYPE_PRIMARY, 'Primary'), - (POWERFEED_TYPE_REDUNDANT, 'Redundant'), -) POWERFEED_SUPPLY_AC = 1 POWERFEED_SUPPLY_DC = 2 POWERFEED_SUPPLY_CHOICES = ( diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index bf34c7971..32d60ace7 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -3860,7 +3860,7 @@ class PowerFeedCSVForm(forms.ModelForm): help_text='Operational status' ) type = CSVChoiceField( - choices=POWERFEED_TYPE_CHOICES, + choices=PowerFeedTypeChoices, required=False, help_text='Primary or redundant' ) @@ -3936,7 +3936,7 @@ class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEd widget=StaticSelect2() ) type = forms.ChoiceField( - choices=add_blank_choice(POWERFEED_TYPE_CHOICES), + choices=add_blank_choice(PowerFeedTypeChoices), required=False, initial='', widget=StaticSelect2() @@ -4014,7 +4014,7 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldFilterForm): widget=StaticSelect2Multiple() ) type = forms.ChoiceField( - choices=add_blank_choice(POWERFEED_TYPE_CHOICES), + choices=add_blank_choice(PowerFeedTypeChoices), required=False, widget=StaticSelect2() ) diff --git a/netbox/dcim/migrations/0084_3569_powerfeed_fields.py b/netbox/dcim/migrations/0084_3569_powerfeed_fields.py new file mode 100644 index 000000000..d40d367e6 --- /dev/null +++ b/netbox/dcim/migrations/0084_3569_powerfeed_fields.py @@ -0,0 +1,35 @@ +from django.db import migrations, models + + +POWERFEED_TYPE_CHOICES = ( + (1, 'primary'), + (2, 'redundant'), +) + + +def powerfeed_type_to_slug(apps, schema_editor): + PowerFeed = apps.get_model('dcim', 'PowerFeed') + for id, slug in POWERFEED_TYPE_CHOICES: + PowerFeed.objects.filter(type=id).update(type=slug) + + +class Migration(migrations.Migration): + atomic = False + + dependencies = [ + ('dcim', '0083_3569_cable_fields'), + ] + + operations = [ + + # Cable.type + migrations.AlterField( + model_name='powerfeed', + name='type', + field=models.CharField(blank=True, max_length=50), + ), + migrations.RunPython( + code=powerfeed_type_to_slug + ), + + ] diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 6d8748313..c1b951496 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -3111,9 +3111,9 @@ class PowerFeed(ChangeLoggedModel, CableTermination, CustomFieldModel): choices=POWERFEED_STATUS_CHOICES, default=POWERFEED_STATUS_ACTIVE ) - type = models.PositiveSmallIntegerField( - choices=POWERFEED_TYPE_CHOICES, - default=POWERFEED_TYPE_PRIMARY + type = models.CharField( + choices=PowerFeedTypeChoices, + default=PowerFeedTypeChoices.TYPE_PRIMARY ) supply = models.PositiveSmallIntegerField( choices=POWERFEED_SUPPLY_CHOICES, diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index ebeba944b..c396407ac 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -3679,22 +3679,22 @@ class PowerFeedTest(APITestCase): site=self.site1, rack_group=self.rackgroup1, name='Test Power Panel 2' ) self.powerfeed1 = PowerFeed.objects.create( - power_panel=self.powerpanel1, rack=self.rack1, name='Test Power Feed 1A', type=POWERFEED_TYPE_PRIMARY + power_panel=self.powerpanel1, rack=self.rack1, name='Test Power Feed 1A', type=PowerFeedTypeChoices.TYPE_PRIMARY ) self.powerfeed2 = PowerFeed.objects.create( - power_panel=self.powerpanel2, rack=self.rack1, name='Test Power Feed 1B', type=POWERFEED_TYPE_REDUNDANT + power_panel=self.powerpanel2, rack=self.rack1, name='Test Power Feed 1B', type=PowerFeedTypeChoices.TYPE_REDUNDANT ) self.powerfeed3 = PowerFeed.objects.create( - power_panel=self.powerpanel1, rack=self.rack2, name='Test Power Feed 2A', type=POWERFEED_TYPE_PRIMARY + power_panel=self.powerpanel1, rack=self.rack2, name='Test Power Feed 2A', type=PowerFeedTypeChoices.TYPE_PRIMARY ) self.powerfeed4 = PowerFeed.objects.create( - power_panel=self.powerpanel2, rack=self.rack2, name='Test Power Feed 2B', type=POWERFEED_TYPE_REDUNDANT + power_panel=self.powerpanel2, rack=self.rack2, name='Test Power Feed 2B', type=PowerFeedTypeChoices.TYPE_REDUNDANT ) self.powerfeed5 = PowerFeed.objects.create( - power_panel=self.powerpanel1, rack=self.rack3, name='Test Power Feed 3A', type=POWERFEED_TYPE_PRIMARY + power_panel=self.powerpanel1, rack=self.rack3, name='Test Power Feed 3A', type=PowerFeedTypeChoices.TYPE_PRIMARY ) self.powerfeed6 = PowerFeed.objects.create( - power_panel=self.powerpanel2, rack=self.rack3, name='Test Power Feed 3B', type=POWERFEED_TYPE_REDUNDANT + power_panel=self.powerpanel2, rack=self.rack3, name='Test Power Feed 3B', type=PowerFeedTypeChoices.TYPE_REDUNDANT ) def test_get_powerfeed(self): @@ -3727,7 +3727,7 @@ class PowerFeedTest(APITestCase): 'name': 'Test Power Feed 4A', 'power_panel': self.powerpanel1.pk, 'rack': self.rack4.pk, - 'type': POWERFEED_TYPE_PRIMARY, + 'type': PowerFeedTypeChoices.TYPE_PRIMARY, } url = reverse('dcim-api:powerfeed-list') @@ -3747,13 +3747,13 @@ class PowerFeedTest(APITestCase): 'name': 'Test Power Feed 4A', 'power_panel': self.powerpanel1.pk, 'rack': self.rack4.pk, - 'type': POWERFEED_TYPE_PRIMARY, + 'type': PowerFeedTypeChoices.TYPE_PRIMARY, }, { 'name': 'Test Power Feed 4B', 'power_panel': self.powerpanel1.pk, 'rack': self.rack4.pk, - 'type': POWERFEED_TYPE_REDUNDANT, + 'type': PowerFeedTypeChoices.TYPE_REDUNDANT, }, ] @@ -3770,7 +3770,7 @@ class PowerFeedTest(APITestCase): data = { 'name': 'Test Power Feed X', 'rack': self.rack4.pk, - 'type': POWERFEED_TYPE_REDUNDANT, + 'type': PowerFeedTypeChoices.TYPE_REDUNDANT, } url = reverse('dcim-api:powerfeed-detail', kwargs={'pk': self.powerfeed1.pk})