mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-15 11:42:52 -06:00
Closes #2614: Simplify calls of super() for Python 3
This commit is contained in:
parent
7d262296e1
commit
bd7aee7c1f
@ -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')
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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'))"
|
||||||
|
|
||||||
|
@ -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 (
|
||||||
|
@ -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')
|
||||||
|
@ -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'])
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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])
|
||||||
|
@ -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',
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
@ -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:
|
||||||
|
@ -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])
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -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')
|
||||||
|
@ -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):
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -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'):
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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()
|
||||||
|
@ -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.")
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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')
|
||||||
|
@ -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'] = ''
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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 = []
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user