diff --git a/netbox/circuits/tests/test_api.py b/netbox/circuits/tests/test_api.py index 3dd9c7b84..0810f0ff9 100644 --- a/netbox/circuits/tests/test_api.py +++ b/netbox/circuits/tests/test_api.py @@ -13,7 +13,7 @@ class ProviderTest(APITestCase): def setUp(self): - super(ProviderTest, self).setUp() + super().setUp() self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2') @@ -135,7 +135,7 @@ class CircuitTypeTest(APITestCase): def setUp(self): - super(CircuitTypeTest, self).setUp() + super().setUp() self.circuittype1 = CircuitType.objects.create(name='Test Circuit Type 1', slug='test-circuit-type-1') self.circuittype2 = CircuitType.objects.create(name='Test Circuit Type 2', slug='test-circuit-type-2') @@ -210,7 +210,7 @@ class CircuitTest(APITestCase): def setUp(self): - super(CircuitTest, self).setUp() + super().setUp() self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2') @@ -326,7 +326,7 @@ class CircuitTerminationTest(APITestCase): def setUp(self): - super(CircuitTerminationTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 7b38d718a..29e0b2151 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -121,7 +121,7 @@ class RackSerializer(TaggitSerializer, CustomFieldModelSerializer): validator(data) # Enforce model validation - super(RackSerializer, self).validate(data) + super().validate(data) return data @@ -294,7 +294,7 @@ class DeviceSerializer(TaggitSerializer, CustomFieldModelSerializer): validator(data) # Enforce model validation - super(DeviceSerializer, self).validate(data) + super().validate(data) return data @@ -405,7 +405,7 @@ class InterfaceSerializer(TaggitSerializer, ConnectedEndpointSerializer): "be global.".format(vlan) }) - return super(InterfaceSerializer, self).validate(data) + return super().validate(data) class RearPortSerializer(ValidatedModelSerializer): diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index f0521ef1e..7b4f14705 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -382,7 +382,7 @@ class RackCSVForm(forms.ModelForm): def clean(self): - super(RackCSVForm, self).clean() + super().clean() site = self.cleaned_data.get('site') group_name = self.cleaned_data.get('group_name') @@ -527,7 +527,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, forms.ModelForm): def __init__(self, *args, **kwargs): - super(RackReservationForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Populate rack unit choices self.fields['units'].widget.choices = self._get_unit_choices() @@ -797,7 +797,7 @@ class FrontPortTemplateCreateForm(ComponentForm): def __init__(self, *args, **kwargs): - super(FrontPortTemplateCreateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Determine which rear port positions are occupied. These will be excluded from the list of available mappings. occupied_port_positions = [ @@ -1015,7 +1015,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm): initial['manufacturer'] = instance.device_type.manufacturer kwargs['initial'] = initial - super(DeviceForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if self.instance.pk: @@ -1139,7 +1139,7 @@ class BaseDeviceCSVForm(forms.ModelForm): def clean(self): - super(BaseDeviceCSVForm, self).clean() + super().clean() manufacturer = self.cleaned_data.get('manufacturer') model_name = self.cleaned_data.get('model_name') @@ -1192,7 +1192,7 @@ class DeviceCSVForm(BaseDeviceCSVForm): def clean(self): - super(DeviceCSVForm, self).clean() + super().clean() site = self.cleaned_data.get('site') rack_group = self.cleaned_data.get('rack_group') @@ -1241,7 +1241,7 @@ class ChildDeviceCSVForm(BaseDeviceCSVForm): def clean(self): - super(ChildDeviceCSVForm, self).clean() + super().clean() parent = self.cleaned_data.get('parent') device_bay_name = self.cleaned_data.get('device_bay_name') @@ -1493,7 +1493,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm): } def __init__(self, *args, **kwargs): - super(InterfaceForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Limit LAG choices to interfaces belonging to this device (or VC master) if self.is_bound: @@ -1509,7 +1509,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm): def clean(self): - super(InterfaceForm, self).clean() + super().clean() # Validate VLAN assignments tagged_vlans = self.cleaned_data['tagged_vlans'] @@ -1542,7 +1542,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm): def __init__(self, *args, **kwargs): - super(InterfaceAssignVLANsForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if self.instance.mode == IFACE_MODE_ACCESS: self.initial['tagged'] = False @@ -1587,7 +1587,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm): def clean(self): - super(InterfaceAssignVLANsForm, self).clean() + super().clean() # Only untagged VLANs permitted on an access interface if self.instance.mode == IFACE_MODE_ACCESS and len(self.cleaned_data['vlans']) > 1: @@ -1605,7 +1605,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm): else: self.instance.untagged_vlan_id = self.cleaned_data['vlans'][0] - return super(InterfaceAssignVLANsForm, self).save(*args, **kwargs) + return super().save(*args, **kwargs) class InterfaceCreateForm(ComponentForm, forms.Form): @@ -1630,7 +1630,7 @@ class InterfaceCreateForm(ComponentForm, forms.Form): kwargs['initial'] = kwargs.get('initial', {}).copy() kwargs['initial'].update({'enabled': True}) - super(InterfaceCreateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Limit LAG choices to interfaces belonging to this device (or its VC master) if self.parent is not None: @@ -1655,7 +1655,7 @@ class InterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm): nullable_fields = ['lag', 'mtu', 'description', 'mode'] def __init__(self, *args, **kwargs): - super(InterfaceBulkEditForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Limit LAG choices to interfaces which belong to the parent device (or VC master) device = self.parent_obj @@ -1710,7 +1710,7 @@ class FrontPortCreateForm(ComponentForm): def __init__(self, *args, **kwargs): - super(FrontPortCreateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Determine which rear port positions are occupied. These will be excluded from the list of available mappings. occupied_port_positions = [ @@ -1886,7 +1886,7 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm): ] def __init__(self, *args, **kwargs): - super(CableCreateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Define available types for endpoint B based on the type of endpoint A termination_a_type = self.instance.termination_a._meta.model_name @@ -2123,7 +2123,7 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form): def __init__(self, device_bay, *args, **kwargs): - super(PopulateDeviceBayForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['installed_device'].queryset = Device.objects.filter( site=device_bay.device.site, @@ -2236,7 +2236,7 @@ class VirtualChassisForm(BootstrapMixin, forms.ModelForm): class BaseVCMemberFormSet(forms.BaseModelFormSet): def clean(self): - super(BaseVCMemberFormSet, self).clean() + super().clean() # Check for duplicate VC position values vc_position_list = [] @@ -2260,7 +2260,7 @@ class DeviceVCMembershipForm(forms.ModelForm): } def __init__(self, validate_vc_position=False, *args, **kwargs): - super(DeviceVCMembershipForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Require VC position (only required when the Device is a VirtualChassis member) self.fields['vc_position'].required = True diff --git a/netbox/dcim/managers.py b/netbox/dcim/managers.py index bb2057c94..52df1afe8 100644 --- a/netbox/dcim/managers.py +++ b/netbox/dcim/managers.py @@ -18,7 +18,7 @@ class DeviceComponentManager(Manager): def get_queryset(self): - queryset = super(DeviceComponentManager, self).get_queryset() + queryset = super().get_queryset() table_name = self.model._meta.db_table sql = r"CONCAT(REGEXP_REPLACE({}.name, '\d+$', ''), LPAD(SUBSTRING({}.name FROM '\d+$'), 8, '0'))" diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 90d987a67..83cc0173f 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -544,7 +544,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): ] def __str__(self): - return self.display_name or super(Rack, self).__str__() + return self.display_name or super().__str__() def get_absolute_url(self): return reverse('dcim:rack', args=[self.pk]) @@ -582,7 +582,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): if self.pk: _site_id = Rack.objects.get(pk=self.pk).site_id - super(Rack, self).save(*args, **kwargs) + super().save(*args, **kwargs) # Update racked devices if the assigned Site has been changed. if _site_id is not None and self.site_id != _site_id: @@ -894,7 +894,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel): return self.model def __init__(self, *args, **kwargs): - super(DeviceType, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Save a copy of u_height for validation in clean() self._original_u_height = self.u_height @@ -1437,7 +1437,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): ) def __str__(self): - return self.display_name or super(Device, self).__str__() + return self.display_name or super().__str__() def get_absolute_url(self): return reverse('dcim:device', args=[self.pk]) @@ -1552,7 +1552,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): is_new = not bool(self.pk) - super(Device, self).save(*args, **kwargs) + super().save(*args, **kwargs) # If this is a new Device, instantiate all of the related components per the DeviceType definition if is_new: @@ -2055,7 +2055,7 @@ class Interface(CableTermination, ComponentModel): if self.pk and self.mode is not IFACE_MODE_TAGGED: self.tagged_vlans.clear() - return super(Interface, self).save(*args, **kwargs) + return super().save(*args, **kwargs) def log_change(self, user, request_id, action): """ @@ -2522,7 +2522,7 @@ class Cable(ChangeLoggedModel): def __init__(self, *args, **kwargs): - super(Cable, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Create an ID string for use by __str__(). We have to save a copy of pk since it's nullified after .delete() # is called. @@ -2595,7 +2595,7 @@ class Cable(ChangeLoggedModel): if self.length and self.length_unit: self._abs_length = to_meters(self.length, self.length_unit) - super(Cable, self).save(*args, **kwargs) + super().save(*args, **kwargs) def to_csv(self): return ( diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index a40886f21..b66a46725 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -20,7 +20,7 @@ class RegionTest(APITestCase): def setUp(self): - super(RegionTest, self).setUp() + super().setUp() self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1') self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2') @@ -121,7 +121,7 @@ class SiteTest(APITestCase): def setUp(self): - super(SiteTest, self).setUp() + super().setUp() self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1') self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2') @@ -256,7 +256,7 @@ class RackGroupTest(APITestCase): def setUp(self): - super(RackGroupTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') @@ -366,7 +366,7 @@ class RackRoleTest(APITestCase): def setUp(self): - super(RackRoleTest, self).setUp() + super().setUp() self.rackrole1 = RackRole.objects.create(name='Test Rack Role 1', slug='test-rack-role-1', color='ff0000') self.rackrole2 = RackRole.objects.create(name='Test Rack Role 2', slug='test-rack-role-2', color='00ff00') @@ -474,7 +474,7 @@ class RackTest(APITestCase): def setUp(self): - super(RackTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') @@ -608,7 +608,7 @@ class RackReservationTest(APITestCase): def setUp(self): - super(RackReservationTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.rack1 = Rack.objects.create(site=self.site1, name='Test Rack 1') @@ -719,7 +719,7 @@ class ManufacturerTest(APITestCase): def setUp(self): - super(ManufacturerTest, self).setUp() + super().setUp() self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2') @@ -820,7 +820,7 @@ class DeviceTypeTest(APITestCase): def setUp(self): - super(DeviceTypeTest, self).setUp() + super().setUp() self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2') @@ -936,7 +936,7 @@ class ConsolePortTemplateTest(APITestCase): def setUp(self): - super(ConsolePortTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1036,7 +1036,7 @@ class ConsoleServerPortTemplateTest(APITestCase): def setUp(self): - super(ConsoleServerPortTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1136,7 +1136,7 @@ class PowerPortTemplateTest(APITestCase): def setUp(self): - super(PowerPortTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1236,7 +1236,7 @@ class PowerOutletTemplateTest(APITestCase): def setUp(self): - super(PowerOutletTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1336,7 +1336,7 @@ class InterfaceTemplateTest(APITestCase): def setUp(self): - super(InterfaceTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1436,7 +1436,7 @@ class DeviceBayTemplateTest(APITestCase): def setUp(self): - super(DeviceBayTemplateTest, self).setUp() + super().setUp() self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.devicetype = DeviceType.objects.create( @@ -1536,7 +1536,7 @@ class DeviceRoleTest(APITestCase): def setUp(self): - super(DeviceRoleTest, self).setUp() + super().setUp() self.devicerole1 = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' @@ -1650,7 +1650,7 @@ class PlatformTest(APITestCase): def setUp(self): - super(PlatformTest, self).setUp() + super().setUp() self.platform1 = Platform.objects.create(name='Test Platform 1', slug='test-platform-1') self.platform2 = Platform.objects.create(name='Test Platform 2', slug='test-platform-2') @@ -1751,7 +1751,7 @@ class DeviceTest(APITestCase): def setUp(self): - super(DeviceTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') @@ -1913,7 +1913,7 @@ class ConsolePortTest(APITestCase): def setUp(self): - super(ConsolePortTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2026,7 +2026,7 @@ class ConsoleServerPortTest(APITestCase): def setUp(self): - super(ConsoleServerPortTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2137,7 +2137,7 @@ class PowerPortTest(APITestCase): def setUp(self): - super(PowerPortTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2250,7 +2250,7 @@ class PowerOutletTest(APITestCase): def setUp(self): - super(PowerOutletTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2361,7 +2361,7 @@ class InterfaceTest(APITestCase): def setUp(self): - super(InterfaceTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2560,7 +2560,7 @@ class DeviceBayTest(APITestCase): def setUp(self): - super(DeviceBayTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2683,7 +2683,7 @@ class InventoryItemTest(APITestCase): def setUp(self): - super(InventoryItemTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2799,7 +2799,7 @@ class CableTest(APITestCase): def setUp(self): - super(CableTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -2940,7 +2940,7 @@ class ConnectionTest(APITestCase): def setUp(self): - super(ConnectionTest, self).setUp() + super().setUp() self.site = Site.objects.create( name='Test Site 1', slug='test-site-1' @@ -3304,7 +3304,7 @@ class ConnectedDeviceTest(APITestCase): def setUp(self): - super(ConnectedDeviceTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') @@ -3346,7 +3346,7 @@ class VirtualChassisTest(APITestCase): def setUp(self): - super(VirtualChassisTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site', slug='test-site') manufacturer = Manufacturer.objects.create(name='Test Manufacturer', slug='test-manufacturer') diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 125308839..e747bf71a 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -28,7 +28,7 @@ class WebhookForm(forms.ModelForm): exclude = [] def __init__(self, *args, **kwargs): - super(WebhookForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) order_content_types(self.fields['obj_type']) @@ -56,7 +56,7 @@ class CustomFieldForm(forms.ModelForm): exclude = [] def __init__(self, *args, **kwargs): - super(CustomFieldForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) order_content_types(self.fields['obj_type']) @@ -96,7 +96,7 @@ class ExportTemplateForm(forms.ModelForm): exclude = [] def __init__(self, *args, **kwargs): - super(ExportTemplateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Format ContentType choices order_content_types(self.fields['content_type']) diff --git a/netbox/extras/api/customfields.py b/netbox/extras/api/customfields.py index c45f3029d..7bf1c0744 100644 --- a/netbox/extras/api/customfields.py +++ b/netbox/extras/api/customfields.py @@ -105,7 +105,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer): custom_fields[cfv.field.name] = cfv.value instance.custom_fields = custom_fields - super(CustomFieldModelSerializer, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if self.instance is not None: @@ -137,7 +137,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer): with transaction.atomic(): - instance = super(CustomFieldModelSerializer, self).create(validated_data) + instance = super().create(validated_data) # Save custom fields if custom_fields is not None: @@ -152,7 +152,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer): with transaction.atomic(): - instance = super(CustomFieldModelSerializer, self).update(instance, validated_data) + instance = super().update(instance, validated_data) # Save custom fields if custom_fields is not None: diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index db468ceba..7643562bb 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -108,7 +108,7 @@ class ImageAttachmentSerializer(ValidatedModelSerializer): ) # Enforce model validation - super(ImageAttachmentSerializer, self).validate(data) + super().validate(data) return data diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index aebbb3620..637ef235b 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -50,7 +50,7 @@ class CustomFieldModelViewSet(ModelViewSet): custom_field_choices[cfc.id] = cfc.value custom_field_choices = custom_field_choices - context = super(CustomFieldModelViewSet, self).get_serializer_context() + context = super().get_serializer_context() context.update({ 'custom_fields': custom_fields, 'custom_field_choices': custom_field_choices, @@ -59,7 +59,7 @@ class CustomFieldModelViewSet(ModelViewSet): def get_queryset(self): # Prefetch custom field values - return super(CustomFieldModelViewSet, self).get_queryset().prefetch_related('custom_field_values__field') + return super().get_queryset().prefetch_related('custom_field_values__field') # diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index c7ad882f3..f3301a6cc 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -17,7 +17,7 @@ class CustomFieldFilter(django_filters.Filter): def __init__(self, custom_field, *args, **kwargs): self.cf_type = custom_field.type self.filter_logic = custom_field.filter_logic - super(CustomFieldFilter, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def filter(self, queryset, value): @@ -63,7 +63,7 @@ class CustomFieldFilterSet(django_filters.FilterSet): """ def __init__(self, *args, **kwargs): - super(CustomFieldFilterSet, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) obj_type = ContentType.objects.get_for_model(self._meta.model) custom_fields = CustomField.objects.filter(obj_type=obj_type).exclude(filter_logic=CF_FILTER_DISABLED) diff --git a/netbox/extras/forms.py b/netbox/extras/forms.py index e622bcfc0..a26d0588f 100644 --- a/netbox/extras/forms.py +++ b/netbox/extras/forms.py @@ -102,7 +102,7 @@ class CustomFieldForm(forms.ModelForm): self.custom_fields = [] self.obj_type = ContentType.objects.get_for_model(self._meta.model) - super(CustomFieldForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Add all applicable CustomFields to the form custom_fields = [] @@ -138,7 +138,7 @@ class CustomFieldForm(forms.ModelForm): cfv.save() def save(self, commit=True): - obj = super(CustomFieldForm, self).save(commit) + obj = super().save(commit) # Handle custom fields the same way we do M2M fields if commit: @@ -152,7 +152,7 @@ class CustomFieldForm(forms.ModelForm): class CustomFieldBulkEditForm(BulkEditForm): def __init__(self, *args, **kwargs): - super(CustomFieldBulkEditForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.custom_fields = [] self.obj_type = ContentType.objects.get_for_model(self.model) @@ -175,7 +175,7 @@ class CustomFieldFilterForm(forms.Form): self.obj_type = ContentType.objects.get_for_model(self.model) - super(CustomFieldFilterForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Add all applicable CustomFields to the form custom_fields = get_custom_fields_for_model(self.obj_type, filterable_only=True).items() @@ -199,7 +199,7 @@ class TagForm(BootstrapMixin, forms.ModelForm): class AddRemoveTagsForm(forms.Form): def __init__(self, *args, **kwargs): - super(AddRemoveTagsForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Add add/remove tags fields self.fields['add_tags'] = TagField(required=False) diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 1c7dfd17b..2b9e7e8a8 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -261,7 +261,7 @@ class CustomFieldValue(models.Model): if self.pk and self.value is None: self.delete() else: - super(CustomFieldValue, self).save(*args, **kwargs) + super().save(*args, **kwargs) class CustomFieldChoice(models.Model): @@ -293,7 +293,7 @@ class CustomFieldChoice(models.Model): def delete(self, using=None, keep_parents=False): # When deleting a CustomFieldChoice, delete all CustomFieldValues which point to it pk = self.pk - super(CustomFieldChoice, self).delete(using, keep_parents) + super().delete(using, keep_parents) CustomFieldValue.objects.filter(field__type=CF_TYPE_SELECT, serialized_value=str(pk)).delete() @@ -603,7 +603,7 @@ class ImageAttachment(models.Model): _name = self.image.name - super(ImageAttachment, self).delete(*args, **kwargs) + super().delete(*args, **kwargs) # Delete file from disk self.image.delete(save=False) @@ -841,7 +841,7 @@ class ObjectChange(models.Model): self.user_name = self.user.username self.object_repr = str(self.changed_object) - return super(ObjectChange, self).save(*args, **kwargs) + return super().save(*args, **kwargs) def get_absolute_url(self): return reverse('extras:objectchange', args=[self.pk]) diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index 40258b100..cccb00a8a 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -14,7 +14,7 @@ class GraphTest(APITestCase): def setUp(self): - super(GraphTest, self).setUp() + super().setUp() self.graph1 = Graph.objects.create( type=GRAPH_TYPE_SITE, name='Test Graph 1', source='http://example.com/graphs.py?site={{ obj.name }}&foo=1' @@ -118,7 +118,7 @@ class ExportTemplateTest(APITestCase): def setUp(self): - super(ExportTemplateTest, self).setUp() + super().setUp() self.content_type = ContentType.objects.get_for_model(Device) self.exporttemplate1 = ExportTemplate.objects.create( @@ -225,7 +225,7 @@ class TagTest(APITestCase): def setUp(self): - super(TagTest, self).setUp() + super().setUp() self.tag1 = Tag.objects.create(name='Test Tag 1', slug='test-tag-1') self.tag2 = Tag.objects.create(name='Test Tag 2', slug='test-tag-2') @@ -316,7 +316,7 @@ class ConfigContextTest(APITestCase): def setUp(self): - super(ConfigContextTest, self).setUp() + super().setUp() self.configcontext1 = ConfigContext.objects.create( name='Test Config Context 1', diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 8959528d3..b02e787c1 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -101,7 +101,7 @@ class CustomFieldAPITest(APITestCase): def setUp(self): - super(CustomFieldAPITest, self).setUp() + super().setUp() content_type = ContentType.objects.get_for_model(Site) diff --git a/netbox/extras/tests/test_tags.py b/netbox/extras/tests/test_tags.py index 02ea3adef..4f509a5e9 100644 --- a/netbox/extras/tests/test_tags.py +++ b/netbox/extras/tests/test_tags.py @@ -12,7 +12,7 @@ class TaggedItemTest(APITestCase): def setUp(self): - super(TaggedItemTest, self).setUp() + super().setUp() def test_create_tagged_item(self): diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index ec47d5d7f..030266188 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -87,7 +87,7 @@ class VLANGroupSerializer(ValidatedModelSerializer): validator(data) # Enforce model validation - super(VLANGroupSerializer, self).validate(data) + super().validate(data) return data @@ -118,7 +118,7 @@ class VLANSerializer(TaggitSerializer, CustomFieldModelSerializer): validator(data) # Enforce model validation - super(VLANSerializer, self).validate(data) + super().validate(data) return data diff --git a/netbox/ipam/fields.py b/netbox/ipam/fields.py index d6ffa894d..1ddf545ea 100644 --- a/netbox/ipam/fields.py +++ b/netbox/ipam/fields.py @@ -40,7 +40,7 @@ class BaseIPField(models.Field): def formfield(self, **kwargs): defaults = {'form_class': self.form_class()} defaults.update(kwargs) - return super(BaseIPField, self).formfield(**defaults) + return super().formfield(**defaults) class IPNetworkField(BaseIPField): diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index bad2d8a1c..df1c1dc49 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -250,7 +250,7 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldForm): initial['vlan_group'] = instance.vlan.group kwargs['initial'] = initial - super(PrefixForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['vrf'].empty_label = 'Global' @@ -311,7 +311,7 @@ class PrefixCSVForm(forms.ModelForm): def clean(self): - super(PrefixCSVForm, self).clean() + super().clean() site = self.cleaned_data.get('site') vlan_group = self.cleaned_data.get('vlan_group') @@ -483,7 +483,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldForm) initial['nat_device'] = instance.nat_inside.device kwargs['initial'] = initial - super(IPAddressForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['vrf'].empty_label = 'Global' @@ -505,7 +505,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldForm) self.initial['primary_for_parent'] = True def clean(self): - super(IPAddressForm, self).clean() + super().clean() # Primary IP assignment is only available if an interface has been assigned. if self.cleaned_data.get('primary_for_parent') and not self.cleaned_data.get('interface'): @@ -515,7 +515,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldForm) def save(self, *args, **kwargs): - ipaddress = super(IPAddressForm, self).save(*args, **kwargs) + ipaddress = super().save(*args, **kwargs) # Assign/clear this IPAddress as the primary for the associated Device/VirtualMachine. if self.cleaned_data['primary_for_parent']: @@ -548,7 +548,7 @@ class IPAddressBulkAddForm(BootstrapMixin, TenancyForm, CustomFieldForm): fields = ['address', 'vrf', 'status', 'role', 'description', 'tenant_group', 'tenant'] def __init__(self, *args, **kwargs): - super(IPAddressBulkAddForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['vrf'].empty_label = 'Global' @@ -613,7 +613,7 @@ class IPAddressCSVForm(forms.ModelForm): def clean(self): - super(IPAddressCSVForm, self).clean() + super().clean() device = self.cleaned_data.get('device') virtual_machine = self.cleaned_data.get('virtual_machine') @@ -662,7 +662,7 @@ class IPAddressCSVForm(forms.ModelForm): name=self.cleaned_data['interface_name'] ) - ipaddress = super(IPAddressCSVForm, self).save(*args, **kwargs) + ipaddress = super().save(*args, **kwargs) # Set as primary for device/VM if self.cleaned_data['is_primary']: @@ -851,7 +851,7 @@ class VLANCSVForm(forms.ModelForm): def clean(self): - super(VLANCSVForm, self).clean() + super().clean() site = self.cleaned_data.get('site') group_name = self.cleaned_data.get('group_name') @@ -928,7 +928,7 @@ class ServiceForm(BootstrapMixin, CustomFieldForm): def __init__(self, *args, **kwargs): - super(ServiceForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Limit IP address choices to those assigned to interfaces of the parent device/VM if self.instance.device: diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 8da751f50..ca3f812a3 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -63,7 +63,7 @@ class VRF(ChangeLoggedModel, CustomFieldModel): verbose_name_plural = 'VRFs' def __str__(self): - return self.display_name or super(VRF, self).__str__() + return self.display_name or super().__str__() def get_absolute_url(self): return reverse('ipam:vrf', args=[self.pk]) @@ -198,7 +198,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel): if self.prefix: # Infer address family from IPNetwork object self.family = self.prefix.version - super(Aggregate, self).save(*args, **kwargs) + super().save(*args, **kwargs) def to_csv(self): return ( @@ -369,7 +369,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel): self.prefix = self.prefix.cidr # Infer address family from IPNetwork object self.family = self.prefix.version - super(Prefix, self).save(*args, **kwargs) + super().save(*args, **kwargs) def to_csv(self): return ( @@ -484,7 +484,7 @@ class IPAddressManager(models.Manager): then re-cast this value to INET() so that records will be ordered properly. We are essentially re-casting each IP address as a /32 or /128. """ - qs = super(IPAddressManager, self).get_queryset() + qs = super().get_queryset() return qs.annotate(host=RawSQL('INET(HOST(ipam_ipaddress.address))', [])).order_by('family', 'host') @@ -605,7 +605,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel): if self.address: # Infer address family from IPAddress object self.family = self.address.version - super(IPAddress, self).save(*args, **kwargs) + super().save(*args, **kwargs) def to_csv(self): @@ -773,7 +773,7 @@ class VLAN(ChangeLoggedModel, CustomFieldModel): verbose_name_plural = 'VLANs' def __str__(self): - return self.display_name or super(VLAN, self).__str__() + return self.display_name or super().__str__() def get_absolute_url(self): return reverse('ipam:vlan', args=[self.pk]) diff --git a/netbox/ipam/tables.py b/netbox/ipam/tables.py index 73450d1a1..284bcb4ae 100644 --- a/netbox/ipam/tables.py +++ b/netbox/ipam/tables.py @@ -464,7 +464,7 @@ class InterfaceVLANTable(BaseTable): def __init__(self, interface, *args, **kwargs): self.interface = interface - super(InterfaceVLANTable, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 13c635972..d57cb728f 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -12,7 +12,7 @@ class VRFTest(APITestCase): def setUp(self): - super(VRFTest, self).setUp() + super().setUp() self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1') self.vrf2 = VRF.objects.create(name='Test VRF 2', rd='65000:2') @@ -113,7 +113,7 @@ class RIRTest(APITestCase): def setUp(self): - super(RIRTest, self).setUp() + super().setUp() self.rir1 = RIR.objects.create(name='Test RIR 1', slug='test-rir-1') self.rir2 = RIR.objects.create(name='Test RIR 2', slug='test-rir-2') @@ -214,7 +214,7 @@ class AggregateTest(APITestCase): def setUp(self): - super(AggregateTest, self).setUp() + super().setUp() self.rir1 = RIR.objects.create(name='Test RIR 1', slug='test-rir-1') self.rir2 = RIR.objects.create(name='Test RIR 2', slug='test-rir-2') @@ -317,7 +317,7 @@ class RoleTest(APITestCase): def setUp(self): - super(RoleTest, self).setUp() + super().setUp() self.role1 = Role.objects.create(name='Test Role 1', slug='test-role-1') self.role2 = Role.objects.create(name='Test Role 2', slug='test-role-2') @@ -418,7 +418,7 @@ class PrefixTest(APITestCase): def setUp(self): - super(PrefixTest, self).setUp() + super().setUp() self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1') @@ -657,7 +657,7 @@ class IPAddressTest(APITestCase): def setUp(self): - super(IPAddressTest, self).setUp() + super().setUp() self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1') self.ipaddress1 = IPAddress.objects.create(address=IPNetwork('192.168.0.1/24')) @@ -756,7 +756,7 @@ class VLANGroupTest(APITestCase): def setUp(self): - super(VLANGroupTest, self).setUp() + super().setUp() self.vlangroup1 = VLANGroup.objects.create(name='Test VLAN Group 1', slug='test-vlan-group-1') self.vlangroup2 = VLANGroup.objects.create(name='Test VLAN Group 2', slug='test-vlan-group-2') @@ -857,7 +857,7 @@ class VLANTest(APITestCase): def setUp(self): - super(VLANTest, self).setUp() + super().setUp() self.vlan1 = VLAN.objects.create(vid=1, name='Test VLAN 1') self.vlan2 = VLAN.objects.create(vid=2, name='Test VLAN 2') @@ -958,7 +958,7 @@ class ServiceTest(APITestCase): def setUp(self): - super(ServiceTest, self).setUp() + super().setUp() site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 1e3f14f8c..3a4c36173 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -715,7 +715,7 @@ class IPAddressAssignView(PermissionRequiredMixin, View): if 'interface' not in request.GET: return redirect('ipam:ipaddress_add') - return super(IPAddressAssignView, self).dispatch(request, *args, **kwargs) + return super().dispatch(request, *args, **kwargs) def get(self, request): diff --git a/netbox/netbox/api.py b/netbox/netbox/api.py index 743d890fe..60c493be7 100644 --- a/netbox/netbox/api.py +++ b/netbox/netbox/api.py @@ -58,14 +58,14 @@ class TokenPermissions(DjangoModelPermissions): def __init__(self): # LOGIN_REQUIRED determines whether read-only access is provided to anonymous users. self.authenticated_users_only = settings.LOGIN_REQUIRED - super(TokenPermissions, self).__init__() + super().__init__() def has_permission(self, request, view): # If token authentication is in use, verify that the token allows write operations (for unsafe methods). if request.method not in SAFE_METHODS and isinstance(request.auth, Token): if not request.auth.write_enabled: return False - return super(TokenPermissions, self).has_permission(request, view) + return super().has_permission(request, view) # @@ -132,7 +132,7 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination): if not self.limit: return None - return super(OptionalLimitOffsetPagination, self).get_next_link() + return super().get_next_link() def get_previous_link(self): @@ -140,7 +140,7 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination): if not self.limit: return None - return super(OptionalLimitOffsetPagination, self).get_previous_link() + return super().get_previous_link() # diff --git a/netbox/secrets/admin.py b/netbox/secrets/admin.py index ebaf03eeb..94ede4545 100644 --- a/netbox/secrets/admin.py +++ b/netbox/secrets/admin.py @@ -21,7 +21,7 @@ class UserKeyAdmin(admin.ModelAdmin): def get_actions(self, request): # Bulk deletion is disabled at the manager level, so remove the action from the admin site for this model. - actions = super(UserKeyAdmin, self).get_actions(request) + actions = super().get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] if not request.user.has_perm('secrets.activate_userkey'): diff --git a/netbox/secrets/api/serializers.py b/netbox/secrets/api/serializers.py index 4d50a0a0b..1faf85dcf 100644 --- a/netbox/secrets/api/serializers.py +++ b/netbox/secrets/api/serializers.py @@ -49,6 +49,6 @@ class SecretSerializer(TaggitSerializer, CustomFieldModelSerializer): validator(data) # Enforce model validation - super(SecretSerializer, self).validate(data) + super().validate(data) return data diff --git a/netbox/secrets/api/views.py b/netbox/secrets/api/views.py index 970e1e20d..0c164de07 100644 --- a/netbox/secrets/api/views.py +++ b/netbox/secrets/api/views.py @@ -56,14 +56,14 @@ class SecretViewSet(ModelViewSet): def get_serializer_context(self): # Make the master key available to the serializer for encrypting plaintext values - context = super(SecretViewSet, self).get_serializer_context() + context = super().get_serializer_context() context['master_key'] = self.master_key return context def initial(self, request, *args, **kwargs): - super(SecretViewSet, self).initial(request, *args, **kwargs) + super().initial(request, *args, **kwargs) if request.user.is_authenticated: diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 7f8844835..17933b745 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -78,7 +78,7 @@ class SecretForm(BootstrapMixin, CustomFieldForm): def __init__(self, *args, **kwargs): - super(SecretForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # A plaintext value is required when creating a new Secret if not self.instance.pk: @@ -122,7 +122,7 @@ class SecretCSVForm(forms.ModelForm): } def save(self, *args, **kwargs): - s = super(SecretCSVForm, self).save(*args, **kwargs) + s = super().save(*args, **kwargs) s.plaintext = str(self.cleaned_data['plaintext']) return s diff --git a/netbox/secrets/models.py b/netbox/secrets/models.py index 72dbc10a1..8190cd1dd 100644 --- a/netbox/secrets/models.py +++ b/netbox/secrets/models.py @@ -85,7 +85,7 @@ class UserKey(models.Model): ) def __init__(self, *args, **kwargs): - super(UserKey, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Store the initial public_key and master_key_cipher to check for changes on save(). self.__initial_public_key = self.public_key @@ -125,7 +125,7 @@ class UserKey(models.Model): ) }) - super(UserKey, self).clean() + super().clean() def save(self, *args, **kwargs): @@ -138,7 +138,7 @@ class UserKey(models.Model): master_key = generate_random_key() self.master_key_cipher = encrypt_master_key(master_key, self.public_key) - super(UserKey, self).save(*args, **kwargs) + super().save(*args, **kwargs) def delete(self, *args, **kwargs): @@ -148,7 +148,7 @@ class UserKey(models.Model): raise Exception("Cannot delete the last active UserKey when Secrets exist! This would render all secrets " "inaccessible.") - super(UserKey, self).delete(*args, **kwargs) + super().delete(*args, **kwargs) def is_filled(self): """ @@ -230,7 +230,7 @@ class SessionKey(models.Model): # Encrypt master key using the session key self.cipher = strxor.strxor(self.key, master_key) - super(SessionKey, self).save(*args, **kwargs) + super().save(*args, **kwargs) def get_master_key(self, session_key): @@ -356,7 +356,7 @@ class Secret(ChangeLoggedModel, CustomFieldModel): def __init__(self, *args, **kwargs): self.plaintext = kwargs.pop('plaintext', None) - super(Secret, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def __str__(self): if self.role and self.device and self.name: diff --git a/netbox/secrets/tests/test_api.py b/netbox/secrets/tests/test_api.py index 1ec06aa18..c260f1a48 100644 --- a/netbox/secrets/tests/test_api.py +++ b/netbox/secrets/tests/test_api.py @@ -51,7 +51,7 @@ class SecretRoleTest(APITestCase): def setUp(self): - super(SecretRoleTest, self).setUp() + super().setUp() self.secretrole1 = SecretRole.objects.create(name='Test Secret Role 1', slug='test-secret-role-1') self.secretrole2 = SecretRole.objects.create(name='Test Secret Role 2', slug='test-secret-role-2') @@ -152,7 +152,7 @@ class SecretTest(APITestCase): def setUp(self): - super(SecretTest, self).setUp() + super().setUp() userkey = UserKey(user=self.user, public_key=PUBLIC_KEY) userkey.save() @@ -294,7 +294,7 @@ class GetSessionKeyTest(APITestCase): def setUp(self): - super(GetSessionKeyTest, self).setUp() + super().setUp() userkey = UserKey(user=self.user, public_key=PUBLIC_KEY) userkey.save() diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index 428c3a905..91d8caf0d 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -228,7 +228,7 @@ class SecretBulkImportView(BulkImportView): messages.error(request, "No session key found for this user.") if self.master_key is not None: - return super(SecretBulkImportView, self).post(request) + return super().post(request) else: messages.error(request, "Invalid private key! Unable to encrypt secret data.") diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index 1cc13483f..ea6fc40d1 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -117,4 +117,4 @@ class TenancyForm(ChainedFieldsMixin, forms.Form): initial['tenant_group'] = instance.tenant.group kwargs['initial'] = initial - super(TenancyForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) diff --git a/netbox/tenancy/tests/test_api.py b/netbox/tenancy/tests/test_api.py index f2287d770..69db73ac6 100644 --- a/netbox/tenancy/tests/test_api.py +++ b/netbox/tenancy/tests/test_api.py @@ -9,7 +9,7 @@ class TenantGroupTest(APITestCase): def setUp(self): - super(TenantGroupTest, self).setUp() + super().setUp() self.tenantgroup1 = TenantGroup.objects.create(name='Test Tenant Group 1', slug='test-tenant-group-1') self.tenantgroup2 = TenantGroup.objects.create(name='Test Tenant Group 2', slug='test-tenant-group-2') @@ -110,7 +110,7 @@ class TenantTest(APITestCase): def setUp(self): - super(TenantTest, self).setUp() + super().setUp() self.tenantgroup1 = TenantGroup.objects.create(name='Test Tenant Group 1', slug='test-tenant-group-1') self.tenantgroup2 = TenantGroup.objects.create(name='Test Tenant Group 2', slug='test-tenant-group-2') diff --git a/netbox/users/forms.py b/netbox/users/forms.py index e4b39fa92..aad82d351 100644 --- a/netbox/users/forms.py +++ b/netbox/users/forms.py @@ -8,7 +8,7 @@ from .models import Token class LoginForm(BootstrapMixin, AuthenticationForm): def __init__(self, *args, **kwargs): - super(LoginForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['username'].widget.attrs['placeholder'] = '' self.fields['password'].widget.attrs['placeholder'] = '' diff --git a/netbox/users/models.py b/netbox/users/models.py index 7034a58e0..2956a9778 100644 --- a/netbox/users/models.py +++ b/netbox/users/models.py @@ -48,7 +48,7 @@ class Token(models.Model): def save(self, *args, **kwargs): if not self.key: self.key = self.generate_key() - return super(Token, self).save(*args, **kwargs) + return super().save(*args, **kwargs) def generate_key(self): # Generate a random 160-bit key expressed in hexadecimal. diff --git a/netbox/users/views.py b/netbox/users/views.py index 2452975a6..171d444b9 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -132,7 +132,7 @@ class UserKeyEditView(View): except UserKey.DoesNotExist: self.userkey = UserKey(user=request.user) - return super(UserKeyEditView, self).dispatch(request, *args, **kwargs) + return super().dispatch(request, *args, **kwargs) def get(self, request): form = UserKeyForm(instance=self.userkey) diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 35dc95a4b..c24fd1a16 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -66,7 +66,7 @@ class ChoiceField(Field): self._choices[k2] = v2 else: self._choices[k] = v - super(ChoiceField, self).__init__(**kwargs) + super().__init__(**kwargs) def to_representation(self, obj): if obj is '': @@ -130,7 +130,7 @@ class SerializedPKRelatedField(PrimaryKeyRelatedField): def __init__(self, serializer, **kwargs): self.serializer = serializer self.pk_field = kwargs.pop('pk_field', None) - super(SerializedPKRelatedField, self).__init__(**kwargs) + super().__init__(**kwargs) def to_representation(self, value): return self.serializer(value, context={'request': self.context['request']}).data @@ -206,7 +206,7 @@ class ModelViewSet(_ModelViewSet): if isinstance(kwargs.get('data', {}), list): kwargs['many'] = True - return super(ModelViewSet, self).get_serializer(*args, **kwargs) + return super().get_serializer(*args, **kwargs) def get_serializer_class(self): @@ -230,7 +230,7 @@ class FieldChoicesViewSet(ViewSet): fields = [] def __init__(self, *args, **kwargs): - super(FieldChoicesViewSet, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Compile a dict of all fields in this view self._fields = OrderedDict() diff --git a/netbox/utilities/fields.py b/netbox/utilities/fields.py index a2b601103..104902b1f 100644 --- a/netbox/utilities/fields.py +++ b/netbox/utilities/fields.py @@ -28,8 +28,8 @@ class ColorField(models.CharField): def __init__(self, *args, **kwargs): kwargs['max_length'] = 6 - super(ColorField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def formfield(self, **kwargs): kwargs['widget'] = ColorSelect - return super(ColorField, self).formfield(**kwargs) + return super().formfield(**kwargs) diff --git a/netbox/utilities/filters.py b/netbox/utilities/filters.py index 424a2e47c..4da3a9856 100644 --- a/netbox/utilities/filters.py +++ b/netbox/utilities/filters.py @@ -17,7 +17,7 @@ class NullableCharFieldFilter(django_filters.CharFilter): def filter(self, qs, value): if value != self.null_value: - return super(NullableCharFieldFilter, self).filter(qs, value) + return super().filter(qs, value) qs = self.get_method(qs)(**{'{}__isnull'.format(self.name): True}) return qs.distinct() if self.distinct else qs @@ -34,4 +34,4 @@ class TagFilter(django_filters.ModelMultipleChoiceFilter): kwargs.setdefault('conjoined', True) kwargs.setdefault('queryset', Tag.objects.all()) - super(TagFilter, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index 181221fe3..4cac401d9 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -193,7 +193,7 @@ class ColorSelect(forms.Select): def __init__(self, *args, **kwargs): kwargs['choices'] = add_blank_choice(COLOR_CHOICES) - super(ColorSelect, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class BulkEditNullBooleanSelect(forms.NullBooleanSelect): @@ -202,7 +202,7 @@ class BulkEditNullBooleanSelect(forms.NullBooleanSelect): """ def __init__(self, *args, **kwargs): - super(BulkEditNullBooleanSelect, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Override the built-in choice labels self.choices = ( @@ -242,17 +242,17 @@ class ArrayFieldSelectMultiple(SelectWithDisabled, forms.SelectMultiple): """ def __init__(self, *args, **kwargs): self.delimiter = kwargs.pop('delimiter', ',') - super(ArrayFieldSelectMultiple, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def optgroups(self, name, value, attrs=None): # Split the delimited string of values into a list if value: value = value[0].split(self.delimiter) - return super(ArrayFieldSelectMultiple, self).optgroups(name, value, attrs) + return super().optgroups(name, value, attrs) def value_from_datadict(self, data, files, name): # Condense the list of selected choices into a delimited string - data = super(ArrayFieldSelectMultiple, self).value_from_datadict(data, files, name) + data = super().value_from_datadict(data, files, name) return self.delimiter.join(data) @@ -279,7 +279,7 @@ class APISelect(SelectWithDisabled): **kwargs ): - super(APISelect, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.attrs['class'] = 'api-select' self.attrs['api-url'] = '/{}{}'.format(settings.BASE_PATH, api_url.lstrip('/')) # Inject BASE_PATH @@ -308,7 +308,7 @@ class Livesearch(forms.TextInput): def __init__(self, query_key, query_url, field_to_update, obj_label=None, *args, **kwargs): - super(Livesearch, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.attrs = { 'data-key': query_key, @@ -336,7 +336,7 @@ class CSVDataField(forms.CharField): self.fields = fields self.required_fields = required_fields - super(CSVDataField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.strip = False if not self.label: @@ -382,12 +382,12 @@ class CSVChoiceField(forms.ChoiceField): """ def __init__(self, choices, *args, **kwargs): - super(CSVChoiceField, self).__init__(choices=choices, *args, **kwargs) + super().__init__(choices=choices, *args, **kwargs) self.choices = [(label, label) for value, label in unpack_grouped_choices(choices)] self.choice_values = {label: value for value, label in unpack_grouped_choices(choices)} def clean(self, value): - value = super(CSVChoiceField, self).clean(value) + value = super().clean(value) if not value: return None if value not in self.choice_values: @@ -401,7 +401,7 @@ class ExpandableNameField(forms.CharField): Example: 'Gi0/[1-3]' => ['Gi0/1', 'Gi0/2', 'Gi0/3'] """ def __init__(self, *args, **kwargs): - super(ExpandableNameField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if not self.help_text: self.help_text = 'Alphanumeric ranges are supported for bulk creation.
' \ 'Mixed cases and types within a single range are not supported.
' \ @@ -421,7 +421,7 @@ class ExpandableIPAddressField(forms.CharField): Example: '192.0.2.[1-254]/24' => ['192.0.2.1/24', '192.0.2.2/24', '192.0.2.3/24' ... '192.0.2.254/24'] """ def __init__(self, *args, **kwargs): - super(ExpandableIPAddressField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if not self.help_text: self.help_text = 'Specify a numeric range to create multiple IPs.
'\ 'Example: 192.0.2.[1,5,100-254]/24' @@ -450,7 +450,7 @@ class CommentField(forms.CharField): required = kwargs.pop('required', False) label = kwargs.pop('label', self.default_label) help_text = kwargs.pop('help_text', self.default_helptext) - super(CommentField, self).__init__(required=required, label=label, help_text=help_text, *args, **kwargs) + super().__init__(required=required, label=label, help_text=help_text, *args, **kwargs) class FlexibleModelChoiceField(forms.ModelChoiceField): @@ -490,7 +490,7 @@ class ChainedModelChoiceField(forms.ModelChoiceField): """ def __init__(self, chains=None, *args, **kwargs): self.chains = chains - super(ChainedModelChoiceField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class ChainedModelMultipleChoiceField(forms.ModelMultipleChoiceField): @@ -499,7 +499,7 @@ class ChainedModelMultipleChoiceField(forms.ModelMultipleChoiceField): """ def __init__(self, chains=None, *args, **kwargs): self.chains = chains - super(ChainedModelMultipleChoiceField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class SlugField(forms.SlugField): @@ -509,7 +509,7 @@ class SlugField(forms.SlugField): def __init__(self, slug_source='name', *args, **kwargs): label = kwargs.pop('label', "Slug") help_text = kwargs.pop('help_text', "URL-friendly unique shorthand") - super(SlugField, self).__init__(label=label, help_text=help_text, *args, **kwargs) + super().__init__(label=label, help_text=help_text, *args, **kwargs) self.widget.attrs['slug-source'] = slug_source @@ -536,10 +536,10 @@ class FilterChoiceFieldMixin(object): kwargs['required'] = False if 'widget' not in kwargs: kwargs['widget'] = forms.SelectMultiple(attrs={'size': 6}) - super(FilterChoiceFieldMixin, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def label_from_instance(self, obj): - label = super(FilterChoiceFieldMixin, self).label_from_instance(obj) + label = super().label_from_instance(obj) if hasattr(obj, 'filter_count'): return '{} ({})'.format(label, obj.filter_count) return label @@ -582,7 +582,7 @@ class AnnotatedMultipleChoiceField(forms.MultipleChoiceField): self.annotate_field = annotate_field self.static_choices = unpack_grouped_choices(choices) - super(AnnotatedMultipleChoiceField, self).__init__(choices=self.annotate_choices, *args, **kwargs) + super().__init__(choices=self.annotate_choices, *args, **kwargs) class LaxURLField(forms.URLField): @@ -599,7 +599,7 @@ class JSONField(_JSONField): Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text. """ def __init__(self, *args, **kwargs): - super(JSONField, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if not self.help_text: self.help_text = 'Enter context data in JSON format.' self.widget.attrs['placeholder'] = '' @@ -621,7 +621,7 @@ class BootstrapMixin(forms.BaseForm): Add the base Bootstrap CSS classes to form elements. """ def __init__(self, *args, **kwargs): - super(BootstrapMixin, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) exempt_widgets = [ forms.CheckboxInput, forms.ClearableFileInput, forms.FileInput, forms.RadioSelect @@ -642,7 +642,7 @@ class ChainedFieldsMixin(forms.BaseForm): Iterate through all ChainedModelChoiceFields in the form and modify their querysets based on chained fields. """ def __init__(self, *args, **kwargs): - super(ChainedFieldsMixin, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) for field_name, field in self.fields.items(): @@ -691,7 +691,7 @@ class ComponentForm(BootstrapMixin, forms.Form): """ def __init__(self, parent, *args, **kwargs): self.parent = parent - super(ComponentForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def get_iterative_data(self, iteration): return {} @@ -702,7 +702,7 @@ class BulkEditForm(forms.Form): Base form for editing multiple objects in bulk """ def __init__(self, model, parent_obj=None, *args, **kwargs): - super(BulkEditForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.model = model self.parent_obj = parent_obj self.nullable_fields = [] diff --git a/netbox/utilities/managers.py b/netbox/utilities/managers.py index 998e27a8c..724773c46 100644 --- a/netbox/utilities/managers.py +++ b/netbox/utilities/managers.py @@ -15,7 +15,7 @@ class NaturalOrderingManager(Manager): def get_queryset(self): - queryset = super(NaturalOrderingManager, self).get_queryset() + queryset = super().get_queryset() db_table = self.model._meta.db_table db_field = self.natural_order_field diff --git a/netbox/utilities/paginator.py b/netbox/utilities/paginator.py index ae915f773..b49e38048 100644 --- a/netbox/utilities/paginator.py +++ b/netbox/utilities/paginator.py @@ -7,7 +7,7 @@ class EnhancedPaginator(Paginator): def __init__(self, object_list, per_page, **kwargs): if not isinstance(per_page, int) or per_page < 1: per_page = getattr(settings, 'PAGINATE_COUNT', 50) - super(EnhancedPaginator, self).__init__(object_list, per_page, **kwargs) + super().__init__(object_list, per_page, **kwargs) def _get_page(self, *args, **kwargs): return EnhancedPage(*args, **kwargs) diff --git a/netbox/utilities/sql.py b/netbox/utilities/sql.py index 617586ab8..d76bc339e 100644 --- a/netbox/utilities/sql.py +++ b/netbox/utilities/sql.py @@ -5,7 +5,7 @@ from django.db.models.sql.compiler import SQLCompiler class NullsFirstSQLCompiler(SQLCompiler): def get_order_by(self): - result = super(NullsFirstSQLCompiler, self).get_order_by() + result = super().get_order_by() if result: return [(expr, (sql + ' NULLS FIRST', params, is_ref)) for (expr, (sql, params, is_ref)) in result] return result @@ -28,5 +28,5 @@ class NullsFirstQuerySet(models.QuerySet): """ def __init__(self, model=None, query=None, using=None, hints=None): - super(NullsFirstQuerySet, self).__init__(model, query, using, hints) + super().__init__(model, query, using, hints) self.query = query or NullsFirstQuery(self.model) diff --git a/netbox/utilities/tables.py b/netbox/utilities/tables.py index 9689a20ea..3564136ac 100644 --- a/netbox/utilities/tables.py +++ b/netbox/utilities/tables.py @@ -7,7 +7,7 @@ class BaseTable(tables.Table): Default table for object lists """ def __init__(self, *args, **kwargs): - super(BaseTable, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Set default empty_text if none was provided if self.empty_text is None: @@ -26,7 +26,7 @@ class ToggleColumn(tables.CheckBoxColumn): def __init__(self, *args, **kwargs): default = kwargs.pop('default', '') visible = kwargs.pop('visible', False) - super(ToggleColumn, self).__init__(*args, default=default, visible=visible, **kwargs) + super().__init__(*args, default=default, visible=visible, **kwargs) @property def header(self): diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 7a76f62c8..45612a874 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -200,13 +200,13 @@ class ClusterAddDevicesForm(BootstrapMixin, ChainedFieldsMixin, forms.Form): self.cluster = cluster - super(ClusterAddDevicesForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['devices'].choices = [] def clean(self): - super(ClusterAddDevicesForm, self).clean() + super().clean() # If the Cluster is assigned to a Site, all Devices must be assigned to that Site. if self.cluster.site is not None: @@ -266,7 +266,7 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldForm): initial['cluster_group'] = instance.cluster.group kwargs['initial'] = initial - super(VirtualMachineForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if self.instance.pk: @@ -443,7 +443,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm): def clean(self): - super(InterfaceForm, self).clean() + super().clean() # Validate VLAN assignments tagged_vlans = self.cleaned_data['tagged_vlans'] @@ -474,7 +474,7 @@ class InterfaceCreateForm(ComponentForm): kwargs['initial'] = kwargs.get('initial', {}).copy() kwargs['initial'].update({'enabled': True}) - super(InterfaceCreateForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm): diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index ca66f1d2f..91792f8fb 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -13,7 +13,7 @@ class ClusterTypeTest(APITestCase): def setUp(self): - super(ClusterTypeTest, self).setUp() + super().setUp() self.clustertype1 = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') self.clustertype2 = ClusterType.objects.create(name='Test Cluster Type 2', slug='test-cluster-type-2') @@ -114,7 +114,7 @@ class ClusterGroupTest(APITestCase): def setUp(self): - super(ClusterGroupTest, self).setUp() + super().setUp() self.clustergroup1 = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1') self.clustergroup2 = ClusterGroup.objects.create(name='Test Cluster Group 2', slug='test-cluster-group-2') @@ -215,7 +215,7 @@ class ClusterTest(APITestCase): def setUp(self): - super(ClusterTest, self).setUp() + super().setUp() cluster_type = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') cluster_group = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1') @@ -328,7 +328,7 @@ class VirtualMachineTest(APITestCase): def setUp(self): - super(VirtualMachineTest, self).setUp() + super().setUp() cluster_type = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') cluster_group = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1') @@ -458,7 +458,7 @@ class InterfaceTest(APITestCase): def setUp(self): - super(InterfaceTest, self).setUp() + super().setUp() clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype)