Closes #2614: Simplify calls of super() for Python 3

This commit is contained in:
Jeremy Stretch 2018-11-27 10:52:24 -05:00
parent 7d262296e1
commit bd7aee7c1f
46 changed files with 193 additions and 193 deletions

View File

@ -13,7 +13,7 @@ class ProviderTest(APITestCase):
def setUp(self): def setUp(self):
super(ProviderTest, self).setUp() super().setUp()
self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') 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') self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2')
@ -135,7 +135,7 @@ class CircuitTypeTest(APITestCase):
def setUp(self): 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.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') 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): def setUp(self):
super(CircuitTest, self).setUp() super().setUp()
self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') 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') self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2')
@ -326,7 +326,7 @@ class CircuitTerminationTest(APITestCase):
def setUp(self): def setUp(self):
super(CircuitTerminationTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')

View File

@ -121,7 +121,7 @@ class RackSerializer(TaggitSerializer, CustomFieldModelSerializer):
validator(data) validator(data)
# Enforce model validation # Enforce model validation
super(RackSerializer, self).validate(data) super().validate(data)
return data return data
@ -294,7 +294,7 @@ class DeviceSerializer(TaggitSerializer, CustomFieldModelSerializer):
validator(data) validator(data)
# Enforce model validation # Enforce model validation
super(DeviceSerializer, self).validate(data) super().validate(data)
return data return data
@ -405,7 +405,7 @@ class InterfaceSerializer(TaggitSerializer, ConnectedEndpointSerializer):
"be global.".format(vlan) "be global.".format(vlan)
}) })
return super(InterfaceSerializer, self).validate(data) return super().validate(data)
class RearPortSerializer(ValidatedModelSerializer): class RearPortSerializer(ValidatedModelSerializer):

View File

@ -382,7 +382,7 @@ class RackCSVForm(forms.ModelForm):
def clean(self): def clean(self):
super(RackCSVForm, self).clean() super().clean()
site = self.cleaned_data.get('site') site = self.cleaned_data.get('site')
group_name = self.cleaned_data.get('group_name') group_name = self.cleaned_data.get('group_name')
@ -527,7 +527,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RackReservationForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Populate rack unit choices # Populate rack unit choices
self.fields['units'].widget.choices = self._get_unit_choices() self.fields['units'].widget.choices = self._get_unit_choices()
@ -797,7 +797,7 @@ class FrontPortTemplateCreateForm(ComponentForm):
def __init__(self, *args, **kwargs): 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. # Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
occupied_port_positions = [ occupied_port_positions = [
@ -1015,7 +1015,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
initial['manufacturer'] = instance.device_type.manufacturer initial['manufacturer'] = instance.device_type.manufacturer
kwargs['initial'] = initial kwargs['initial'] = initial
super(DeviceForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if self.instance.pk: if self.instance.pk:
@ -1139,7 +1139,7 @@ class BaseDeviceCSVForm(forms.ModelForm):
def clean(self): def clean(self):
super(BaseDeviceCSVForm, self).clean() super().clean()
manufacturer = self.cleaned_data.get('manufacturer') manufacturer = self.cleaned_data.get('manufacturer')
model_name = self.cleaned_data.get('model_name') model_name = self.cleaned_data.get('model_name')
@ -1192,7 +1192,7 @@ class DeviceCSVForm(BaseDeviceCSVForm):
def clean(self): def clean(self):
super(DeviceCSVForm, self).clean() super().clean()
site = self.cleaned_data.get('site') site = self.cleaned_data.get('site')
rack_group = self.cleaned_data.get('rack_group') rack_group = self.cleaned_data.get('rack_group')
@ -1241,7 +1241,7 @@ class ChildDeviceCSVForm(BaseDeviceCSVForm):
def clean(self): def clean(self):
super(ChildDeviceCSVForm, self).clean() super().clean()
parent = self.cleaned_data.get('parent') parent = self.cleaned_data.get('parent')
device_bay_name = self.cleaned_data.get('device_bay_name') device_bay_name = self.cleaned_data.get('device_bay_name')
@ -1493,7 +1493,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm):
} }
def __init__(self, *args, **kwargs): 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) # Limit LAG choices to interfaces belonging to this device (or VC master)
if self.is_bound: if self.is_bound:
@ -1509,7 +1509,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm):
def clean(self): def clean(self):
super(InterfaceForm, self).clean() super().clean()
# Validate VLAN assignments # Validate VLAN assignments
tagged_vlans = self.cleaned_data['tagged_vlans'] tagged_vlans = self.cleaned_data['tagged_vlans']
@ -1542,7 +1542,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(InterfaceAssignVLANsForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if self.instance.mode == IFACE_MODE_ACCESS: if self.instance.mode == IFACE_MODE_ACCESS:
self.initial['tagged'] = False self.initial['tagged'] = False
@ -1587,7 +1587,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm):
def clean(self): def clean(self):
super(InterfaceAssignVLANsForm, self).clean() super().clean()
# Only untagged VLANs permitted on an access interface # Only untagged VLANs permitted on an access interface
if self.instance.mode == IFACE_MODE_ACCESS and len(self.cleaned_data['vlans']) > 1: if self.instance.mode == IFACE_MODE_ACCESS and len(self.cleaned_data['vlans']) > 1:
@ -1605,7 +1605,7 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm):
else: else:
self.instance.untagged_vlan_id = self.cleaned_data['vlans'][0] 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): class InterfaceCreateForm(ComponentForm, forms.Form):
@ -1630,7 +1630,7 @@ class InterfaceCreateForm(ComponentForm, forms.Form):
kwargs['initial'] = kwargs.get('initial', {}).copy() kwargs['initial'] = kwargs.get('initial', {}).copy()
kwargs['initial'].update({'enabled': True}) 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) # Limit LAG choices to interfaces belonging to this device (or its VC master)
if self.parent is not None: if self.parent is not None:
@ -1655,7 +1655,7 @@ class InterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
nullable_fields = ['lag', 'mtu', 'description', 'mode'] nullable_fields = ['lag', 'mtu', 'description', 'mode']
def __init__(self, *args, **kwargs): 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) # Limit LAG choices to interfaces which belong to the parent device (or VC master)
device = self.parent_obj device = self.parent_obj
@ -1710,7 +1710,7 @@ class FrontPortCreateForm(ComponentForm):
def __init__(self, *args, **kwargs): 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. # Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
occupied_port_positions = [ occupied_port_positions = [
@ -1886,7 +1886,7 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
] ]
def __init__(self, *args, **kwargs): 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 # Define available types for endpoint B based on the type of endpoint A
termination_a_type = self.instance.termination_a._meta.model_name 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): 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( self.fields['installed_device'].queryset = Device.objects.filter(
site=device_bay.device.site, site=device_bay.device.site,
@ -2236,7 +2236,7 @@ class VirtualChassisForm(BootstrapMixin, forms.ModelForm):
class BaseVCMemberFormSet(forms.BaseModelFormSet): class BaseVCMemberFormSet(forms.BaseModelFormSet):
def clean(self): def clean(self):
super(BaseVCMemberFormSet, self).clean() super().clean()
# Check for duplicate VC position values # Check for duplicate VC position values
vc_position_list = [] vc_position_list = []
@ -2260,7 +2260,7 @@ class DeviceVCMembershipForm(forms.ModelForm):
} }
def __init__(self, validate_vc_position=False, *args, **kwargs): 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) # Require VC position (only required when the Device is a VirtualChassis member)
self.fields['vc_position'].required = True self.fields['vc_position'].required = True

View File

@ -18,7 +18,7 @@ class DeviceComponentManager(Manager):
def get_queryset(self): def get_queryset(self):
queryset = super(DeviceComponentManager, self).get_queryset() queryset = super().get_queryset()
table_name = self.model._meta.db_table table_name = self.model._meta.db_table
sql = r"CONCAT(REGEXP_REPLACE({}.name, '\d+$', ''), LPAD(SUBSTRING({}.name FROM '\d+$'), 8, '0'))" sql = r"CONCAT(REGEXP_REPLACE({}.name, '\d+$', ''), LPAD(SUBSTRING({}.name FROM '\d+$'), 8, '0'))"

View File

@ -544,7 +544,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
] ]
def __str__(self): def __str__(self):
return self.display_name or super(Rack, self).__str__() return self.display_name or super().__str__()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('dcim:rack', args=[self.pk]) return reverse('dcim:rack', args=[self.pk])
@ -582,7 +582,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
if self.pk: if self.pk:
_site_id = Rack.objects.get(pk=self.pk).site_id _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. # Update racked devices if the assigned Site has been changed.
if _site_id is not None and self.site_id != _site_id: if _site_id is not None and self.site_id != _site_id:
@ -894,7 +894,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel):
return self.model return self.model
def __init__(self, *args, **kwargs): 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() # Save a copy of u_height for validation in clean()
self._original_u_height = self.u_height self._original_u_height = self.u_height
@ -1437,7 +1437,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
) )
def __str__(self): def __str__(self):
return self.display_name or super(Device, self).__str__() return self.display_name or super().__str__()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('dcim:device', args=[self.pk]) return reverse('dcim:device', args=[self.pk])
@ -1552,7 +1552,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
is_new = not bool(self.pk) 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 this is a new Device, instantiate all of the related components per the DeviceType definition
if is_new: if is_new:
@ -2055,7 +2055,7 @@ class Interface(CableTermination, ComponentModel):
if self.pk and self.mode is not IFACE_MODE_TAGGED: if self.pk and self.mode is not IFACE_MODE_TAGGED:
self.tagged_vlans.clear() self.tagged_vlans.clear()
return super(Interface, self).save(*args, **kwargs) return super().save(*args, **kwargs)
def log_change(self, user, request_id, action): def log_change(self, user, request_id, action):
""" """
@ -2522,7 +2522,7 @@ class Cable(ChangeLoggedModel):
def __init__(self, *args, **kwargs): 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() # Create an ID string for use by __str__(). We have to save a copy of pk since it's nullified after .delete()
# is called. # is called.
@ -2595,7 +2595,7 @@ class Cable(ChangeLoggedModel):
if self.length and self.length_unit: if self.length and self.length_unit:
self._abs_length = to_meters(self.length, 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): def to_csv(self):
return ( return (

View File

@ -20,7 +20,7 @@ class RegionTest(APITestCase):
def setUp(self): def setUp(self):
super(RegionTest, self).setUp() super().setUp()
self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1') 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') self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2')
@ -121,7 +121,7 @@ class SiteTest(APITestCase):
def setUp(self): def setUp(self):
super(SiteTest, self).setUp() super().setUp()
self.region1 = Region.objects.create(name='Test Region 1', slug='test-region-1') 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') self.region2 = Region.objects.create(name='Test Region 2', slug='test-region-2')
@ -256,7 +256,7 @@ class RackGroupTest(APITestCase):
def setUp(self): def setUp(self):
super(RackGroupTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
@ -366,7 +366,7 @@ class RackRoleTest(APITestCase):
def setUp(self): 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.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') 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): def setUp(self):
super(RackTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
@ -608,7 +608,7 @@ class RackReservationTest(APITestCase):
def setUp(self): def setUp(self):
super(RackReservationTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.rack1 = Rack.objects.create(site=self.site1, name='Test Rack 1')
@ -719,7 +719,7 @@ class ManufacturerTest(APITestCase):
def setUp(self): def setUp(self):
super(ManufacturerTest, self).setUp() super().setUp()
self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') 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') self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2')
@ -820,7 +820,7 @@ class DeviceTypeTest(APITestCase):
def setUp(self): def setUp(self):
super(DeviceTypeTest, self).setUp() super().setUp()
self.manufacturer1 = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') 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') self.manufacturer2 = Manufacturer.objects.create(name='Test Manufacturer 2', slug='test-manufacturer-2')
@ -936,7 +936,7 @@ class ConsolePortTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(ConsolePortTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1036,7 +1036,7 @@ class ConsoleServerPortTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(ConsoleServerPortTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1136,7 +1136,7 @@ class PowerPortTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(PowerPortTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1236,7 +1236,7 @@ class PowerOutletTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(PowerOutletTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1336,7 +1336,7 @@ class InterfaceTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(InterfaceTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1436,7 +1436,7 @@ class DeviceBayTemplateTest(APITestCase):
def setUp(self): def setUp(self):
super(DeviceBayTemplateTest, self).setUp() super().setUp()
self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
self.devicetype = DeviceType.objects.create( self.devicetype = DeviceType.objects.create(
@ -1536,7 +1536,7 @@ class DeviceRoleTest(APITestCase):
def setUp(self): def setUp(self):
super(DeviceRoleTest, self).setUp() super().setUp()
self.devicerole1 = DeviceRole.objects.create( self.devicerole1 = DeviceRole.objects.create(
name='Test Device Role 1', slug='test-device-role-1', color='ff0000' name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
@ -1650,7 +1650,7 @@ class PlatformTest(APITestCase):
def setUp(self): def setUp(self):
super(PlatformTest, self).setUp() super().setUp()
self.platform1 = Platform.objects.create(name='Test Platform 1', slug='test-platform-1') 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') self.platform2 = Platform.objects.create(name='Test Platform 2', slug='test-platform-2')
@ -1751,7 +1751,7 @@ class DeviceTest(APITestCase):
def setUp(self): def setUp(self):
super(DeviceTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
@ -1913,7 +1913,7 @@ class ConsolePortTest(APITestCase):
def setUp(self): def setUp(self):
super(ConsolePortTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2026,7 +2026,7 @@ class ConsoleServerPortTest(APITestCase):
def setUp(self): def setUp(self):
super(ConsoleServerPortTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2137,7 +2137,7 @@ class PowerPortTest(APITestCase):
def setUp(self): def setUp(self):
super(PowerPortTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2250,7 +2250,7 @@ class PowerOutletTest(APITestCase):
def setUp(self): def setUp(self):
super(PowerOutletTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2361,7 +2361,7 @@ class InterfaceTest(APITestCase):
def setUp(self): def setUp(self):
super(InterfaceTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2560,7 +2560,7 @@ class DeviceBayTest(APITestCase):
def setUp(self): def setUp(self):
super(DeviceBayTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2683,7 +2683,7 @@ class InventoryItemTest(APITestCase):
def setUp(self): def setUp(self):
super(InventoryItemTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2799,7 +2799,7 @@ class CableTest(APITestCase):
def setUp(self): def setUp(self):
super(CableTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@ -2940,7 +2940,7 @@ class ConnectionTest(APITestCase):
def setUp(self): def setUp(self):
super(ConnectionTest, self).setUp() super().setUp()
self.site = Site.objects.create( self.site = Site.objects.create(
name='Test Site 1', slug='test-site-1' name='Test Site 1', slug='test-site-1'
@ -3304,7 +3304,7 @@ class ConnectedDeviceTest(APITestCase):
def setUp(self): def setUp(self):
super(ConnectedDeviceTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
@ -3346,7 +3346,7 @@ class VirtualChassisTest(APITestCase):
def setUp(self): def setUp(self):
super(VirtualChassisTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site', slug='test-site') site = Site.objects.create(name='Test Site', slug='test-site')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer', slug='test-manufacturer') manufacturer = Manufacturer.objects.create(name='Test Manufacturer', slug='test-manufacturer')

View File

@ -28,7 +28,7 @@ class WebhookForm(forms.ModelForm):
exclude = [] exclude = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(WebhookForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
order_content_types(self.fields['obj_type']) order_content_types(self.fields['obj_type'])
@ -56,7 +56,7 @@ class CustomFieldForm(forms.ModelForm):
exclude = [] exclude = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(CustomFieldForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
order_content_types(self.fields['obj_type']) order_content_types(self.fields['obj_type'])
@ -96,7 +96,7 @@ class ExportTemplateForm(forms.ModelForm):
exclude = [] exclude = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ExportTemplateForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Format ContentType choices # Format ContentType choices
order_content_types(self.fields['content_type']) order_content_types(self.fields['content_type'])

View File

@ -105,7 +105,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer):
custom_fields[cfv.field.name] = cfv.value custom_fields[cfv.field.name] = cfv.value
instance.custom_fields = custom_fields instance.custom_fields = custom_fields
super(CustomFieldModelSerializer, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if self.instance is not None: if self.instance is not None:
@ -137,7 +137,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer):
with transaction.atomic(): with transaction.atomic():
instance = super(CustomFieldModelSerializer, self).create(validated_data) instance = super().create(validated_data)
# Save custom fields # Save custom fields
if custom_fields is not None: if custom_fields is not None:
@ -152,7 +152,7 @@ class CustomFieldModelSerializer(ValidatedModelSerializer):
with transaction.atomic(): with transaction.atomic():
instance = super(CustomFieldModelSerializer, self).update(instance, validated_data) instance = super().update(instance, validated_data)
# Save custom fields # Save custom fields
if custom_fields is not None: if custom_fields is not None:

View File

@ -108,7 +108,7 @@ class ImageAttachmentSerializer(ValidatedModelSerializer):
) )
# Enforce model validation # Enforce model validation
super(ImageAttachmentSerializer, self).validate(data) super().validate(data)
return data return data

View File

@ -50,7 +50,7 @@ class CustomFieldModelViewSet(ModelViewSet):
custom_field_choices[cfc.id] = cfc.value custom_field_choices[cfc.id] = cfc.value
custom_field_choices = custom_field_choices custom_field_choices = custom_field_choices
context = super(CustomFieldModelViewSet, self).get_serializer_context() context = super().get_serializer_context()
context.update({ context.update({
'custom_fields': custom_fields, 'custom_fields': custom_fields,
'custom_field_choices': custom_field_choices, 'custom_field_choices': custom_field_choices,
@ -59,7 +59,7 @@ class CustomFieldModelViewSet(ModelViewSet):
def get_queryset(self): def get_queryset(self):
# Prefetch custom field values # 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')
# #

View File

@ -17,7 +17,7 @@ class CustomFieldFilter(django_filters.Filter):
def __init__(self, custom_field, *args, **kwargs): def __init__(self, custom_field, *args, **kwargs):
self.cf_type = custom_field.type self.cf_type = custom_field.type
self.filter_logic = custom_field.filter_logic self.filter_logic = custom_field.filter_logic
super(CustomFieldFilter, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def filter(self, queryset, value): def filter(self, queryset, value):
@ -63,7 +63,7 @@ class CustomFieldFilterSet(django_filters.FilterSet):
""" """
def __init__(self, *args, **kwargs): 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) 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) custom_fields = CustomField.objects.filter(obj_type=obj_type).exclude(filter_logic=CF_FILTER_DISABLED)

View File

@ -102,7 +102,7 @@ class CustomFieldForm(forms.ModelForm):
self.custom_fields = [] self.custom_fields = []
self.obj_type = ContentType.objects.get_for_model(self._meta.model) 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 # Add all applicable CustomFields to the form
custom_fields = [] custom_fields = []
@ -138,7 +138,7 @@ class CustomFieldForm(forms.ModelForm):
cfv.save() cfv.save()
def save(self, commit=True): 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 # Handle custom fields the same way we do M2M fields
if commit: if commit:
@ -152,7 +152,7 @@ class CustomFieldForm(forms.ModelForm):
class CustomFieldBulkEditForm(BulkEditForm): class CustomFieldBulkEditForm(BulkEditForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(CustomFieldBulkEditForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.custom_fields = [] self.custom_fields = []
self.obj_type = ContentType.objects.get_for_model(self.model) 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) 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 # Add all applicable CustomFields to the form
custom_fields = get_custom_fields_for_model(self.obj_type, filterable_only=True).items() 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): class AddRemoveTagsForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(AddRemoveTagsForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Add add/remove tags fields # Add add/remove tags fields
self.fields['add_tags'] = TagField(required=False) self.fields['add_tags'] = TagField(required=False)

View File

@ -261,7 +261,7 @@ class CustomFieldValue(models.Model):
if self.pk and self.value is None: if self.pk and self.value is None:
self.delete() self.delete()
else: else:
super(CustomFieldValue, self).save(*args, **kwargs) super().save(*args, **kwargs)
class CustomFieldChoice(models.Model): class CustomFieldChoice(models.Model):
@ -293,7 +293,7 @@ class CustomFieldChoice(models.Model):
def delete(self, using=None, keep_parents=False): def delete(self, using=None, keep_parents=False):
# When deleting a CustomFieldChoice, delete all CustomFieldValues which point to it # When deleting a CustomFieldChoice, delete all CustomFieldValues which point to it
pk = self.pk 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() 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 _name = self.image.name
super(ImageAttachment, self).delete(*args, **kwargs) super().delete(*args, **kwargs)
# Delete file from disk # Delete file from disk
self.image.delete(save=False) self.image.delete(save=False)
@ -841,7 +841,7 @@ class ObjectChange(models.Model):
self.user_name = self.user.username self.user_name = self.user.username
self.object_repr = str(self.changed_object) self.object_repr = str(self.changed_object)
return super(ObjectChange, self).save(*args, **kwargs) return super().save(*args, **kwargs)
def get_absolute_url(self): def get_absolute_url(self):
return reverse('extras:objectchange', args=[self.pk]) return reverse('extras:objectchange', args=[self.pk])

View File

@ -14,7 +14,7 @@ class GraphTest(APITestCase):
def setUp(self): def setUp(self):
super(GraphTest, self).setUp() super().setUp()
self.graph1 = Graph.objects.create( self.graph1 = Graph.objects.create(
type=GRAPH_TYPE_SITE, name='Test Graph 1', source='http://example.com/graphs.py?site={{ obj.name }}&foo=1' 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): def setUp(self):
super(ExportTemplateTest, self).setUp() super().setUp()
self.content_type = ContentType.objects.get_for_model(Device) self.content_type = ContentType.objects.get_for_model(Device)
self.exporttemplate1 = ExportTemplate.objects.create( self.exporttemplate1 = ExportTemplate.objects.create(
@ -225,7 +225,7 @@ class TagTest(APITestCase):
def setUp(self): def setUp(self):
super(TagTest, self).setUp() super().setUp()
self.tag1 = Tag.objects.create(name='Test Tag 1', slug='test-tag-1') 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') self.tag2 = Tag.objects.create(name='Test Tag 2', slug='test-tag-2')
@ -316,7 +316,7 @@ class ConfigContextTest(APITestCase):
def setUp(self): def setUp(self):
super(ConfigContextTest, self).setUp() super().setUp()
self.configcontext1 = ConfigContext.objects.create( self.configcontext1 = ConfigContext.objects.create(
name='Test Config Context 1', name='Test Config Context 1',

View File

@ -101,7 +101,7 @@ class CustomFieldAPITest(APITestCase):
def setUp(self): def setUp(self):
super(CustomFieldAPITest, self).setUp() super().setUp()
content_type = ContentType.objects.get_for_model(Site) content_type = ContentType.objects.get_for_model(Site)

View File

@ -12,7 +12,7 @@ class TaggedItemTest(APITestCase):
def setUp(self): def setUp(self):
super(TaggedItemTest, self).setUp() super().setUp()
def test_create_tagged_item(self): def test_create_tagged_item(self):

View File

@ -87,7 +87,7 @@ class VLANGroupSerializer(ValidatedModelSerializer):
validator(data) validator(data)
# Enforce model validation # Enforce model validation
super(VLANGroupSerializer, self).validate(data) super().validate(data)
return data return data
@ -118,7 +118,7 @@ class VLANSerializer(TaggitSerializer, CustomFieldModelSerializer):
validator(data) validator(data)
# Enforce model validation # Enforce model validation
super(VLANSerializer, self).validate(data) super().validate(data)
return data return data

View File

@ -40,7 +40,7 @@ class BaseIPField(models.Field):
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'form_class': self.form_class()} defaults = {'form_class': self.form_class()}
defaults.update(kwargs) defaults.update(kwargs)
return super(BaseIPField, self).formfield(**defaults) return super().formfield(**defaults)
class IPNetworkField(BaseIPField): class IPNetworkField(BaseIPField):

View File

@ -250,7 +250,7 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldForm):
initial['vlan_group'] = instance.vlan.group initial['vlan_group'] = instance.vlan.group
kwargs['initial'] = initial kwargs['initial'] = initial
super(PrefixForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['vrf'].empty_label = 'Global' self.fields['vrf'].empty_label = 'Global'
@ -311,7 +311,7 @@ class PrefixCSVForm(forms.ModelForm):
def clean(self): def clean(self):
super(PrefixCSVForm, self).clean() super().clean()
site = self.cleaned_data.get('site') site = self.cleaned_data.get('site')
vlan_group = self.cleaned_data.get('vlan_group') 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 initial['nat_device'] = instance.nat_inside.device
kwargs['initial'] = initial kwargs['initial'] = initial
super(IPAddressForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['vrf'].empty_label = 'Global' self.fields['vrf'].empty_label = 'Global'
@ -505,7 +505,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldForm)
self.initial['primary_for_parent'] = True self.initial['primary_for_parent'] = True
def clean(self): def clean(self):
super(IPAddressForm, self).clean() super().clean()
# Primary IP assignment is only available if an interface has been assigned. # 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'): 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): 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. # Assign/clear this IPAddress as the primary for the associated Device/VirtualMachine.
if self.cleaned_data['primary_for_parent']: 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'] fields = ['address', 'vrf', 'status', 'role', 'description', 'tenant_group', 'tenant']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(IPAddressBulkAddForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['vrf'].empty_label = 'Global' self.fields['vrf'].empty_label = 'Global'
@ -613,7 +613,7 @@ class IPAddressCSVForm(forms.ModelForm):
def clean(self): def clean(self):
super(IPAddressCSVForm, self).clean() super().clean()
device = self.cleaned_data.get('device') device = self.cleaned_data.get('device')
virtual_machine = self.cleaned_data.get('virtual_machine') virtual_machine = self.cleaned_data.get('virtual_machine')
@ -662,7 +662,7 @@ class IPAddressCSVForm(forms.ModelForm):
name=self.cleaned_data['interface_name'] name=self.cleaned_data['interface_name']
) )
ipaddress = super(IPAddressCSVForm, self).save(*args, **kwargs) ipaddress = super().save(*args, **kwargs)
# Set as primary for device/VM # Set as primary for device/VM
if self.cleaned_data['is_primary']: if self.cleaned_data['is_primary']:
@ -851,7 +851,7 @@ class VLANCSVForm(forms.ModelForm):
def clean(self): def clean(self):
super(VLANCSVForm, self).clean() super().clean()
site = self.cleaned_data.get('site') site = self.cleaned_data.get('site')
group_name = self.cleaned_data.get('group_name') group_name = self.cleaned_data.get('group_name')
@ -928,7 +928,7 @@ class ServiceForm(BootstrapMixin, CustomFieldForm):
def __init__(self, *args, **kwargs): 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 # Limit IP address choices to those assigned to interfaces of the parent device/VM
if self.instance.device: if self.instance.device:

View File

@ -63,7 +63,7 @@ class VRF(ChangeLoggedModel, CustomFieldModel):
verbose_name_plural = 'VRFs' verbose_name_plural = 'VRFs'
def __str__(self): def __str__(self):
return self.display_name or super(VRF, self).__str__() return self.display_name or super().__str__()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('ipam:vrf', args=[self.pk]) return reverse('ipam:vrf', args=[self.pk])
@ -198,7 +198,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel):
if self.prefix: if self.prefix:
# Infer address family from IPNetwork object # Infer address family from IPNetwork object
self.family = self.prefix.version self.family = self.prefix.version
super(Aggregate, self).save(*args, **kwargs) super().save(*args, **kwargs)
def to_csv(self): def to_csv(self):
return ( return (
@ -369,7 +369,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel):
self.prefix = self.prefix.cidr self.prefix = self.prefix.cidr
# Infer address family from IPNetwork object # Infer address family from IPNetwork object
self.family = self.prefix.version self.family = self.prefix.version
super(Prefix, self).save(*args, **kwargs) super().save(*args, **kwargs)
def to_csv(self): def to_csv(self):
return ( 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 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. 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') 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: if self.address:
# Infer address family from IPAddress object # Infer address family from IPAddress object
self.family = self.address.version self.family = self.address.version
super(IPAddress, self).save(*args, **kwargs) super().save(*args, **kwargs)
def to_csv(self): def to_csv(self):
@ -773,7 +773,7 @@ class VLAN(ChangeLoggedModel, CustomFieldModel):
verbose_name_plural = 'VLANs' verbose_name_plural = 'VLANs'
def __str__(self): def __str__(self):
return self.display_name or super(VLAN, self).__str__() return self.display_name or super().__str__()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('ipam:vlan', args=[self.pk]) return reverse('ipam:vlan', args=[self.pk])

View File

@ -464,7 +464,7 @@ class InterfaceVLANTable(BaseTable):
def __init__(self, interface, *args, **kwargs): def __init__(self, interface, *args, **kwargs):
self.interface = interface self.interface = interface
super(InterfaceVLANTable, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# #

View File

@ -12,7 +12,7 @@ class VRFTest(APITestCase):
def setUp(self): def setUp(self):
super(VRFTest, self).setUp() super().setUp()
self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1') self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1')
self.vrf2 = VRF.objects.create(name='Test VRF 2', rd='65000:2') self.vrf2 = VRF.objects.create(name='Test VRF 2', rd='65000:2')
@ -113,7 +113,7 @@ class RIRTest(APITestCase):
def setUp(self): def setUp(self):
super(RIRTest, self).setUp() super().setUp()
self.rir1 = RIR.objects.create(name='Test RIR 1', slug='test-rir-1') 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') self.rir2 = RIR.objects.create(name='Test RIR 2', slug='test-rir-2')
@ -214,7 +214,7 @@ class AggregateTest(APITestCase):
def setUp(self): def setUp(self):
super(AggregateTest, self).setUp() super().setUp()
self.rir1 = RIR.objects.create(name='Test RIR 1', slug='test-rir-1') 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') self.rir2 = RIR.objects.create(name='Test RIR 2', slug='test-rir-2')
@ -317,7 +317,7 @@ class RoleTest(APITestCase):
def setUp(self): def setUp(self):
super(RoleTest, self).setUp() super().setUp()
self.role1 = Role.objects.create(name='Test Role 1', slug='test-role-1') 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') self.role2 = Role.objects.create(name='Test Role 2', slug='test-role-2')
@ -418,7 +418,7 @@ class PrefixTest(APITestCase):
def setUp(self): def setUp(self):
super(PrefixTest, self).setUp() super().setUp()
self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') 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') self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1')
@ -657,7 +657,7 @@ class IPAddressTest(APITestCase):
def setUp(self): def setUp(self):
super(IPAddressTest, self).setUp() super().setUp()
self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1') self.vrf1 = VRF.objects.create(name='Test VRF 1', rd='65000:1')
self.ipaddress1 = IPAddress.objects.create(address=IPNetwork('192.168.0.1/24')) self.ipaddress1 = IPAddress.objects.create(address=IPNetwork('192.168.0.1/24'))
@ -756,7 +756,7 @@ class VLANGroupTest(APITestCase):
def setUp(self): 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.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') 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): def setUp(self):
super(VLANTest, self).setUp() super().setUp()
self.vlan1 = VLAN.objects.create(vid=1, name='Test VLAN 1') self.vlan1 = VLAN.objects.create(vid=1, name='Test VLAN 1')
self.vlan2 = VLAN.objects.create(vid=2, name='Test VLAN 2') self.vlan2 = VLAN.objects.create(vid=2, name='Test VLAN 2')
@ -958,7 +958,7 @@ class ServiceTest(APITestCase):
def setUp(self): def setUp(self):
super(ServiceTest, self).setUp() super().setUp()
site = Site.objects.create(name='Test Site 1', slug='test-site-1') site = Site.objects.create(name='Test Site 1', slug='test-site-1')
manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')

View File

@ -715,7 +715,7 @@ class IPAddressAssignView(PermissionRequiredMixin, View):
if 'interface' not in request.GET: if 'interface' not in request.GET:
return redirect('ipam:ipaddress_add') return redirect('ipam:ipaddress_add')
return super(IPAddressAssignView, self).dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
def get(self, request): def get(self, request):

View File

@ -58,14 +58,14 @@ class TokenPermissions(DjangoModelPermissions):
def __init__(self): def __init__(self):
# LOGIN_REQUIRED determines whether read-only access is provided to anonymous users. # LOGIN_REQUIRED determines whether read-only access is provided to anonymous users.
self.authenticated_users_only = settings.LOGIN_REQUIRED self.authenticated_users_only = settings.LOGIN_REQUIRED
super(TokenPermissions, self).__init__() super().__init__()
def has_permission(self, request, view): def has_permission(self, request, view):
# If token authentication is in use, verify that the token allows write operations (for unsafe methods). # 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 request.method not in SAFE_METHODS and isinstance(request.auth, Token):
if not request.auth.write_enabled: if not request.auth.write_enabled:
return False 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: if not self.limit:
return None return None
return super(OptionalLimitOffsetPagination, self).get_next_link() return super().get_next_link()
def get_previous_link(self): def get_previous_link(self):
@ -140,7 +140,7 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination):
if not self.limit: if not self.limit:
return None return None
return super(OptionalLimitOffsetPagination, self).get_previous_link() return super().get_previous_link()
# #

View File

@ -21,7 +21,7 @@ class UserKeyAdmin(admin.ModelAdmin):
def get_actions(self, request): def get_actions(self, request):
# Bulk deletion is disabled at the manager level, so remove the action from the admin site for this model. # 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: if 'delete_selected' in actions:
del actions['delete_selected'] del actions['delete_selected']
if not request.user.has_perm('secrets.activate_userkey'): if not request.user.has_perm('secrets.activate_userkey'):

View File

@ -49,6 +49,6 @@ class SecretSerializer(TaggitSerializer, CustomFieldModelSerializer):
validator(data) validator(data)
# Enforce model validation # Enforce model validation
super(SecretSerializer, self).validate(data) super().validate(data)
return data return data

View File

@ -56,14 +56,14 @@ class SecretViewSet(ModelViewSet):
def get_serializer_context(self): def get_serializer_context(self):
# Make the master key available to the serializer for encrypting plaintext values # 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 context['master_key'] = self.master_key
return context return context
def initial(self, request, *args, **kwargs): def initial(self, request, *args, **kwargs):
super(SecretViewSet, self).initial(request, *args, **kwargs) super().initial(request, *args, **kwargs)
if request.user.is_authenticated: if request.user.is_authenticated:

View File

@ -78,7 +78,7 @@ class SecretForm(BootstrapMixin, CustomFieldForm):
def __init__(self, *args, **kwargs): 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 # A plaintext value is required when creating a new Secret
if not self.instance.pk: if not self.instance.pk:
@ -122,7 +122,7 @@ class SecretCSVForm(forms.ModelForm):
} }
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
s = super(SecretCSVForm, self).save(*args, **kwargs) s = super().save(*args, **kwargs)
s.plaintext = str(self.cleaned_data['plaintext']) s.plaintext = str(self.cleaned_data['plaintext'])
return s return s

View File

@ -85,7 +85,7 @@ class UserKey(models.Model):
) )
def __init__(self, *args, **kwargs): 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(). # Store the initial public_key and master_key_cipher to check for changes on save().
self.__initial_public_key = self.public_key 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): def save(self, *args, **kwargs):
@ -138,7 +138,7 @@ class UserKey(models.Model):
master_key = generate_random_key() master_key = generate_random_key()
self.master_key_cipher = encrypt_master_key(master_key, self.public_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): 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 " raise Exception("Cannot delete the last active UserKey when Secrets exist! This would render all secrets "
"inaccessible.") "inaccessible.")
super(UserKey, self).delete(*args, **kwargs) super().delete(*args, **kwargs)
def is_filled(self): def is_filled(self):
""" """
@ -230,7 +230,7 @@ class SessionKey(models.Model):
# Encrypt master key using the session key # Encrypt master key using the session key
self.cipher = strxor.strxor(self.key, master_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): def get_master_key(self, session_key):
@ -356,7 +356,7 @@ class Secret(ChangeLoggedModel, CustomFieldModel):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.plaintext = kwargs.pop('plaintext', None) self.plaintext = kwargs.pop('plaintext', None)
super(Secret, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def __str__(self): def __str__(self):
if self.role and self.device and self.name: if self.role and self.device and self.name:

View File

@ -51,7 +51,7 @@ class SecretRoleTest(APITestCase):
def setUp(self): 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.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') 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): def setUp(self):
super(SecretTest, self).setUp() super().setUp()
userkey = UserKey(user=self.user, public_key=PUBLIC_KEY) userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
userkey.save() userkey.save()
@ -294,7 +294,7 @@ class GetSessionKeyTest(APITestCase):
def setUp(self): def setUp(self):
super(GetSessionKeyTest, self).setUp() super().setUp()
userkey = UserKey(user=self.user, public_key=PUBLIC_KEY) userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
userkey.save() userkey.save()

View File

@ -228,7 +228,7 @@ class SecretBulkImportView(BulkImportView):
messages.error(request, "No session key found for this user.") messages.error(request, "No session key found for this user.")
if self.master_key is not None: if self.master_key is not None:
return super(SecretBulkImportView, self).post(request) return super().post(request)
else: else:
messages.error(request, "Invalid private key! Unable to encrypt secret data.") messages.error(request, "Invalid private key! Unable to encrypt secret data.")

View File

@ -117,4 +117,4 @@ class TenancyForm(ChainedFieldsMixin, forms.Form):
initial['tenant_group'] = instance.tenant.group initial['tenant_group'] = instance.tenant.group
kwargs['initial'] = initial kwargs['initial'] = initial
super(TenancyForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View File

@ -9,7 +9,7 @@ class TenantGroupTest(APITestCase):
def setUp(self): 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.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') 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): 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.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') self.tenantgroup2 = TenantGroup.objects.create(name='Test Tenant Group 2', slug='test-tenant-group-2')

View File

@ -8,7 +8,7 @@ from .models import Token
class LoginForm(BootstrapMixin, AuthenticationForm): class LoginForm(BootstrapMixin, AuthenticationForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['username'].widget.attrs['placeholder'] = '' self.fields['username'].widget.attrs['placeholder'] = ''
self.fields['password'].widget.attrs['placeholder'] = '' self.fields['password'].widget.attrs['placeholder'] = ''

View File

@ -48,7 +48,7 @@ class Token(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.key: if not self.key:
self.key = self.generate_key() self.key = self.generate_key()
return super(Token, self).save(*args, **kwargs) return super().save(*args, **kwargs)
def generate_key(self): def generate_key(self):
# Generate a random 160-bit key expressed in hexadecimal. # Generate a random 160-bit key expressed in hexadecimal.

View File

@ -132,7 +132,7 @@ class UserKeyEditView(View):
except UserKey.DoesNotExist: except UserKey.DoesNotExist:
self.userkey = UserKey(user=request.user) self.userkey = UserKey(user=request.user)
return super(UserKeyEditView, self).dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
def get(self, request): def get(self, request):
form = UserKeyForm(instance=self.userkey) form = UserKeyForm(instance=self.userkey)

View File

@ -66,7 +66,7 @@ class ChoiceField(Field):
self._choices[k2] = v2 self._choices[k2] = v2
else: else:
self._choices[k] = v self._choices[k] = v
super(ChoiceField, self).__init__(**kwargs) super().__init__(**kwargs)
def to_representation(self, obj): def to_representation(self, obj):
if obj is '': if obj is '':
@ -130,7 +130,7 @@ class SerializedPKRelatedField(PrimaryKeyRelatedField):
def __init__(self, serializer, **kwargs): def __init__(self, serializer, **kwargs):
self.serializer = serializer self.serializer = serializer
self.pk_field = kwargs.pop('pk_field', None) self.pk_field = kwargs.pop('pk_field', None)
super(SerializedPKRelatedField, self).__init__(**kwargs) super().__init__(**kwargs)
def to_representation(self, value): def to_representation(self, value):
return self.serializer(value, context={'request': self.context['request']}).data return self.serializer(value, context={'request': self.context['request']}).data
@ -206,7 +206,7 @@ class ModelViewSet(_ModelViewSet):
if isinstance(kwargs.get('data', {}), list): if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True kwargs['many'] = True
return super(ModelViewSet, self).get_serializer(*args, **kwargs) return super().get_serializer(*args, **kwargs)
def get_serializer_class(self): def get_serializer_class(self):
@ -230,7 +230,7 @@ class FieldChoicesViewSet(ViewSet):
fields = [] fields = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(FieldChoicesViewSet, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Compile a dict of all fields in this view # Compile a dict of all fields in this view
self._fields = OrderedDict() self._fields = OrderedDict()

View File

@ -28,8 +28,8 @@ class ColorField(models.CharField):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
kwargs['max_length'] = 6 kwargs['max_length'] = 6
super(ColorField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def formfield(self, **kwargs): def formfield(self, **kwargs):
kwargs['widget'] = ColorSelect kwargs['widget'] = ColorSelect
return super(ColorField, self).formfield(**kwargs) return super().formfield(**kwargs)

View File

@ -17,7 +17,7 @@ class NullableCharFieldFilter(django_filters.CharFilter):
def filter(self, qs, value): def filter(self, qs, value):
if value != self.null_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}) qs = self.get_method(qs)(**{'{}__isnull'.format(self.name): True})
return qs.distinct() if self.distinct else qs return qs.distinct() if self.distinct else qs
@ -34,4 +34,4 @@ class TagFilter(django_filters.ModelMultipleChoiceFilter):
kwargs.setdefault('conjoined', True) kwargs.setdefault('conjoined', True)
kwargs.setdefault('queryset', Tag.objects.all()) kwargs.setdefault('queryset', Tag.objects.all())
super(TagFilter, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View File

@ -193,7 +193,7 @@ class ColorSelect(forms.Select):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
kwargs['choices'] = add_blank_choice(COLOR_CHOICES) kwargs['choices'] = add_blank_choice(COLOR_CHOICES)
super(ColorSelect, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class BulkEditNullBooleanSelect(forms.NullBooleanSelect): class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
@ -202,7 +202,7 @@ class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(BulkEditNullBooleanSelect, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Override the built-in choice labels # Override the built-in choice labels
self.choices = ( self.choices = (
@ -242,17 +242,17 @@ class ArrayFieldSelectMultiple(SelectWithDisabled, forms.SelectMultiple):
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.delimiter = kwargs.pop('delimiter', ',') self.delimiter = kwargs.pop('delimiter', ',')
super(ArrayFieldSelectMultiple, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def optgroups(self, name, value, attrs=None): def optgroups(self, name, value, attrs=None):
# Split the delimited string of values into a list # Split the delimited string of values into a list
if value: if value:
value = value[0].split(self.delimiter) 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): def value_from_datadict(self, data, files, name):
# Condense the list of selected choices into a delimited string # 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) return self.delimiter.join(data)
@ -279,7 +279,7 @@ class APISelect(SelectWithDisabled):
**kwargs **kwargs
): ):
super(APISelect, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.attrs['class'] = 'api-select' self.attrs['class'] = 'api-select'
self.attrs['api-url'] = '/{}{}'.format(settings.BASE_PATH, api_url.lstrip('/')) # Inject BASE_PATH 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): 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 = { self.attrs = {
'data-key': query_key, 'data-key': query_key,
@ -336,7 +336,7 @@ class CSVDataField(forms.CharField):
self.fields = fields self.fields = fields
self.required_fields = required_fields self.required_fields = required_fields
super(CSVDataField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.strip = False self.strip = False
if not self.label: if not self.label:
@ -382,12 +382,12 @@ class CSVChoiceField(forms.ChoiceField):
""" """
def __init__(self, choices, *args, **kwargs): 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.choices = [(label, label) for value, label in unpack_grouped_choices(choices)]
self.choice_values = {label: value 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): def clean(self, value):
value = super(CSVChoiceField, self).clean(value) value = super().clean(value)
if not value: if not value:
return None return None
if value not in self.choice_values: 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'] Example: 'Gi0/[1-3]' => ['Gi0/1', 'Gi0/2', 'Gi0/3']
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ExpandableNameField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if not self.help_text: if not self.help_text:
self.help_text = 'Alphanumeric ranges are supported for bulk creation.<br />' \ self.help_text = 'Alphanumeric ranges are supported for bulk creation.<br />' \
'Mixed cases and types within a single range are not supported.<br />' \ 'Mixed cases and types within a single range are not supported.<br />' \
@ -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'] 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): def __init__(self, *args, **kwargs):
super(ExpandableIPAddressField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if not self.help_text: if not self.help_text:
self.help_text = 'Specify a numeric range to create multiple IPs.<br />'\ self.help_text = 'Specify a numeric range to create multiple IPs.<br />'\
'Example: <code>192.0.2.[1,5,100-254]/24</code>' 'Example: <code>192.0.2.[1,5,100-254]/24</code>'
@ -450,7 +450,7 @@ class CommentField(forms.CharField):
required = kwargs.pop('required', False) required = kwargs.pop('required', False)
label = kwargs.pop('label', self.default_label) label = kwargs.pop('label', self.default_label)
help_text = kwargs.pop('help_text', self.default_helptext) 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): class FlexibleModelChoiceField(forms.ModelChoiceField):
@ -490,7 +490,7 @@ class ChainedModelChoiceField(forms.ModelChoiceField):
""" """
def __init__(self, chains=None, *args, **kwargs): def __init__(self, chains=None, *args, **kwargs):
self.chains = chains self.chains = chains
super(ChainedModelChoiceField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class ChainedModelMultipleChoiceField(forms.ModelMultipleChoiceField): class ChainedModelMultipleChoiceField(forms.ModelMultipleChoiceField):
@ -499,7 +499,7 @@ class ChainedModelMultipleChoiceField(forms.ModelMultipleChoiceField):
""" """
def __init__(self, chains=None, *args, **kwargs): def __init__(self, chains=None, *args, **kwargs):
self.chains = chains self.chains = chains
super(ChainedModelMultipleChoiceField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class SlugField(forms.SlugField): class SlugField(forms.SlugField):
@ -509,7 +509,7 @@ class SlugField(forms.SlugField):
def __init__(self, slug_source='name', *args, **kwargs): def __init__(self, slug_source='name', *args, **kwargs):
label = kwargs.pop('label', "Slug") label = kwargs.pop('label', "Slug")
help_text = kwargs.pop('help_text', "URL-friendly unique shorthand") 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 self.widget.attrs['slug-source'] = slug_source
@ -536,10 +536,10 @@ class FilterChoiceFieldMixin(object):
kwargs['required'] = False kwargs['required'] = False
if 'widget' not in kwargs: if 'widget' not in kwargs:
kwargs['widget'] = forms.SelectMultiple(attrs={'size': 6}) kwargs['widget'] = forms.SelectMultiple(attrs={'size': 6})
super(FilterChoiceFieldMixin, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def label_from_instance(self, obj): 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'): if hasattr(obj, 'filter_count'):
return '{} ({})'.format(label, obj.filter_count) return '{} ({})'.format(label, obj.filter_count)
return label return label
@ -582,7 +582,7 @@ class AnnotatedMultipleChoiceField(forms.MultipleChoiceField):
self.annotate_field = annotate_field self.annotate_field = annotate_field
self.static_choices = unpack_grouped_choices(choices) 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): 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. Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text.
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(JSONField, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if not self.help_text: if not self.help_text:
self.help_text = 'Enter context data in <a href="https://json.org/">JSON</a> format.' self.help_text = 'Enter context data in <a href="https://json.org/">JSON</a> format.'
self.widget.attrs['placeholder'] = '' self.widget.attrs['placeholder'] = ''
@ -621,7 +621,7 @@ class BootstrapMixin(forms.BaseForm):
Add the base Bootstrap CSS classes to form elements. Add the base Bootstrap CSS classes to form elements.
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(BootstrapMixin, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
exempt_widgets = [ exempt_widgets = [
forms.CheckboxInput, forms.ClearableFileInput, forms.FileInput, forms.RadioSelect 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. Iterate through all ChainedModelChoiceFields in the form and modify their querysets based on chained fields.
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ChainedFieldsMixin, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
for field_name, field in self.fields.items(): for field_name, field in self.fields.items():
@ -691,7 +691,7 @@ class ComponentForm(BootstrapMixin, forms.Form):
""" """
def __init__(self, parent, *args, **kwargs): def __init__(self, parent, *args, **kwargs):
self.parent = parent self.parent = parent
super(ComponentForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def get_iterative_data(self, iteration): def get_iterative_data(self, iteration):
return {} return {}
@ -702,7 +702,7 @@ class BulkEditForm(forms.Form):
Base form for editing multiple objects in bulk Base form for editing multiple objects in bulk
""" """
def __init__(self, model, parent_obj=None, *args, **kwargs): def __init__(self, model, parent_obj=None, *args, **kwargs):
super(BulkEditForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.model = model self.model = model
self.parent_obj = parent_obj self.parent_obj = parent_obj
self.nullable_fields = [] self.nullable_fields = []

View File

@ -15,7 +15,7 @@ class NaturalOrderingManager(Manager):
def get_queryset(self): def get_queryset(self):
queryset = super(NaturalOrderingManager, self).get_queryset() queryset = super().get_queryset()
db_table = self.model._meta.db_table db_table = self.model._meta.db_table
db_field = self.natural_order_field db_field = self.natural_order_field

View File

@ -7,7 +7,7 @@ class EnhancedPaginator(Paginator):
def __init__(self, object_list, per_page, **kwargs): def __init__(self, object_list, per_page, **kwargs):
if not isinstance(per_page, int) or per_page < 1: if not isinstance(per_page, int) or per_page < 1:
per_page = getattr(settings, 'PAGINATE_COUNT', 50) 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): def _get_page(self, *args, **kwargs):
return EnhancedPage(*args, **kwargs) return EnhancedPage(*args, **kwargs)

View File

@ -5,7 +5,7 @@ from django.db.models.sql.compiler import SQLCompiler
class NullsFirstSQLCompiler(SQLCompiler): class NullsFirstSQLCompiler(SQLCompiler):
def get_order_by(self): def get_order_by(self):
result = super(NullsFirstSQLCompiler, self).get_order_by() result = super().get_order_by()
if result: if result:
return [(expr, (sql + ' NULLS FIRST', params, is_ref)) for (expr, (sql, params, is_ref)) in result] return [(expr, (sql + ' NULLS FIRST', params, is_ref)) for (expr, (sql, params, is_ref)) in result]
return result return result
@ -28,5 +28,5 @@ class NullsFirstQuerySet(models.QuerySet):
""" """
def __init__(self, model=None, query=None, using=None, hints=None): 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) self.query = query or NullsFirstQuery(self.model)

View File

@ -7,7 +7,7 @@ class BaseTable(tables.Table):
Default table for object lists Default table for object lists
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(BaseTable, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Set default empty_text if none was provided # Set default empty_text if none was provided
if self.empty_text is None: if self.empty_text is None:
@ -26,7 +26,7 @@ class ToggleColumn(tables.CheckBoxColumn):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
default = kwargs.pop('default', '') default = kwargs.pop('default', '')
visible = kwargs.pop('visible', False) visible = kwargs.pop('visible', False)
super(ToggleColumn, self).__init__(*args, default=default, visible=visible, **kwargs) super().__init__(*args, default=default, visible=visible, **kwargs)
@property @property
def header(self): def header(self):

View File

@ -200,13 +200,13 @@ class ClusterAddDevicesForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
self.cluster = cluster self.cluster = cluster
super(ClusterAddDevicesForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['devices'].choices = [] self.fields['devices'].choices = []
def clean(self): 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 the Cluster is assigned to a Site, all Devices must be assigned to that Site.
if self.cluster.site is not None: if self.cluster.site is not None:
@ -266,7 +266,7 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldForm):
initial['cluster_group'] = instance.cluster.group initial['cluster_group'] = instance.cluster.group
kwargs['initial'] = initial kwargs['initial'] = initial
super(VirtualMachineForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if self.instance.pk: if self.instance.pk:
@ -443,7 +443,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm):
def clean(self): def clean(self):
super(InterfaceForm, self).clean() super().clean()
# Validate VLAN assignments # Validate VLAN assignments
tagged_vlans = self.cleaned_data['tagged_vlans'] tagged_vlans = self.cleaned_data['tagged_vlans']
@ -474,7 +474,7 @@ class InterfaceCreateForm(ComponentForm):
kwargs['initial'] = kwargs.get('initial', {}).copy() kwargs['initial'] = kwargs.get('initial', {}).copy()
kwargs['initial'].update({'enabled': True}) kwargs['initial'].update({'enabled': True})
super(InterfaceCreateForm, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm): class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):

View File

@ -13,7 +13,7 @@ class ClusterTypeTest(APITestCase):
def setUp(self): 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.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') 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): 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.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') 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): 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_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') 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): 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_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') 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): def setUp(self):
super(InterfaceTest, self).setUp() super().setUp()
clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1')
cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype) cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype)