Remove restriction enforcement from RestrictedQuerySet

This commit is contained in:
Jeremy Stretch 2020-07-23 12:48:03 -04:00
parent d23f97abc8
commit cb36f9fdb3
39 changed files with 491 additions and 554 deletions

View File

@ -52,7 +52,7 @@ class CircuitTypeViewSet(ModelViewSet):
class CircuitViewSet(CustomFieldModelViewSet): class CircuitViewSet(CustomFieldModelViewSet):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
Prefetch('terminations', queryset=CircuitTermination.objects.unrestricted().prefetch_related( Prefetch('terminations', queryset=CircuitTermination.objects.prefetch_related(
'site', 'connected_endpoint__device' 'site', 'connected_endpoint__device'
)), )),
'type', 'tenant', 'provider', 'type', 'tenant', 'provider',

View File

@ -24,13 +24,13 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='circuits__terminations__site__region', field_name='circuits__terminations__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='circuits__terminations__site__region', field_name='circuits__terminations__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -38,12 +38,12 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='circuits__terminations__site', field_name='circuits__terminations__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site', label='Site',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='circuits__terminations__site__slug', field_name='circuits__terminations__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
@ -78,22 +78,22 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
label='Search', label='Search',
) )
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.unrestricted(), queryset=Provider.objects.all(),
label='Provider (ID)', label='Provider (ID)',
) )
provider = django_filters.ModelMultipleChoiceFilter( provider = django_filters.ModelMultipleChoiceFilter(
field_name='provider__slug', field_name='provider__slug',
queryset=Provider.objects.unrestricted(), queryset=Provider.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Provider (slug)', label='Provider (slug)',
) )
type_id = django_filters.ModelMultipleChoiceFilter( type_id = django_filters.ModelMultipleChoiceFilter(
queryset=CircuitType.objects.unrestricted(), queryset=CircuitType.objects.all(),
label='Circuit type (ID)', label='Circuit type (ID)',
) )
type = django_filters.ModelMultipleChoiceFilter( type = django_filters.ModelMultipleChoiceFilter(
field_name='type__slug', field_name='type__slug',
queryset=CircuitType.objects.unrestricted(), queryset=CircuitType.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Circuit type (slug)', label='Circuit type (slug)',
) )
@ -103,23 +103,23 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site', field_name='terminations__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site__slug', field_name='terminations__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='terminations__site__region', field_name='terminations__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='terminations__site__region', field_name='terminations__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -150,16 +150,16 @@ class CircuitTerminationFilterSet(BaseFilterSet):
label='Search', label='Search',
) )
circuit_id = django_filters.ModelMultipleChoiceFilter( circuit_id = django_filters.ModelMultipleChoiceFilter(
queryset=Circuit.objects.unrestricted(), queryset=Circuit.objects.all(),
label='Circuit', label='Circuit',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )

View File

@ -238,7 +238,7 @@ class Circuit(ChangeLoggedModel, CustomFieldModel):
return self.STATUS_CLASS_MAP.get(self.status) return self.STATUS_CLASS_MAP.get(self.status)
def _get_termination(self, side): def _get_termination(self, side):
for ct in self.terminations.unrestricted(): for ct in self.terminations.all():
if ct.term_side == side: if ct.term_side == side:
return ct return ct
return None return None
@ -336,7 +336,7 @@ class CircuitTermination(CableTermination):
def get_peer_termination(self): def get_peer_termination(self):
peer_side = 'Z' if self.term_side == 'A' else 'A' peer_side = 'Z' if self.term_side == 'A' else 'A'
try: try:
return CircuitTermination.objects.unrestricted().prefetch_related('site').get( return CircuitTermination.objects.prefetch_related('site').get(
circuit=self.circuit, circuit=self.circuit,
term_side=peer_side term_side=peer_side
) )

View File

@ -10,7 +10,7 @@ def update_circuit(instance, **kwargs):
""" """
When a CircuitTermination has been modified, update the last_updated time of its parent Circuit. When a CircuitTermination has been modified, update the last_updated time of its parent Circuit.
""" """
circuits = Circuit.objects.unrestricted().filter(pk=instance.circuit_id) circuits = Circuit.objects.filter(pk=instance.circuit_id)
time = timezone.now() time = timezone.now()
for circuit in circuits: for circuit in circuits:
circuit.last_updated = time circuit.last_updated = time

View File

@ -51,7 +51,7 @@ class ProviderTest(APIViewTestCases.APIViewTestCase):
""" """
Test retrieval of Graphs assigned to Providers. Test retrieval of Graphs assigned to Providers.
""" """
provider = self.model.objects.unrestricted().first() provider = self.model.objects.first()
ct = ContentType.objects.get(app_label='circuits', model='provider') ct = ContentType.objects.get(app_label='circuits', model='provider')
graphs = ( graphs = (
Graph(type=ct, name='Graph 1', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=1'), Graph(type=ct, name='Graph 1', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=1'),

View File

@ -8,7 +8,7 @@ from tenancy.models import Tenant, TenantGroup
class ProviderTestCase(TestCase): class ProviderTestCase(TestCase):
queryset = Provider.objects.unrestricted() queryset = Provider.objects.all()
filterset = ProviderFilterSet filterset = ProviderFilterSet
@classmethod @classmethod
@ -75,14 +75,14 @@ class ProviderTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
@ -90,7 +90,7 @@ class ProviderTestCase(TestCase):
class CircuitTypeTestCase(TestCase): class CircuitTypeTestCase(TestCase):
queryset = CircuitType.objects.unrestricted() queryset = CircuitType.objects.all()
filterset = CircuitTypeFilterSet filterset = CircuitTypeFilterSet
@classmethod @classmethod
@ -116,7 +116,7 @@ class CircuitTypeTestCase(TestCase):
class CircuitTestCase(TestCase): class CircuitTestCase(TestCase):
queryset = Circuit.objects.unrestricted() queryset = Circuit.objects.all()
filterset = CircuitFilterSet filterset = CircuitFilterSet
@classmethod @classmethod
@ -199,14 +199,14 @@ class CircuitTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_provider(self): def test_provider(self):
provider = Provider.objects.unrestricted().first() provider = Provider.objects.first()
params = {'provider_id': [provider.pk]} params = {'provider_id': [provider.pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
params = {'provider': [provider.slug]} params = {'provider': [provider.slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_type(self): def test_type(self):
circuit_type = CircuitType.objects.unrestricted().first() circuit_type = CircuitType.objects.first()
params = {'type_id': [circuit_type.pk]} params = {'type_id': [circuit_type.pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
params = {'type': [circuit_type.slug]} params = {'type': [circuit_type.slug]}
@ -217,28 +217,28 @@ class CircuitTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -246,7 +246,7 @@ class CircuitTestCase(TestCase):
class CircuitTerminationTestCase(TestCase): class CircuitTerminationTestCase(TestCase):
queryset = CircuitTermination.objects.unrestricted() queryset = CircuitTermination.objects.all()
filterset = CircuitTerminationFilterSet filterset = CircuitTerminationFilterSet
@classmethod @classmethod
@ -303,12 +303,12 @@ class CircuitTerminationTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_circuit_id(self): def test_circuit_id(self):
circuits = Circuit.objects.unrestricted()[:2] circuits = Circuit.objects.all()[:2]
params = {'circuit_id': [circuits[0].pk, circuits[1].pk]} params = {'circuit_id': [circuits[0].pk, circuits[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}

View File

@ -120,8 +120,7 @@ class CircuitTypeBulkDeleteView(BulkDeleteView):
class CircuitListView(ObjectListView): class CircuitListView(ObjectListView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
Prefetch('terminations', CircuitTermination.objects.unrestricted()), 'provider', 'type', 'tenant', 'terminations'
'provider', 'type', 'tenant'
).annotate_sites() ).annotate_sites()
filterset = filters.CircuitFilterSet filterset = filters.CircuitFilterSet
filterset_form = forms.CircuitFilterForm filterset_form = forms.CircuitFilterForm
@ -175,8 +174,7 @@ class CircuitBulkImportView(BulkImportView):
class CircuitBulkEditView(BulkEditView): class CircuitBulkEditView(BulkEditView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
Prefetch('terminations', CircuitTermination.objects.unrestricted()), 'provider', 'type', 'tenant', 'terminations'
'provider', 'type', 'tenant'
) )
filterset = filters.CircuitFilterSet filterset = filters.CircuitFilterSet
table = tables.CircuitTable table = tables.CircuitTable
@ -185,8 +183,7 @@ class CircuitBulkEditView(BulkEditView):
class CircuitBulkDeleteView(BulkDeleteView): class CircuitBulkDeleteView(BulkDeleteView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
Prefetch('terminations', CircuitTermination.objects.unrestricted()), 'provider', 'type', 'tenant', 'terminations'
'provider', 'type', 'tenant'
) )
filterset = filters.CircuitFilterSet filterset = filters.CircuitFilterSet
table = tables.CircuitTable table = tables.CircuitTable

View File

@ -682,7 +682,7 @@ class ConnectedDeviceViewSet(ViewSet):
# Determine local interface from peer interface's connection # Determine local interface from peer interface's connection
peer_interface = get_object_or_404( peer_interface = get_object_or_404(
Interface.objects.unrestricted(), Interface.objects.all(),
device__name=peer_device_name, device__name=peer_device_name,
name=peer_interface_name name=peer_interface_name
) )

View File

@ -62,12 +62,12 @@ __all__ = (
class RegionFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class RegionFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
label='Parent region (ID)', label='Parent region (ID)',
) )
parent = django_filters.ModelMultipleChoiceFilter( parent = django_filters.ModelMultipleChoiceFilter(
field_name='parent__slug', field_name='parent__slug',
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Parent region (slug)', label='Parent region (slug)',
) )
@ -87,13 +87,13 @@ class SiteFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat
null_value=None null_value=None
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='region', field_name='region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='region', field_name='region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -131,35 +131,35 @@ class SiteFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat
class RackGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class RackGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
label='Rack group (ID)', label='Rack group (ID)',
) )
parent = django_filters.ModelMultipleChoiceFilter( parent = django_filters.ModelMultipleChoiceFilter(
field_name='parent__slug', field_name='parent__slug',
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Rack group (slug)', label='Rack group (slug)',
) )
@ -182,36 +182,36 @@ class RackFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='group', field_name='group',
lookup_expr='in', lookup_expr='in',
label='Rack group (ID)', label='Rack group (ID)',
) )
group = TreeNodeMultipleChoiceFilter( group = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='group', field_name='group',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -222,12 +222,12 @@ class RackFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat
null_value=None null_value=None
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=RackRole.objects.unrestricted(), queryset=RackRole.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug', field_name='role__slug',
queryset=RackRole.objects.unrestricted(), queryset=RackRole.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
@ -261,28 +261,28 @@ class RackReservationFilterSet(BaseFilterSet, TenancyFilterSet):
label='Search', label='Search',
) )
rack_id = django_filters.ModelMultipleChoiceFilter( rack_id = django_filters.ModelMultipleChoiceFilter(
queryset=Rack.objects.unrestricted(), queryset=Rack.objects.all(),
label='Rack (ID)', label='Rack (ID)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='rack__site', field_name='rack__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='rack__site__slug', field_name='rack__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='rack__group', field_name='rack__group',
lookup_expr='in', lookup_expr='in',
label='Rack group (ID)', label='Rack group (ID)',
) )
group = TreeNodeMultipleChoiceFilter( group = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='rack__group', field_name='rack__group',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -328,12 +328,12 @@ class DeviceTypeFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFil
label='Search', label='Search',
) )
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
label='Manufacturer (ID)', label='Manufacturer (ID)',
) )
manufacturer = django_filters.ModelMultipleChoiceFilter( manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name='manufacturer__slug', field_name='manufacturer__slug',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Manufacturer (slug)', label='Manufacturer (slug)',
) )
@ -410,7 +410,7 @@ class DeviceTypeFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFil
class DeviceTypeComponentFilterSet(NameSlugSearchFilterSet): class DeviceTypeComponentFilterSet(NameSlugSearchFilterSet):
devicetype_id = django_filters.ModelMultipleChoiceFilter( devicetype_id = django_filters.ModelMultipleChoiceFilter(
queryset=DeviceType.objects.unrestricted(), queryset=DeviceType.objects.all(),
field_name='device_type_id', field_name='device_type_id',
label='Device type (ID)', label='Device type (ID)',
) )
@ -482,12 +482,12 @@ class DeviceRoleFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
class PlatformFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class PlatformFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
field_name='manufacturer', field_name='manufacturer',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
label='Manufacturer (ID)', label='Manufacturer (ID)',
) )
manufacturer = django_filters.ModelMultipleChoiceFilter( manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name='manufacturer__slug', field_name='manufacturer__slug',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Manufacturer (slug)', label='Manufacturer (slug)',
) )
@ -510,81 +510,81 @@ class DeviceFilterSet(
) )
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
field_name='device_type__manufacturer', field_name='device_type__manufacturer',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
label='Manufacturer (ID)', label='Manufacturer (ID)',
) )
manufacturer = django_filters.ModelMultipleChoiceFilter( manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name='device_type__manufacturer__slug', field_name='device_type__manufacturer__slug',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Manufacturer (slug)', label='Manufacturer (slug)',
) )
device_type_id = django_filters.ModelMultipleChoiceFilter( device_type_id = django_filters.ModelMultipleChoiceFilter(
queryset=DeviceType.objects.unrestricted(), queryset=DeviceType.objects.all(),
label='Device type (ID)', label='Device type (ID)',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
field_name='device_role_id', field_name='device_role_id',
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='device_role__slug', field_name='device_role__slug',
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
platform_id = django_filters.ModelMultipleChoiceFilter( platform_id = django_filters.ModelMultipleChoiceFilter(
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
label='Platform (ID)', label='Platform (ID)',
) )
platform = django_filters.ModelMultipleChoiceFilter( platform = django_filters.ModelMultipleChoiceFilter(
field_name='platform__slug', field_name='platform__slug',
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Platform (slug)', label='Platform (slug)',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
rack_group_id = TreeNodeMultipleChoiceFilter( rack_group_id = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='rack__group', field_name='rack__group',
lookup_expr='in', lookup_expr='in',
label='Rack group (ID)', label='Rack group (ID)',
) )
rack_id = django_filters.ModelMultipleChoiceFilter( rack_id = django_filters.ModelMultipleChoiceFilter(
field_name='rack', field_name='rack',
queryset=Rack.objects.unrestricted(), queryset=Rack.objects.all(),
label='Rack (ID)', label='Rack (ID)',
) )
cluster_id = django_filters.ModelMultipleChoiceFilter( cluster_id = django_filters.ModelMultipleChoiceFilter(
queryset=Cluster.objects.unrestricted(), queryset=Cluster.objects.all(),
label='VM cluster (ID)', label='VM cluster (ID)',
) )
model = django_filters.ModelMultipleChoiceFilter( model = django_filters.ModelMultipleChoiceFilter(
field_name='device_type__slug', field_name='device_type__slug',
queryset=DeviceType.objects.unrestricted(), queryset=DeviceType.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Device model (slug)', label='Device model (slug)',
) )
@ -609,7 +609,7 @@ class DeviceFilterSet(
) )
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_chassis', field_name='virtual_chassis',
queryset=VirtualChassis.objects.unrestricted(), queryset=VirtualChassis.objects.all(),
label='Virtual chassis (ID)', label='Virtual chassis (ID)',
) )
virtual_chassis_member = django_filters.BooleanFilter( virtual_chassis_member = django_filters.BooleanFilter(
@ -707,13 +707,13 @@ class DeviceComponentFilterSet(django_filters.FilterSet):
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='device__site__region', field_name='device__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='device__site__region', field_name='device__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -721,22 +721,22 @@ class DeviceComponentFilterSet(django_filters.FilterSet):
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='device__site', field_name='device__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='device__site__slug', field_name='device__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
device_id = django_filters.ModelMultipleChoiceFilter( device_id = django_filters.ModelMultipleChoiceFilter(
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
label='Device (ID)', label='Device (ID)',
) )
device = django_filters.ModelMultipleChoiceFilter( device = django_filters.ModelMultipleChoiceFilter(
field_name='device__name', field_name='device__name',
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
label='Device (name)', label='Device (name)',
) )
@ -844,7 +844,7 @@ class InterfaceFilterSet(BaseFilterSet, DeviceComponentFilterSet):
) )
lag_id = django_filters.ModelMultipleChoiceFilter( lag_id = django_filters.ModelMultipleChoiceFilter(
field_name='lag', field_name='lag',
queryset=Interface.objects.unrestricted(), queryset=Interface.objects.all(),
label='LAG interface (ID)', label='LAG interface (ID)',
) )
mac_address = MultiValueMACAddressFilter() mac_address = MultiValueMACAddressFilter()
@ -951,13 +951,13 @@ class InventoryItemFilterSet(BaseFilterSet, DeviceComponentFilterSet):
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='device__site__region', field_name='device__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='device__site__region', field_name='device__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -965,35 +965,35 @@ class InventoryItemFilterSet(BaseFilterSet, DeviceComponentFilterSet):
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='device__site', field_name='device__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='device__site__slug', field_name='device__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
device_id = django_filters.ModelChoiceFilter( device_id = django_filters.ModelChoiceFilter(
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
label='Device (ID)', label='Device (ID)',
) )
device = django_filters.ModelChoiceFilter( device = django_filters.ModelChoiceFilter(
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
label='Device (name)', label='Device (name)',
) )
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=InventoryItem.objects.unrestricted(), queryset=InventoryItem.objects.all(),
label='Parent inventory item (ID)', label='Parent inventory item (ID)',
) )
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
label='Manufacturer (ID)', label='Manufacturer (ID)',
) )
manufacturer = django_filters.ModelMultipleChoiceFilter( manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name='manufacturer__slug', field_name='manufacturer__slug',
queryset=Manufacturer.objects.unrestricted(), queryset=Manufacturer.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Manufacturer (slug)', label='Manufacturer (slug)',
) )
@ -1024,13 +1024,13 @@ class VirtualChassisFilterSet(BaseFilterSet):
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='master__site__region', field_name='master__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='master__site__region', field_name='master__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -1038,23 +1038,23 @@ class VirtualChassisFilterSet(BaseFilterSet):
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='master__site', field_name='master__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='master__site__slug', field_name='master__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
tenant_id = django_filters.ModelMultipleChoiceFilter( tenant_id = django_filters.ModelMultipleChoiceFilter(
field_name='master__tenant', field_name='master__tenant',
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
label='Tenant (ID)', label='Tenant (ID)',
) )
tenant = django_filters.ModelMultipleChoiceFilter( tenant = django_filters.ModelMultipleChoiceFilter(
field_name='master__tenant__slug', field_name='master__tenant__slug',
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Tenant (slug)', label='Tenant (slug)',
) )
@ -1240,30 +1240,30 @@ class PowerPanelFilterSet(BaseFilterSet):
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
rack_group_id = TreeNodeMultipleChoiceFilter( rack_group_id = TreeNodeMultipleChoiceFilter(
queryset=RackGroup.objects.unrestricted(), queryset=RackGroup.objects.all(),
field_name='rack_group', field_name='rack_group',
lookup_expr='in', lookup_expr='in',
label='Rack group (ID)', label='Rack group (ID)',
@ -1289,13 +1289,13 @@ class PowerFeedFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='power_panel__site__region', field_name='power_panel__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='power_panel__site__region', field_name='power_panel__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -1303,22 +1303,22 @@ class PowerFeedFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='power_panel__site', field_name='power_panel__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='power_panel__site__slug', field_name='power_panel__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
power_panel_id = django_filters.ModelMultipleChoiceFilter( power_panel_id = django_filters.ModelMultipleChoiceFilter(
queryset=PowerPanel.objects.unrestricted(), queryset=PowerPanel.objects.all(),
label='Power panel (ID)', label='Power panel (ID)',
) )
rack_id = django_filters.ModelMultipleChoiceFilter( rack_id = django_filters.ModelMultipleChoiceFilter(
field_name='rack', field_name='rack',
queryset=Rack.objects.unrestricted(), queryset=Rack.objects.all(),
label='Rack (ID)', label='Rack (ID)',
) )
tag = TagFilter() tag = TagFilter()

View File

@ -581,7 +581,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
if self.pk: if self.pk:
# Validate that Rack is tall enough to house the installed Devices # Validate that Rack is tall enough to house the installed Devices
top_device = Device.objects.unrestricted().filter( top_device = Device.objects.filter(
rack=self rack=self
).exclude( ).exclude(
position__isnull=True position__isnull=True
@ -606,13 +606,13 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
# Record the original site assignment for this rack. # Record the original site assignment for this rack.
_site_id = None _site_id = None
if self.pk: if self.pk:
_site_id = Rack.objects.unrestricted().get(pk=self.pk).site_id _site_id = Rack.objects.get(pk=self.pk).site_id
super().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:
devices = Device.objects.unrestricted().filter(rack=self) devices = Device.objects.filter(rack=self)
for device in devices: for device in devices:
device.site = self.site device.site = self.site
device.save() device.save()
@ -674,7 +674,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
# Add devices to rack units list # Add devices to rack units list
if self.pk: if self.pk:
queryset = Device.objects.unrestricted().prefetch_related( queryset = Device.objects.prefetch_related(
'device_type', 'device_type',
'device_type__manufacturer', 'device_type__manufacturer',
'device_role' 'device_role'
@ -712,7 +712,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
:param exclude: List of devices IDs to exclude (useful when moving a device within a rack) :param exclude: List of devices IDs to exclude (useful when moving a device within a rack)
""" """
# Gather all devices which consume U space within the rack # Gather all devices which consume U space within the rack
devices = self.devices.unrestricted().prefetch_related('device_type').filter(position__gte=1) devices = self.devices.prefetch_related('device_type').filter(position__gte=1)
if exclude is not None: if exclude is not None:
devices = devices.exclude(pk__in=exclude) devices = devices.exclude(pk__in=exclude)
@ -742,7 +742,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
Return a dictionary mapping all reserved units within the rack to their reservation. Return a dictionary mapping all reserved units within the rack to their reservation.
""" """
reserved_units = {} reserved_units = {}
for r in self.reservations.unrestricted(): for r in self.reservations.all():
for u in r.units: for u in r.units:
reserved_units[u] = r reserved_units[u] = r
return reserved_units return reserved_units
@ -796,7 +796,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
""" """
Determine the utilization rate of power in the rack and return it as a percentage. Determine the utilization rate of power in the rack and return it as a percentage.
""" """
power_stats = PowerFeed.objects.unrestricted().filter( power_stats = PowerFeed.objects.filter(
rack=self rack=self
).annotate( ).annotate(
allocated_draw_total=Sum('connected_endpoint__poweroutlets__connected_endpoint__allocated_draw'), allocated_draw_total=Sum('connected_endpoint__poweroutlets__connected_endpoint__allocated_draw'),
@ -1130,7 +1130,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel):
# room to expand within their racks. This validation will impose a very high performance penalty when there are # room to expand within their racks. This validation will impose a very high performance penalty when there are
# many instances to check, but increasing the u_height of a DeviceType should be a very rare occurrence. # many instances to check, but increasing the u_height of a DeviceType should be a very rare occurrence.
if self.pk and self.u_height > self._original_u_height: if self.pk and self.u_height > self._original_u_height:
for d in Device.objects.unrestricted().filter(device_type=self, position__isnull=False): for d in Device.objects.filter(device_type=self, position__isnull=False):
face_required = None if self.is_full_depth else d.face face_required = None if self.is_full_depth else d.face
u_available = d.rack.get_available_units( u_available = d.rack.get_available_units(
u_height=self.u_height, u_height=self.u_height,
@ -1145,7 +1145,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel):
# If modifying the height of an existing DeviceType to 0U, check for any instances assigned to a rack position. # If modifying the height of an existing DeviceType to 0U, check for any instances assigned to a rack position.
elif self.pk and self._original_u_height > 0 and self.u_height == 0: elif self.pk and self._original_u_height > 0 and self.u_height == 0:
racked_instance_count = Device.objects.unrestricted().filter( racked_instance_count = Device.objects.filter(
device_type=self, device_type=self,
position__isnull=False position__isnull=False
).count() ).count()
@ -1501,7 +1501,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
# because Django does not consider two NULL fields to be equal, and thus will not trigger a violation # because Django does not consider two NULL fields to be equal, and thus will not trigger a violation
# of the uniqueness constraint without manual intervention. # of the uniqueness constraint without manual intervention.
if self.name and self.tenant is None: if self.name and self.tenant is None:
if Device.objects.unrestricted().exclude(pk=self.pk).filter( if Device.objects.exclude(pk=self.pk).filter(
name=self.name, name=self.name,
site=self.site, site=self.site,
tenant__isnull=True tenant__isnull=True
@ -1635,32 +1635,32 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
# 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:
ConsolePort.objects.bulk_create( ConsolePort.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.consoleporttemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.consoleporttemplates.all()]
) )
ConsoleServerPort.objects.bulk_create( ConsoleServerPort.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.consoleserverporttemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.consoleserverporttemplates.all()]
) )
PowerPort.objects.bulk_create( PowerPort.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.powerporttemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.powerporttemplates.all()]
) )
PowerOutlet.objects.bulk_create( PowerOutlet.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.poweroutlettemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.poweroutlettemplates.all()]
) )
Interface.objects.bulk_create( Interface.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.interfacetemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.interfacetemplates.all()]
) )
RearPort.objects.bulk_create( RearPort.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.rearporttemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.rearporttemplates.all()]
) )
FrontPort.objects.bulk_create( FrontPort.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.frontporttemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.frontporttemplates.all()]
) )
DeviceBay.objects.bulk_create( DeviceBay.objects.bulk_create(
[x.instantiate(self) for x in self.device_type.devicebaytemplates.unrestricted()] [x.instantiate(self) for x in self.device_type.devicebaytemplates.all()]
) )
# Update Site and Rack assignment for any child Devices # Update Site and Rack assignment for any child Devices
devices = Device.objects.unrestricted().filter(parent_bay__device=self) devices = Device.objects.filter(parent_bay__device=self)
for device in devices: for device in devices:
device.site = self.site device.site = self.site
device.rack = self.rack device.rack = self.rack
@ -1730,7 +1730,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
filter = Q(device=self) filter = Q(device=self)
if self.virtual_chassis and self.virtual_chassis.master == self: if self.virtual_chassis and self.virtual_chassis.master == self:
filter |= Q(device__virtual_chassis=self.virtual_chassis, mgmt_only=False) filter |= Q(device__virtual_chassis=self.virtual_chassis, mgmt_only=False)
return Interface.objects.unrestricted().filter(filter) return Interface.objects.filter(filter)
def get_cables(self, pk_list=False): def get_cables(self, pk_list=False):
""" """
@ -1751,7 +1751,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
""" """
Return the set of child Devices installed in DeviceBays within this Device. Return the set of child Devices installed in DeviceBays within this Device.
""" """
return Device.objects.unrestricted().filter(parent_bay__device=self.pk) return Device.objects.filter(parent_bay__device=self.pk)
def get_status_class(self): def get_status_class(self):
return self.STATUS_CLASS_MAP.get(self.status) return self.STATUS_CLASS_MAP.get(self.status)
@ -1808,7 +1808,7 @@ class VirtualChassis(ChangeLoggedModel):
def delete(self, *args, **kwargs): def delete(self, *args, **kwargs):
# Check for LAG interfaces split across member chassis # Check for LAG interfaces split across member chassis
interfaces = Interface.objects.unrestricted().filter( interfaces = Interface.objects.filter(
device__in=self.members.all(), device__in=self.members.all(),
lag__isnull=False lag__isnull=False
).exclude( ).exclude(
@ -2183,7 +2183,7 @@ class Cable(ChangeLoggedModel):
if not hasattr(self, 'termination_a_type'): if not hasattr(self, 'termination_a_type'):
raise ValidationError('Termination A type has not been specified') raise ValidationError('Termination A type has not been specified')
try: try:
self.termination_a_type.model_class().objects.unrestricted().get(pk=self.termination_a_id) self.termination_a_type.model_class().objects.get(pk=self.termination_a_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise ValidationError({ raise ValidationError({
'termination_a': 'Invalid ID for type {}'.format(self.termination_a_type) 'termination_a': 'Invalid ID for type {}'.format(self.termination_a_type)
@ -2193,7 +2193,7 @@ class Cable(ChangeLoggedModel):
if not hasattr(self, 'termination_b_type'): if not hasattr(self, 'termination_b_type'):
raise ValidationError('Termination B type has not been specified') raise ValidationError('Termination B type has not been specified')
try: try:
self.termination_b_type.model_class().objects.unrestricted().get(pk=self.termination_b_id) self.termination_b_type.model_class().objects.get(pk=self.termination_b_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise ValidationError({ raise ValidationError({
'termination_b': 'Invalid ID for type {}'.format(self.termination_b_type) 'termination_b': 'Invalid ID for type {}'.format(self.termination_b_type)

View File

@ -38,11 +38,11 @@ class Mixins:
""" """
Test tracing a device component's attached cable. Test tracing a device component's attached cable.
""" """
obj = self.model.objects.unrestricted().first() obj = self.model.objects.first()
peer_device = Device.objects.create( peer_device = Device.objects.create(
site=Site.objects.unrestricted().first(), site=Site.objects.first(),
device_type=DeviceType.objects.unrestricted().first(), device_type=DeviceType.objects.first(),
device_role=DeviceRole.objects.unrestricted().first(), device_role=DeviceRole.objects.first(),
name='Peer Device' name='Peer Device'
) )
if self.peer_termination_type is None: if self.peer_termination_type is None:
@ -146,7 +146,7 @@ class SiteTest(APIViewTestCases.APIViewTestCase):
Graph.objects.bulk_create(graphs) Graph.objects.bulk_create(graphs)
self.add_permissions('dcim.view_site') self.add_permissions('dcim.view_site')
url = reverse('dcim-api:site-graphs', kwargs={'pk': Site.objects.unrestricted().unrestricted().first().pk}) url = reverse('dcim-api:site-graphs', kwargs={'pk': Site.objects.first().pk})
response = self.client.get(url, **self.header) response = self.client.get(url, **self.header)
self.assertEqual(len(response.data), 3) self.assertEqual(len(response.data), 3)
@ -285,7 +285,7 @@ class RackTest(APIViewTestCases.APIViewTestCase):
""" """
GET a single rack elevation. GET a single rack elevation.
""" """
rack = Rack.objects.unrestricted().first() rack = Rack.objects.first()
self.add_permissions('dcim.view_rack') self.add_permissions('dcim.view_rack')
url = reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk}) url = reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk})
@ -305,7 +305,7 @@ class RackTest(APIViewTestCases.APIViewTestCase):
""" """
GET a single rack elevation in SVG format. GET a single rack elevation in SVG format.
""" """
rack = Rack.objects.unrestricted().first() rack = Rack.objects.first()
self.add_permissions('dcim.view_rack') self.add_permissions('dcim.view_rack')
url = '{}?render=svg'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk})) url = '{}?render=svg'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk}))
@ -916,7 +916,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase):
Graph.objects.bulk_create(graphs) Graph.objects.bulk_create(graphs)
self.add_permissions('dcim.view_device') self.add_permissions('dcim.view_device')
url = reverse('dcim-api:device-graphs', kwargs={'pk': Device.objects.unrestricted().first().pk}) url = reverse('dcim-api:device-graphs', kwargs={'pk': Device.objects.first().pk})
response = self.client.get(url, **self.header) response = self.client.get(url, **self.header)
self.assertEqual(len(response.data), 3) self.assertEqual(len(response.data), 3)
@ -946,7 +946,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase):
""" """
Check that creating a device with a duplicate name within a site fails. Check that creating a device with a duplicate name within a site fails.
""" """
device = Device.objects.unrestricted().first() device = Device.objects.first()
data = { data = {
'device_type': device.device_type.pk, 'device_type': device.device_type.pk,
'device_role': device.device_role.pk, 'device_role': device.device_role.pk,
@ -1173,7 +1173,7 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase
Graph.objects.bulk_create(graphs) Graph.objects.bulk_create(graphs)
self.add_permissions('dcim.view_interface') self.add_permissions('dcim.view_interface')
url = reverse('dcim-api:interface-graphs', kwargs={'pk': Interface.objects.unrestricted().first().pk}) url = reverse('dcim-api:interface-graphs', kwargs={'pk': Interface.objects.first().pk})
response = self.client.get(url, **self.header) response = self.client.get(url, **self.header)
self.assertEqual(len(response.data), 3) self.assertEqual(len(response.data), 3)
@ -1483,11 +1483,11 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Cable.objects.unrestricted().count(), 1) self.assertEqual(Cable.objects.count(), 1)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
consoleport1 = ConsolePort.objects.unrestricted().get(pk=consoleport1.pk) consoleport1 = ConsolePort.objects.get(pk=consoleport1.pk)
consoleserverport1 = ConsoleServerPort.objects.unrestricted().get(pk=consoleserverport1.pk) consoleserverport1 = ConsoleServerPort.objects.get(pk=consoleserverport1.pk)
self.assertEqual(cable.termination_a, consoleport1) self.assertEqual(cable.termination_a, consoleport1)
self.assertEqual(cable.termination_b, consoleserverport1) self.assertEqual(cable.termination_b, consoleserverport1)
@ -1548,12 +1548,12 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_a.cable, cable)
self.assertEqual(cable.termination_b.cable, cable) self.assertEqual(cable.termination_b.cable, cable)
consoleport1 = ConsolePort.objects.unrestricted().get(pk=consoleport1.pk) consoleport1 = ConsolePort.objects.get(pk=consoleport1.pk)
consoleserverport1 = ConsoleServerPort.objects.unrestricted().get(pk=consoleserverport1.pk) consoleserverport1 = ConsoleServerPort.objects.get(pk=consoleserverport1.pk)
self.assertEqual(consoleport1.connected_endpoint, consoleserverport1) self.assertEqual(consoleport1.connected_endpoint, consoleserverport1)
self.assertEqual(consoleserverport1.connected_endpoint, consoleport1) self.assertEqual(consoleserverport1.connected_endpoint, consoleport1)
@ -1578,11 +1578,11 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Cable.objects.unrestricted().count(), 1) self.assertEqual(Cable.objects.count(), 1)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
powerport1 = PowerPort.objects.unrestricted().get(pk=powerport1.pk) powerport1 = PowerPort.objects.get(pk=powerport1.pk)
poweroutlet1 = PowerOutlet.objects.unrestricted().get(pk=poweroutlet1.pk) poweroutlet1 = PowerOutlet.objects.get(pk=poweroutlet1.pk)
self.assertEqual(cable.termination_a, powerport1) self.assertEqual(cable.termination_a, powerport1)
self.assertEqual(cable.termination_b, poweroutlet1) self.assertEqual(cable.termination_b, poweroutlet1)
@ -1614,11 +1614,11 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Cable.objects.unrestricted().count(), 1) self.assertEqual(Cable.objects.count(), 1)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) interface1 = Interface.objects.get(pk=interface1.pk)
interface2 = Interface.objects.unrestricted().get(pk=interface2.pk) interface2 = Interface.objects.get(pk=interface2.pk)
self.assertEqual(cable.termination_a, interface1) self.assertEqual(cable.termination_a, interface1)
self.assertEqual(cable.termination_b, interface2) self.assertEqual(cable.termination_b, interface2)
@ -1679,12 +1679,12 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_a.cable, cable)
self.assertEqual(cable.termination_b.cable, cable) self.assertEqual(cable.termination_b.cable, cable)
interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) interface1 = Interface.objects.get(pk=interface1.pk)
interface2 = Interface.objects.unrestricted().get(pk=interface2.pk) interface2 = Interface.objects.get(pk=interface2.pk)
self.assertEqual(interface1.connected_endpoint, interface2) self.assertEqual(interface1.connected_endpoint, interface2)
self.assertEqual(interface2.connected_endpoint, interface1) self.assertEqual(interface2.connected_endpoint, interface1)
@ -1718,11 +1718,11 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Cable.objects.unrestricted().count(), 1) self.assertEqual(Cable.objects.count(), 1)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) interface1 = Interface.objects.get(pk=interface1.pk)
circuittermination1 = CircuitTermination.objects.unrestricted().get(pk=circuittermination1.pk) circuittermination1 = CircuitTermination.objects.get(pk=circuittermination1.pk)
self.assertEqual(cable.termination_a, interface1) self.assertEqual(cable.termination_a, interface1)
self.assertEqual(cable.termination_b, circuittermination1) self.assertEqual(cable.termination_b, circuittermination1)
@ -1792,12 +1792,12 @@ class ConnectionTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertHttpStatus(response, status.HTTP_201_CREATED)
cable = Cable.objects.unrestricted().get(pk=response.data['id']) cable = Cable.objects.get(pk=response.data['id'])
self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_a.cable, cable)
self.assertEqual(cable.termination_b.cable, cable) self.assertEqual(cable.termination_b.cable, cable)
interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) interface1 = Interface.objects.get(pk=interface1.pk)
circuittermination1 = CircuitTermination.objects.unrestricted().get(pk=circuittermination1.pk) circuittermination1 = CircuitTermination.objects.get(pk=circuittermination1.pk)
self.assertEqual(interface1.connected_endpoint, circuittermination1) self.assertEqual(interface1.connected_endpoint, circuittermination1)
self.assertEqual(circuittermination1.connected_endpoint, interface1) self.assertEqual(circuittermination1.connected_endpoint, interface1)
@ -1888,12 +1888,12 @@ class VirtualChassisTest(APIViewTestCases.APIViewTestCase):
VirtualChassis(name='Virtual Chassis 3', master=devices[6], domain='domain-3'), VirtualChassis(name='Virtual Chassis 3', master=devices[6], domain='domain-3'),
) )
VirtualChassis.objects.bulk_create(virtual_chassis) VirtualChassis.objects.bulk_create(virtual_chassis)
Device.objects.unrestricted().filter(pk=devices[1].pk).update(virtual_chassis=virtual_chassis[0], vc_position=2) Device.objects.filter(pk=devices[1].pk).update(virtual_chassis=virtual_chassis[0], vc_position=2)
Device.objects.unrestricted().filter(pk=devices[2].pk).update(virtual_chassis=virtual_chassis[0], vc_position=3) Device.objects.filter(pk=devices[2].pk).update(virtual_chassis=virtual_chassis[0], vc_position=3)
Device.objects.unrestricted().filter(pk=devices[4].pk).update(virtual_chassis=virtual_chassis[1], vc_position=2) Device.objects.filter(pk=devices[4].pk).update(virtual_chassis=virtual_chassis[1], vc_position=2)
Device.objects.unrestricted().filter(pk=devices[5].pk).update(virtual_chassis=virtual_chassis[1], vc_position=3) Device.objects.filter(pk=devices[5].pk).update(virtual_chassis=virtual_chassis[1], vc_position=3)
Device.objects.unrestricted().filter(pk=devices[7].pk).update(virtual_chassis=virtual_chassis[2], vc_position=2) Device.objects.filter(pk=devices[7].pk).update(virtual_chassis=virtual_chassis[2], vc_position=2)
Device.objects.unrestricted().filter(pk=devices[8].pk).update(virtual_chassis=virtual_chassis[2], vc_position=3) Device.objects.filter(pk=devices[8].pk).update(virtual_chassis=virtual_chassis[2], vc_position=3)
cls.update_data = { cls.update_data = {
'name': 'Virtual Chassis X', 'name': 'Virtual Chassis X',

View File

@ -16,7 +16,7 @@ from virtualization.models import Cluster, ClusterType
class RegionTestCase(TestCase): class RegionTestCase(TestCase):
queryset = Region.objects.unrestricted() queryset = Region.objects.all()
filterset = RegionFilterSet filterset = RegionFilterSet
@classmethod @classmethod
@ -66,7 +66,7 @@ class RegionTestCase(TestCase):
class SiteTestCase(TestCase): class SiteTestCase(TestCase):
queryset = Site.objects.unrestricted() queryset = Site.objects.all()
filterset = SiteFilterSet filterset = SiteFilterSet
@classmethod @classmethod
@ -147,21 +147,21 @@ class SiteTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -169,7 +169,7 @@ class SiteTestCase(TestCase):
class RackGroupTestCase(TestCase): class RackGroupTestCase(TestCase):
queryset = RackGroup.objects.unrestricted() queryset = RackGroup.objects.all()
filterset = RackGroupFilterSet filterset = RackGroupFilterSet
@classmethod @classmethod
@ -223,14 +223,14 @@ class RackGroupTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
@ -245,7 +245,7 @@ class RackGroupTestCase(TestCase):
class RackRoleTestCase(TestCase): class RackRoleTestCase(TestCase):
queryset = RackRole.objects.unrestricted() queryset = RackRole.objects.all()
filterset = RackRoleFilterSet filterset = RackRoleFilterSet
@classmethod @classmethod
@ -276,7 +276,7 @@ class RackRoleTestCase(TestCase):
class RackTestCase(TestCase): class RackTestCase(TestCase):
queryset = Rack.objects.unrestricted() queryset = Rack.objects.all()
filterset = RackFilterSet filterset = RackFilterSet
@classmethod @classmethod
@ -384,21 +384,21 @@ class RackTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_group(self): def test_group(self):
groups = RackGroup.objects.unrestricted()[:2] groups = RackGroup.objects.all()[:2]
params = {'group_id': [groups[0].pk, groups[1].pk]} params = {'group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'group': [groups[0].slug, groups[1].slug]} params = {'group': [groups[0].slug, groups[1].slug]}
@ -409,7 +409,7 @@ class RackTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self): def test_role(self):
roles = RackRole.objects.unrestricted()[:2] roles = RackRole.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]} params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [roles[0].slug, roles[1].slug]} params = {'role': [roles[0].slug, roles[1].slug]}
@ -422,14 +422,14 @@ class RackTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -437,7 +437,7 @@ class RackTestCase(TestCase):
class RackReservationTestCase(TestCase): class RackReservationTestCase(TestCase):
queryset = RackReservation.objects.unrestricted() queryset = RackReservation.objects.all()
filterset = RackReservationFilterSet filterset = RackReservationFilterSet
@classmethod @classmethod
@ -499,14 +499,14 @@ class RackReservationTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_group(self): def test_group(self):
groups = RackGroup.objects.unrestricted()[:2] groups = RackGroup.objects.all()[:2]
params = {'group_id': [groups[0].pk, groups[1].pk]} params = {'group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'group': [groups[0].slug, groups[1].slug]} params = {'group': [groups[0].slug, groups[1].slug]}
@ -521,14 +521,14 @@ class RackReservationTestCase(TestCase):
# self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) # self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -536,7 +536,7 @@ class RackReservationTestCase(TestCase):
class ManufacturerTestCase(TestCase): class ManufacturerTestCase(TestCase):
queryset = Manufacturer.objects.unrestricted() queryset = Manufacturer.objects.all()
filterset = ManufacturerFilterSet filterset = ManufacturerFilterSet
@classmethod @classmethod
@ -567,7 +567,7 @@ class ManufacturerTestCase(TestCase):
class DeviceTypeTestCase(TestCase): class DeviceTypeTestCase(TestCase):
queryset = DeviceType.objects.unrestricted() queryset = DeviceType.objects.all()
filterset = DeviceTypeFilterSet filterset = DeviceTypeFilterSet
@classmethod @classmethod
@ -653,7 +653,7 @@ class DeviceTypeTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_manufacturer(self): def test_manufacturer(self):
manufacturers = Manufacturer.objects.unrestricted()[:2] manufacturers = Manufacturer.objects.all()[:2]
params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]}
@ -703,7 +703,7 @@ class DeviceTypeTestCase(TestCase):
class ConsolePortTemplateTestCase(TestCase): class ConsolePortTemplateTestCase(TestCase):
queryset = ConsolePortTemplate.objects.unrestricted() queryset = ConsolePortTemplate.objects.all()
filterset = ConsolePortTemplateFilterSet filterset = ConsolePortTemplateFilterSet
@classmethod @classmethod
@ -733,13 +733,13 @@ class ConsolePortTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class ConsoleServerPortTemplateTestCase(TestCase): class ConsoleServerPortTemplateTestCase(TestCase):
queryset = ConsoleServerPortTemplate.objects.unrestricted() queryset = ConsoleServerPortTemplate.objects.all()
filterset = ConsoleServerPortTemplateFilterSet filterset = ConsoleServerPortTemplateFilterSet
@classmethod @classmethod
@ -769,13 +769,13 @@ class ConsoleServerPortTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class PowerPortTemplateTestCase(TestCase): class PowerPortTemplateTestCase(TestCase):
queryset = PowerPortTemplate.objects.unrestricted() queryset = PowerPortTemplate.objects.all()
filterset = PowerPortTemplateFilterSet filterset = PowerPortTemplateFilterSet
@classmethod @classmethod
@ -805,7 +805,7 @@ class PowerPortTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -819,7 +819,7 @@ class PowerPortTemplateTestCase(TestCase):
class PowerOutletTemplateTestCase(TestCase): class PowerOutletTemplateTestCase(TestCase):
queryset = PowerOutletTemplate.objects.unrestricted() queryset = PowerOutletTemplate.objects.all()
filterset = PowerOutletTemplateFilterSet filterset = PowerOutletTemplateFilterSet
@classmethod @classmethod
@ -849,7 +849,7 @@ class PowerOutletTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -860,7 +860,7 @@ class PowerOutletTemplateTestCase(TestCase):
class InterfaceTemplateTestCase(TestCase): class InterfaceTemplateTestCase(TestCase):
queryset = InterfaceTemplate.objects.unrestricted() queryset = InterfaceTemplate.objects.all()
filterset = InterfaceTemplateFilterSet filterset = InterfaceTemplateFilterSet
@classmethod @classmethod
@ -890,7 +890,7 @@ class InterfaceTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -907,7 +907,7 @@ class InterfaceTemplateTestCase(TestCase):
class FrontPortTemplateTestCase(TestCase): class FrontPortTemplateTestCase(TestCase):
queryset = FrontPortTemplate.objects.unrestricted() queryset = FrontPortTemplate.objects.all()
filterset = FrontPortTemplateFilterSet filterset = FrontPortTemplateFilterSet
@classmethod @classmethod
@ -944,7 +944,7 @@ class FrontPortTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -955,7 +955,7 @@ class FrontPortTemplateTestCase(TestCase):
class RearPortTemplateTestCase(TestCase): class RearPortTemplateTestCase(TestCase):
queryset = RearPortTemplate.objects.unrestricted() queryset = RearPortTemplate.objects.all()
filterset = RearPortTemplateFilterSet filterset = RearPortTemplateFilterSet
@classmethod @classmethod
@ -985,7 +985,7 @@ class RearPortTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -1000,7 +1000,7 @@ class RearPortTemplateTestCase(TestCase):
class DeviceBayTemplateTestCase(TestCase): class DeviceBayTemplateTestCase(TestCase):
queryset = DeviceBayTemplate.objects.unrestricted() queryset = DeviceBayTemplate.objects.all()
filterset = DeviceBayTemplateFilterSet filterset = DeviceBayTemplateFilterSet
@classmethod @classmethod
@ -1030,13 +1030,13 @@ class DeviceBayTemplateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype_id(self): def test_devicetype_id(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class DeviceRoleTestCase(TestCase): class DeviceRoleTestCase(TestCase):
queryset = DeviceRole.objects.unrestricted() queryset = DeviceRole.objects.all()
filterset = DeviceRoleFilterSet filterset = DeviceRoleFilterSet
@classmethod @classmethod
@ -1073,7 +1073,7 @@ class DeviceRoleTestCase(TestCase):
class PlatformTestCase(TestCase): class PlatformTestCase(TestCase):
queryset = Platform.objects.unrestricted() queryset = Platform.objects.all()
filterset = PlatformFilterSet filterset = PlatformFilterSet
@classmethod @classmethod
@ -1114,7 +1114,7 @@ class PlatformTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_manufacturer(self): def test_manufacturer(self):
manufacturers = Manufacturer.objects.unrestricted()[:2] manufacturers = Manufacturer.objects.all()[:2]
params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]}
@ -1122,7 +1122,7 @@ class PlatformTestCase(TestCase):
class DeviceTestCase(TestCase): class DeviceTestCase(TestCase):
queryset = Device.objects.unrestricted() queryset = Device.objects.all()
filterset = DeviceFilterSet filterset = DeviceFilterSet
@classmethod @classmethod
@ -1295,57 +1295,57 @@ class DeviceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_manufacturer(self): def test_manufacturer(self):
manufacturers = Manufacturer.objects.unrestricted()[:2] manufacturers = Manufacturer.objects.all()[:2]
params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicetype(self): def test_devicetype(self):
device_types = DeviceType.objects.unrestricted()[:2] device_types = DeviceType.objects.all()[:2]
params = {'device_type_id': [device_types[0].pk, device_types[1].pk]} params = {'device_type_id': [device_types[0].pk, device_types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_devicerole(self): def test_devicerole(self):
device_roles = DeviceRole.objects.unrestricted()[:2] device_roles = DeviceRole.objects.all()[:2]
params = {'role_id': [device_roles[0].pk, device_roles[1].pk]} params = {'role_id': [device_roles[0].pk, device_roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [device_roles[0].slug, device_roles[1].slug]} params = {'role': [device_roles[0].slug, device_roles[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_platform(self): def test_platform(self):
platforms = Platform.objects.unrestricted()[:2] platforms = Platform.objects.all()[:2]
params = {'platform_id': [platforms[0].pk, platforms[1].pk]} params = {'platform_id': [platforms[0].pk, platforms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'platform': [platforms[0].slug, platforms[1].slug]} params = {'platform': [platforms[0].slug, platforms[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_rackgroup(self): def test_rackgroup(self):
rack_groups = RackGroup.objects.unrestricted()[:2] rack_groups = RackGroup.objects.all()[:2]
params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]} params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_rack(self): def test_rack(self):
racks = Rack.objects.unrestricted()[:2] racks = Rack.objects.all()[:2]
params = {'rack_id': [racks[0].pk, racks[1].pk]} params = {'rack_id': [racks[0].pk, racks[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster(self): def test_cluster(self):
clusters = Cluster.objects.unrestricted()[:2] clusters = Cluster.objects.all()[:2]
params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} params = {'cluster_id': [clusters[0].pk, clusters[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -1380,7 +1380,7 @@ class DeviceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_virtual_chassis_id(self): def test_virtual_chassis_id(self):
params = {'virtual_chassis_id': [VirtualChassis.objects.unrestricted().first().pk]} params = {'virtual_chassis_id': [VirtualChassis.objects.first().pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_chassis_member(self): def test_virtual_chassis_member(self):
@ -1438,14 +1438,14 @@ class DeviceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -1453,7 +1453,7 @@ class DeviceTestCase(TestCase):
class ConsolePortTestCase(TestCase): class ConsolePortTestCase(TestCase):
queryset = ConsolePort.objects.unrestricted() queryset = ConsolePort.objects.all()
filterset = ConsolePortFilterSet filterset = ConsolePortFilterSet
@classmethod @classmethod
@ -1520,21 +1520,21 @@ class ConsolePortTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -1548,7 +1548,7 @@ class ConsolePortTestCase(TestCase):
class ConsoleServerPortTestCase(TestCase): class ConsoleServerPortTestCase(TestCase):
queryset = ConsoleServerPort.objects.unrestricted() queryset = ConsoleServerPort.objects.all()
filterset = ConsoleServerPortFilterSet filterset = ConsoleServerPortFilterSet
@classmethod @classmethod
@ -1615,21 +1615,21 @@ class ConsoleServerPortTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -1643,7 +1643,7 @@ class ConsoleServerPortTestCase(TestCase):
class PowerPortTestCase(TestCase): class PowerPortTestCase(TestCase):
queryset = PowerPort.objects.unrestricted() queryset = PowerPort.objects.all()
filterset = PowerPortFilterSet filterset = PowerPortFilterSet
@classmethod @classmethod
@ -1718,21 +1718,21 @@ class PowerPortTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -1746,7 +1746,7 @@ class PowerPortTestCase(TestCase):
class PowerOutletTestCase(TestCase): class PowerOutletTestCase(TestCase):
queryset = PowerOutlet.objects.unrestricted() queryset = PowerOutlet.objects.all()
filterset = PowerOutletFilterSet filterset = PowerOutletFilterSet
@classmethod @classmethod
@ -1818,21 +1818,21 @@ class PowerOutletTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -1846,7 +1846,7 @@ class PowerOutletTestCase(TestCase):
class InterfaceTestCase(TestCase): class InterfaceTestCase(TestCase):
queryset = Interface.objects.unrestricted() queryset = Interface.objects.all()
filterset = InterfaceFilterSet filterset = InterfaceFilterSet
@classmethod @classmethod
@ -1930,21 +1930,21 @@ class InterfaceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -1972,7 +1972,7 @@ class InterfaceTestCase(TestCase):
class FrontPortTestCase(TestCase): class FrontPortTestCase(TestCase):
queryset = FrontPort.objects.unrestricted() queryset = FrontPort.objects.all()
filterset = FrontPortFilterSet filterset = FrontPortFilterSet
@classmethod @classmethod
@ -2046,21 +2046,21 @@ class FrontPortTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -2074,7 +2074,7 @@ class FrontPortTestCase(TestCase):
class RearPortTestCase(TestCase): class RearPortTestCase(TestCase):
queryset = RearPort.objects.unrestricted() queryset = RearPort.objects.all()
filterset = RearPortFilterSet filterset = RearPortFilterSet
@classmethod @classmethod
@ -2142,21 +2142,21 @@ class RearPortTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -2170,7 +2170,7 @@ class RearPortTestCase(TestCase):
class DeviceBayTestCase(TestCase): class DeviceBayTestCase(TestCase):
queryset = DeviceBay.objects.unrestricted() queryset = DeviceBay.objects.all()
filterset = DeviceBayFilterSet filterset = DeviceBayFilterSet
@classmethod @classmethod
@ -2220,21 +2220,21 @@ class DeviceBayTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
@ -2242,7 +2242,7 @@ class DeviceBayTestCase(TestCase):
class InventoryItemTestCase(TestCase): class InventoryItemTestCase(TestCase):
queryset = InventoryItem.objects.unrestricted() queryset = InventoryItem.objects.all()
filterset = InventoryItemFilterSet filterset = InventoryItemFilterSet
@classmethod @classmethod
@ -2318,14 +2318,14 @@ class InventoryItemTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
@ -2333,7 +2333,7 @@ class InventoryItemTestCase(TestCase):
def test_device(self): def test_device(self):
# TODO: Allow multiple values # TODO: Allow multiple values
device = Device.objects.unrestricted().first() device = Device.objects.first()
params = {'device_id': device.pk} params = {'device_id': device.pk}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': device.name} params = {'device': device.name}
@ -2345,7 +2345,7 @@ class InventoryItemTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_manufacturer(self): def test_manufacturer(self):
manufacturers = Manufacturer.objects.unrestricted()[:2] manufacturers = Manufacturer.objects.all()[:2]
params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]}
@ -2359,7 +2359,7 @@ class InventoryItemTestCase(TestCase):
class VirtualChassisTestCase(TestCase): class VirtualChassisTestCase(TestCase):
queryset = VirtualChassis.objects.unrestricted() queryset = VirtualChassis.objects.all()
filterset = VirtualChassisFilterSet filterset = VirtualChassisFilterSet
@classmethod @classmethod
@ -2414,14 +2414,14 @@ class VirtualChassisTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
@ -2429,7 +2429,7 @@ class VirtualChassisTestCase(TestCase):
class CableTestCase(TestCase): class CableTestCase(TestCase):
queryset = Cable.objects.unrestricted() queryset = Cable.objects.all()
filterset = CableFilterSet filterset = CableFilterSet
@classmethod @classmethod
@ -2524,28 +2524,28 @@ class CableTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_rack(self): def test_rack(self):
racks = Rack.objects.unrestricted()[:2] racks = Rack.objects.all()[:2]
params = {'rack_id': [racks[0].pk, racks[1].pk]} params = {'rack_id': [racks[0].pk, racks[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
params = {'rack': [racks[0].name, racks[1].name]} params = {'rack': [racks[0].name, racks[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
def test_site(self): def test_site(self):
site = Site.objects.unrestricted()[:2] site = Site.objects.all()[:2]
params = {'site_id': [site[0].pk, site[1].pk]} params = {'site_id': [site[0].pk, site[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
params = {'site': [site[0].slug, site[1].slug]} params = {'site': [site[0].slug, site[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
def test_tenant(self): def test_tenant(self):
tenant = Tenant.objects.unrestricted()[:2] tenant = Tenant.objects.all()[:2]
params = {'tenant_id': [tenant[0].pk, tenant[1].pk]} params = {'tenant_id': [tenant[0].pk, tenant[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenant[0].slug, tenant[1].slug]} params = {'tenant': [tenant[0].slug, tenant[1].slug]}
@ -2553,7 +2553,7 @@ class CableTestCase(TestCase):
class PowerPanelTestCase(TestCase): class PowerPanelTestCase(TestCase):
queryset = PowerPanel.objects.unrestricted() queryset = PowerPanel.objects.all()
filterset = PowerPanelFilterSet filterset = PowerPanelFilterSet
@classmethod @classmethod
@ -2598,27 +2598,27 @@ class PowerPanelTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_rack_group(self): def test_rack_group(self):
rack_groups = RackGroup.objects.unrestricted()[:2] rack_groups = RackGroup.objects.all()[:2]
params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]} params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class PowerFeedTestCase(TestCase): class PowerFeedTestCase(TestCase):
queryset = PowerFeed.objects.unrestricted() queryset = PowerFeed.objects.all()
filterset = PowerFeedFilterSet filterset = PowerFeedFilterSet
@classmethod @classmethod
@ -2698,26 +2698,26 @@ class PowerFeedTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_power_panel_id(self): def test_power_panel_id(self):
power_panels = PowerPanel.objects.unrestricted()[:2] power_panels = PowerPanel.objects.all()[:2]
params = {'power_panel_id': [power_panels[0].pk, power_panels[1].pk]} params = {'power_panel_id': [power_panels[0].pk, power_panels[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_rack_id(self): def test_rack_id(self):
racks = Rack.objects.unrestricted()[:2] racks = Rack.objects.all()[:2]
params = {'rack_id': [racks[0].pk, racks[1].pk]} params = {'rack_id': [racks[0].pk, racks[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)

View File

@ -130,83 +130,83 @@ class ConfigContextFilterSet(BaseFilterSet):
) )
region_id = django_filters.ModelMultipleChoiceFilter( region_id = django_filters.ModelMultipleChoiceFilter(
field_name='regions', field_name='regions',
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
label='Region', label='Region',
) )
region = django_filters.ModelMultipleChoiceFilter( region = django_filters.ModelMultipleChoiceFilter(
field_name='regions__slug', field_name='regions__slug',
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='sites', field_name='sites',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site', label='Site',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='sites__slug', field_name='sites__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
field_name='roles', field_name='roles',
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
label='Role', label='Role',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='roles__slug', field_name='roles__slug',
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
platform_id = django_filters.ModelMultipleChoiceFilter( platform_id = django_filters.ModelMultipleChoiceFilter(
field_name='platforms', field_name='platforms',
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
label='Platform', label='Platform',
) )
platform = django_filters.ModelMultipleChoiceFilter( platform = django_filters.ModelMultipleChoiceFilter(
field_name='platforms__slug', field_name='platforms__slug',
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Platform (slug)', label='Platform (slug)',
) )
cluster_group_id = django_filters.ModelMultipleChoiceFilter( cluster_group_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster_groups', field_name='cluster_groups',
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
label='Cluster group', label='Cluster group',
) )
cluster_group = django_filters.ModelMultipleChoiceFilter( cluster_group = django_filters.ModelMultipleChoiceFilter(
field_name='cluster_groups__slug', field_name='cluster_groups__slug',
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Cluster group (slug)', label='Cluster group (slug)',
) )
cluster_id = django_filters.ModelMultipleChoiceFilter( cluster_id = django_filters.ModelMultipleChoiceFilter(
field_name='clusters', field_name='clusters',
queryset=Cluster.objects.unrestricted(), queryset=Cluster.objects.all(),
label='Cluster', label='Cluster',
) )
tenant_group_id = django_filters.ModelMultipleChoiceFilter( tenant_group_id = django_filters.ModelMultipleChoiceFilter(
field_name='tenant_groups', field_name='tenant_groups',
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
label='Tenant group', label='Tenant group',
) )
tenant_group = django_filters.ModelMultipleChoiceFilter( tenant_group = django_filters.ModelMultipleChoiceFilter(
field_name='tenant_groups__slug', field_name='tenant_groups__slug',
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Tenant group (slug)', label='Tenant group (slug)',
) )
tenant_id = django_filters.ModelMultipleChoiceFilter( tenant_id = django_filters.ModelMultipleChoiceFilter(
field_name='tenants', field_name='tenants',
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
label='Tenant', label='Tenant',
) )
tenant = django_filters.ModelMultipleChoiceFilter( tenant = django_filters.ModelMultipleChoiceFilter(
field_name='tenants__slug', field_name='tenants__slug',
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Tenant (slug)', label='Tenant (slug)',
) )

View File

@ -145,7 +145,7 @@ class ObjectChangeMiddleware(object):
# one or more changes being logged. # one or more changes being logged.
if settings.CHANGELOG_RETENTION and random.randint(1, 100) == 1: if settings.CHANGELOG_RETENTION and random.randint(1, 100) == 1:
cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION) cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION)
purged_count, _ = ObjectChange.objects.unrestricted().filter( purged_count, _ = ObjectChange.objects.filter(
time__lt=cutoff time__lt=cutoff
).delete() ).delete()

View File

@ -540,7 +540,7 @@ class ConfigContextModel(models.Model):
# Compile all config data, overwriting lower-weight values with higher-weight values where a collision occurs # Compile all config data, overwriting lower-weight values with higher-weight values where a collision occurs
data = OrderedDict() data = OrderedDict()
for context in ConfigContext.objects.unrestricted().get_for_object(self): for context in ConfigContext.objects.get_for_object(self):
data = deepmerge(data, context.data) data = deepmerge(data, context.data)
# If the object has local config context data defined, merge it last # If the object has local config context data defined, merge it last

View File

@ -11,7 +11,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType
class GraphTestCase(TestCase): class GraphTestCase(TestCase):
queryset = Graph.objects.unrestricted() queryset = Graph.objects.all()
filterset = GraphFilterSet filterset = GraphFilterSet
@classmethod @classmethod
@ -46,7 +46,7 @@ class GraphTestCase(TestCase):
class ExportTemplateTestCase(TestCase): class ExportTemplateTestCase(TestCase):
queryset = ExportTemplate.objects.unrestricted() queryset = ExportTemplate.objects.all()
filterset = ExportTemplateFilterSet filterset = ExportTemplateFilterSet
@classmethod @classmethod
@ -79,7 +79,7 @@ class ExportTemplateTestCase(TestCase):
class ConfigContextTestCase(TestCase): class ConfigContextTestCase(TestCase):
queryset = ConfigContext.objects.unrestricted() queryset = ConfigContext.objects.all()
filterset = ConfigContextFilterSet filterset = ConfigContextFilterSet
@classmethod @classmethod
@ -176,54 +176,54 @@ class ConfigContextTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self): def test_role(self):
device_roles = DeviceRole.objects.unrestricted()[:2] device_roles = DeviceRole.objects.all()[:2]
params = {'role_id': [device_roles[0].pk, device_roles[1].pk]} params = {'role_id': [device_roles[0].pk, device_roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [device_roles[0].slug, device_roles[1].slug]} params = {'role': [device_roles[0].slug, device_roles[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_platform(self): def test_platform(self):
platforms = Platform.objects.unrestricted()[:2] platforms = Platform.objects.all()[:2]
params = {'platform_id': [platforms[0].pk, platforms[1].pk]} params = {'platform_id': [platforms[0].pk, platforms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'platform': [platforms[0].slug, platforms[1].slug]} params = {'platform': [platforms[0].slug, platforms[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster_group(self): def test_cluster_group(self):
cluster_groups = ClusterGroup.objects.unrestricted()[:2] cluster_groups = ClusterGroup.objects.all()[:2]
params = {'cluster_group_id': [cluster_groups[0].pk, cluster_groups[1].pk]} params = {'cluster_group_id': [cluster_groups[0].pk, cluster_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'cluster_group': [cluster_groups[0].slug, cluster_groups[1].slug]} params = {'cluster_group': [cluster_groups[0].slug, cluster_groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster(self): def test_cluster(self):
clusters = Cluster.objects.unrestricted()[:2] clusters = Cluster.objects.all()[:2]
params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} params = {'cluster_id': [clusters[0].pk, clusters[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_(self): def test_tenant_(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}

View File

@ -276,8 +276,7 @@ class VLANViewSet(CustomFieldModelViewSet):
class ServiceViewSet(ModelViewSet): class ServiceViewSet(ModelViewSet):
queryset = Service.objects.prefetch_related( queryset = Service.objects.prefetch_related(
Prefetch('ipaddresses', queryset=IPAddress.objects.unrestricted()), 'device', 'virtual_machine', 'tags', 'ipaddresses'
'device', 'virtual_machine', 'tags'
) )
serializer_class = serializers.ServiceSerializer serializer_class = serializers.ServiceSerializer
filterset_class = filters.ServiceFilterSet filterset_class = filters.ServiceFilterSet

View File

@ -71,12 +71,12 @@ class AggregateFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt
label='Prefix', label='Prefix',
) )
rir_id = django_filters.ModelMultipleChoiceFilter( rir_id = django_filters.ModelMultipleChoiceFilter(
queryset=RIR.objects.unrestricted(), queryset=RIR.objects.all(),
label='RIR (ID)', label='RIR (ID)',
) )
rir = django_filters.ModelMultipleChoiceFilter( rir = django_filters.ModelMultipleChoiceFilter(
field_name='rir__slug', field_name='rir__slug',
queryset=RIR.objects.unrestricted(), queryset=RIR.objects.all(),
to_field_name='slug', to_field_name='slug',
label='RIR (slug)', label='RIR (slug)',
) )
@ -148,40 +148,40 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cre
label='Mask length', label='Mask length',
) )
vrf_id = django_filters.ModelMultipleChoiceFilter( vrf_id = django_filters.ModelMultipleChoiceFilter(
queryset=VRF.objects.unrestricted(), queryset=VRF.objects.all(),
label='VRF', label='VRF',
) )
vrf = django_filters.ModelMultipleChoiceFilter( vrf = django_filters.ModelMultipleChoiceFilter(
field_name='vrf__rd', field_name='vrf__rd',
queryset=VRF.objects.unrestricted(), queryset=VRF.objects.all(),
to_field_name='rd', to_field_name='rd',
label='VRF (RD)', label='VRF (RD)',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
vlan_id = django_filters.ModelMultipleChoiceFilter( vlan_id = django_filters.ModelMultipleChoiceFilter(
queryset=VLAN.objects.unrestricted(), queryset=VLAN.objects.all(),
label='VLAN (ID)', label='VLAN (ID)',
) )
vlan_vid = django_filters.NumberFilter( vlan_vid = django_filters.NumberFilter(
@ -189,12 +189,12 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cre
label='VLAN number (1-4095)', label='VLAN number (1-4095)',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=Role.objects.unrestricted(), queryset=Role.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug', field_name='role__slug',
queryset=Role.objects.unrestricted(), queryset=Role.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
@ -290,12 +290,12 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
label='Mask length', label='Mask length',
) )
vrf_id = django_filters.ModelMultipleChoiceFilter( vrf_id = django_filters.ModelMultipleChoiceFilter(
queryset=VRF.objects.unrestricted(), queryset=VRF.objects.all(),
label='VRF', label='VRF',
) )
vrf = django_filters.ModelMultipleChoiceFilter( vrf = django_filters.ModelMultipleChoiceFilter(
field_name='vrf__rd', field_name='vrf__rd',
queryset=VRF.objects.unrestricted(), queryset=VRF.objects.all(),
to_field_name='rd', to_field_name='rd',
label='VRF (RD)', label='VRF (RD)',
) )
@ -321,24 +321,24 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
) )
interface = django_filters.ModelMultipleChoiceFilter( interface = django_filters.ModelMultipleChoiceFilter(
field_name='interface__name', field_name='interface__name',
queryset=Interface.objects.unrestricted(), queryset=Interface.objects.all(),
to_field_name='name', to_field_name='name',
label='Interface (name)', label='Interface (name)',
) )
interface_id = django_filters.ModelMultipleChoiceFilter( interface_id = django_filters.ModelMultipleChoiceFilter(
field_name='interface', field_name='interface',
queryset=Interface.objects.unrestricted(), queryset=Interface.objects.all(),
label='Interface (ID)', label='Interface (ID)',
) )
vminterface = django_filters.ModelMultipleChoiceFilter( vminterface = django_filters.ModelMultipleChoiceFilter(
field_name='vminterface__name', field_name='vminterface__name',
queryset=VMInterface.objects.unrestricted(), queryset=VMInterface.objects.all(),
to_field_name='name', to_field_name='name',
label='VM interface (name)', label='VM interface (name)',
) )
vminterface_id = django_filters.ModelMultipleChoiceFilter( vminterface_id = django_filters.ModelMultipleChoiceFilter(
field_name='vminterface', field_name='vminterface',
queryset=VMInterface.objects.unrestricted(), queryset=VMInterface.objects.all(),
label='VM interface (ID)', label='VM interface (ID)',
) )
assigned_to_interface = django_filters.BooleanFilter( assigned_to_interface = django_filters.BooleanFilter(
@ -390,7 +390,7 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
return queryset.filter(address__net_mask_length=value) return queryset.filter(address__net_mask_length=value)
def filter_device(self, queryset, name, value): def filter_device(self, queryset, name, value):
devices = Device.objects.unrestricted().filter(**{'{}__in'.format(name): value}) devices = Device.objects.filter(**{'{}__in'.format(name): value})
if not devices.exists(): if not devices.exists():
return queryset.none() return queryset.none()
interface_ids = [] interface_ids = []
@ -401,12 +401,12 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
) )
def filter_virtual_machine(self, queryset, name, value): def filter_virtual_machine(self, queryset, name, value):
virtual_machines = VirtualMachine.objects.unrestricted().filter(**{'{}__in'.format(name): value}) virtual_machines = VirtualMachine.objects.filter(**{'{}__in'.format(name): value})
if not virtual_machines.exists(): if not virtual_machines.exists():
return queryset.none() return queryset.none()
interface_ids = [] interface_ids = []
for vm in virtual_machines: for vm in virtual_machines:
interface_ids.extend(vm.interfaces.unrestricted().values_list('id', flat=True)) interface_ids.extend(vm.interfaces.values_list('id', flat=True))
return queryset.filter( return queryset.filter(
vminterface__in=interface_ids vminterface__in=interface_ids
) )
@ -417,25 +417,25 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
class VLANGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class VLANGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
@ -451,45 +451,45 @@ class VLANFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
queryset=VLANGroup.objects.unrestricted(), queryset=VLANGroup.objects.all(),
label='Group (ID)', label='Group (ID)',
) )
group = django_filters.ModelMultipleChoiceFilter( group = django_filters.ModelMultipleChoiceFilter(
field_name='group__slug', field_name='group__slug',
queryset=VLANGroup.objects.unrestricted(), queryset=VLANGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Group', label='Group',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=Role.objects.unrestricted(), queryset=Role.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug', field_name='role__slug',
queryset=Role.objects.unrestricted(), queryset=Role.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
@ -520,22 +520,22 @@ class ServiceFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
label='Search', label='Search',
) )
device_id = django_filters.ModelMultipleChoiceFilter( device_id = django_filters.ModelMultipleChoiceFilter(
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
label='Device (ID)', label='Device (ID)',
) )
device = django_filters.ModelMultipleChoiceFilter( device = django_filters.ModelMultipleChoiceFilter(
field_name='device__name', field_name='device__name',
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
label='Device (name)', label='Device (name)',
) )
virtual_machine_id = django_filters.ModelMultipleChoiceFilter( virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
queryset=VirtualMachine.objects.unrestricted(), queryset=VirtualMachine.objects.all(),
label='Virtual machine (ID)', label='Virtual machine (ID)',
) )
virtual_machine = django_filters.ModelMultipleChoiceFilter( virtual_machine = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__name', field_name='virtual_machine__name',
queryset=VirtualMachine.objects.unrestricted(), queryset=VirtualMachine.objects.all(),
to_field_name='name', to_field_name='name',
label='Virtual machine (name)', label='Virtual machine (name)',
) )

View File

@ -215,7 +215,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel):
}) })
# Ensure that the aggregate being added is not covered by an existing aggregate # Ensure that the aggregate being added is not covered by an existing aggregate
covering_aggregates = Aggregate.objects.unrestricted().filter( covering_aggregates = Aggregate.objects.filter(
prefix__net_contains_or_equals=str(self.prefix) prefix__net_contains_or_equals=str(self.prefix)
) )
if self.pk: if self.pk:
@ -228,7 +228,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel):
}) })
# Ensure that the aggregate being added does not cover an existing aggregate # Ensure that the aggregate being added does not cover an existing aggregate
covered_aggregates = Aggregate.objects.unrestricted().filter(prefix__net_contained=str(self.prefix)) covered_aggregates = Aggregate.objects.filter(prefix__net_contained=str(self.prefix))
if self.pk: if self.pk:
covered_aggregates = covered_aggregates.exclude(pk=self.pk) covered_aggregates = covered_aggregates.exclude(pk=self.pk)
if covered_aggregates: if covered_aggregates:
@ -256,7 +256,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel):
""" """
Determine the prefix utilization of the aggregate and return it as a percentage. Determine the prefix utilization of the aggregate and return it as a percentage.
""" """
queryset = Prefix.objects.unrestricted().filter(prefix__net_contained_or_equal=str(self.prefix)) queryset = Prefix.objects.filter(prefix__net_contained_or_equal=str(self.prefix))
child_prefixes = netaddr.IPSet([p.prefix for p in queryset]) child_prefixes = netaddr.IPSet([p.prefix for p in queryset])
return int(float(child_prefixes.size) / self.prefix.size * 100) return int(float(child_prefixes.size) / self.prefix.size * 100)
@ -470,7 +470,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel):
return self.STATUS_CLASS_MAP.get(self.status) return self.STATUS_CLASS_MAP.get(self.status)
def get_duplicates(self): def get_duplicates(self):
return Prefix.objects.unrestricted().filter(vrf=self.vrf, prefix=str(self.prefix)).exclude(pk=self.pk) return Prefix.objects.filter(vrf=self.vrf, prefix=str(self.prefix)).exclude(pk=self.pk)
def get_child_prefixes(self): def get_child_prefixes(self):
""" """
@ -478,9 +478,9 @@ class Prefix(ChangeLoggedModel, CustomFieldModel):
Prefixes belonging to any VRF. Prefixes belonging to any VRF.
""" """
if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER: if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER:
return Prefix.objects.unrestricted().filter(prefix__net_contained=str(self.prefix)) return Prefix.objects.filter(prefix__net_contained=str(self.prefix))
else: else:
return Prefix.objects.unrestricted().filter(prefix__net_contained=str(self.prefix), vrf=self.vrf) return Prefix.objects.filter(prefix__net_contained=str(self.prefix), vrf=self.vrf)
def get_child_ips(self): def get_child_ips(self):
""" """
@ -488,9 +488,9 @@ class Prefix(ChangeLoggedModel, CustomFieldModel):
child IPAddresses belonging to any VRF. child IPAddresses belonging to any VRF.
""" """
if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER: if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER:
return IPAddress.objects.unrestricted().filter(address__net_host_contained=str(self.prefix)) return IPAddress.objects.filter(address__net_host_contained=str(self.prefix))
else: else:
return IPAddress.objects.unrestricted().filter(address__net_host_contained=str(self.prefix), vrf=self.vrf) return IPAddress.objects.filter(address__net_host_contained=str(self.prefix), vrf=self.vrf)
def get_available_prefixes(self): def get_available_prefixes(self):
""" """
@ -554,7 +554,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel):
"container", calculate utilization based on child prefixes. For all others, count child IP addresses. "container", calculate utilization based on child prefixes. For all others, count child IP addresses.
""" """
if self.status == PrefixStatusChoices.STATUS_CONTAINER: if self.status == PrefixStatusChoices.STATUS_CONTAINER:
queryset = Prefix.objects.unrestricted().filter( queryset = Prefix.objects.filter(
prefix__net_contained=str(self.prefix), prefix__net_contained=str(self.prefix),
vrf=self.vrf vrf=self.vrf
) )
@ -694,7 +694,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel):
return reverse('ipam:ipaddress', args=[self.pk]) return reverse('ipam:ipaddress', args=[self.pk])
def get_duplicates(self): def get_duplicates(self):
return IPAddress.objects.unrestricted().filter( return IPAddress.objects.filter(
vrf=self.vrf, vrf=self.vrf,
address__net_host=str(self.address.ip) address__net_host=str(self.address.ip)
).exclude(pk=self.pk) ).exclude(pk=self.pk)
@ -726,7 +726,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel):
# Check for primary IP assignment that doesn't match the assigned device/VM # Check for primary IP assignment that doesn't match the assigned device/VM
if self.pk and type(self.assigned_object) is Interface: if self.pk and type(self.assigned_object) is Interface:
device = Device.objects.unrestricted().filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() device = Device.objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first()
if device: if device:
if self.assigned_object is None: if self.assigned_object is None:
raise ValidationError({ raise ValidationError({
@ -738,7 +738,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel):
f"{self.assigned_object.device} ({self.assigned_object})" f"{self.assigned_object.device} ({self.assigned_object})"
}) })
elif self.pk and type(self.assigned_object) is VMInterface: elif self.pk and type(self.assigned_object) is VMInterface:
vm = VirtualMachine.unrestricted().objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() vm = VirtualMachine.objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first()
if vm: if vm:
if self.assigned_object is None: if self.assigned_object is None:
raise ValidationError({ raise ValidationError({
@ -867,7 +867,7 @@ class VLANGroup(ChangeLoggedModel):
""" """
Return the first available VLAN ID (1-4094) in the group. Return the first available VLAN ID (1-4094) in the group.
""" """
vlan_ids = VLAN.objects.unrestricted().filter(group=self).values_list('vid', flat=True) vlan_ids = VLAN.objects.filter(group=self).values_list('vid', flat=True)
for i in range(1, 4095): for i in range(1, 4095):
if i not in vlan_ids: if i not in vlan_ids:
return i return i
@ -994,7 +994,7 @@ class VLAN(ChangeLoggedModel, CustomFieldModel):
def get_members(self): def get_members(self):
# Return all interfaces assigned to this VLAN # Return all interfaces assigned to this VLAN
return Interface.objects.unrestricted().filter( return Interface.objects.filter(
Q(untagged_vlan_id=self.pk) | Q(untagged_vlan_id=self.pk) |
Q(tagged_vlans=self.pk) Q(tagged_vlans=self.pk)
).distinct() ).distinct()

View File

@ -411,7 +411,7 @@ class VLANTest(APIViewTestCases.APIViewTestCase):
""" """
Attempt and fail to delete a VLAN with a Prefix assigned to it. Attempt and fail to delete a VLAN with a Prefix assigned to it.
""" """
vlan = VLAN.objects.unrestricted().first() vlan = VLAN.objects.first()
Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24'), vlan=vlan) Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24'), vlan=vlan)
self.add_permissions('ipam.delete_vlan') self.add_permissions('ipam.delete_vlan')

View File

@ -9,7 +9,7 @@ from tenancy.models import Tenant, TenantGroup
class VRFTestCase(TestCase): class VRFTestCase(TestCase):
queryset = VRF.objects.unrestricted() queryset = VRF.objects.all()
filterset = VRFFilterSet filterset = VRFFilterSet
@classmethod @classmethod
@ -59,14 +59,14 @@ class VRFTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -74,7 +74,7 @@ class VRFTestCase(TestCase):
class RIRTestCase(TestCase): class RIRTestCase(TestCase):
queryset = RIR.objects.unrestricted() queryset = RIR.objects.all()
filterset = RIRFilterSet filterset = RIRFilterSet
@classmethod @classmethod
@ -114,7 +114,7 @@ class RIRTestCase(TestCase):
class AggregateTestCase(TestCase): class AggregateTestCase(TestCase):
queryset = Aggregate.objects.unrestricted() queryset = Aggregate.objects.all()
filterset = AggregateFilterSet filterset = AggregateFilterSet
@classmethod @classmethod
@ -155,7 +155,7 @@ class AggregateTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_rir(self): def test_rir(self):
rirs = RIR.objects.unrestricted()[:2] rirs = RIR.objects.all()[:2]
params = {'rir_id': [rirs[0].pk, rirs[1].pk]} params = {'rir_id': [rirs[0].pk, rirs[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'rir': [rirs[0].slug, rirs[1].slug]} params = {'rir': [rirs[0].slug, rirs[1].slug]}
@ -163,7 +163,7 @@ class AggregateTestCase(TestCase):
class RoleTestCase(TestCase): class RoleTestCase(TestCase):
queryset = Role.objects.unrestricted() queryset = Role.objects.all()
filterset = RoleFilterSet filterset = RoleFilterSet
@classmethod @classmethod
@ -190,7 +190,7 @@ class RoleTestCase(TestCase):
class PrefixTestCase(TestCase): class PrefixTestCase(TestCase):
queryset = Prefix.objects.unrestricted() queryset = Prefix.objects.all()
filterset = PrefixFilterSet filterset = PrefixFilterSet
@classmethod @classmethod
@ -295,28 +295,28 @@ class PrefixTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_vrf(self): def test_vrf(self):
vrfs = VRF.objects.unrestricted()[:2] vrfs = VRF.objects.all()[:2]
params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} params = {'vrf': [vrfs[0].rd, vrfs[1].rd]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_vlan(self): def test_vlan(self):
vlans = VLAN.objects.unrestricted()[:2] vlans = VLAN.objects.all()[:2]
params = {'vlan_id': [vlans[0].pk, vlans[1].pk]} params = {'vlan_id': [vlans[0].pk, vlans[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
# TODO: Test for multiple values # TODO: Test for multiple values
@ -324,7 +324,7 @@ class PrefixTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self): def test_role(self):
roles = Role.objects.unrestricted()[:2] roles = Role.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]} params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'role': [roles[0].slug, roles[1].slug]} params = {'role': [roles[0].slug, roles[1].slug]}
@ -335,14 +335,14 @@ class PrefixTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -350,7 +350,7 @@ class PrefixTestCase(TestCase):
class IPAddressTestCase(TestCase): class IPAddressTestCase(TestCase):
queryset = IPAddress.objects.unrestricted() queryset = IPAddress.objects.all()
filterset = IPAddressFilterSet filterset = IPAddressFilterSet
@classmethod @classmethod
@ -466,35 +466,35 @@ class IPAddressTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_vrf(self): def test_vrf(self):
vrfs = VRF.objects.unrestricted()[:2] vrfs = VRF.objects.all()[:2]
params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} params = {'vrf': [vrfs[0].rd, vrfs[1].rd]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_machine(self): def test_virtual_machine(self):
vms = VirtualMachine.objects.unrestricted()[:2] vms = VirtualMachine.objects.all()[:2]
params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'virtual_machine': [vms[0].name, vms[1].name]} params = {'virtual_machine': [vms[0].name, vms[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_interface(self): def test_interface(self):
interfaces = Interface.objects.unrestricted()[:2] interfaces = Interface.objects.all()[:2]
params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]} params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'interface': ['Interface 1', 'Interface 2']} params = {'interface': ['Interface 1', 'Interface 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_vminterface(self): def test_vminterface(self):
vminterfaces = VMInterface.objects.unrestricted()[:2] vminterfaces = VMInterface.objects.all()[:2]
params = {'vminterface_id': [vminterfaces[0].pk, vminterfaces[1].pk]} params = {'vminterface_id': [vminterfaces[0].pk, vminterfaces[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'vminterface': ['Interface 1', 'Interface 2']} params = {'vminterface': ['Interface 1', 'Interface 2']}
@ -515,14 +515,14 @@ class IPAddressTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -530,7 +530,7 @@ class IPAddressTestCase(TestCase):
class VLANGroupTestCase(TestCase): class VLANGroupTestCase(TestCase):
queryset = VLANGroup.objects.unrestricted() queryset = VLANGroup.objects.all()
filterset = VLANGroupFilterSet filterset = VLANGroupFilterSet
@classmethod @classmethod
@ -577,14 +577,14 @@ class VLANGroupTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
@ -592,7 +592,7 @@ class VLANGroupTestCase(TestCase):
class VLANTestCase(TestCase): class VLANTestCase(TestCase):
queryset = VLAN.objects.unrestricted() queryset = VLAN.objects.all()
filterset = VLANFilterSet filterset = VLANFilterSet
@classmethod @classmethod
@ -666,28 +666,28 @@ class VLANTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_group(self): def test_group(self):
groups = VLANGroup.objects.unrestricted()[:2] groups = VLANGroup.objects.all()[:2]
params = {'group_id': [groups[0].pk, groups[1].pk]} params = {'group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'group': [groups[0].slug, groups[1].slug]} params = {'group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_role(self): def test_role(self):
roles = Role.objects.unrestricted()[:2] roles = Role.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]} params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'role': [roles[0].slug, roles[1].slug]} params = {'role': [roles[0].slug, roles[1].slug]}
@ -698,14 +698,14 @@ class VLANTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -713,7 +713,7 @@ class VLANTestCase(TestCase):
class ServiceTestCase(TestCase): class ServiceTestCase(TestCase):
queryset = Service.objects.unrestricted() queryset = Service.objects.all()
filterset = ServiceFilterSet filterset = ServiceFilterSet
@classmethod @classmethod
@ -768,14 +768,14 @@ class ServiceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_machine(self): def test_virtual_machine(self):
vms = VirtualMachine.objects.unrestricted()[:2] vms = VirtualMachine.objects.all()[:2]
params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'virtual_machine': [vms[0].name, vms[1].name]} params = {'virtual_machine': [vms[0].name, vms[1].name]}

View File

@ -43,7 +43,7 @@ class TestPrefix(TestCase):
Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')), Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')),
Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')), Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')),
)) ))
duplicate_prefix_pks = [p.pk for p in prefixes[0].get_duplicates().unrestricted()] duplicate_prefix_pks = [p.pk for p in prefixes[0].get_duplicates()]
self.assertSetEqual(set(duplicate_prefix_pks), {prefixes[1].pk, prefixes[2].pk}) self.assertSetEqual(set(duplicate_prefix_pks), {prefixes[1].pk, prefixes[2].pk})
@ -227,7 +227,7 @@ class TestIPAddress(TestCase):
IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')), IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')),
IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')), IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')),
)) ))
duplicate_ip_pks = [p.pk for p in ips[0].get_duplicates().unrestricted()] duplicate_ip_pks = [p.pk for p in ips[0].get_duplicates()]
self.assertSetEqual(set(duplicate_ip_pks), {ips[1].pk, ips[2].pk}) self.assertSetEqual(set(duplicate_ip_pks), {ips[1].pk, ips[2].pk})

View File

@ -86,7 +86,7 @@ class PrefixOrderingTestCase(OrderingTestBase):
Prefix.objects.bulk_create(prefixes) Prefix.objects.bulk_create(prefixes)
# Test # Test
self._compare(Prefix.objects.unrestricted(), prefixes) self._compare(Prefix.objects.all(), prefixes)
def test_prefix_complex_ordering(self): def test_prefix_complex_ordering(self):
""" """
@ -122,7 +122,7 @@ class PrefixOrderingTestCase(OrderingTestBase):
Prefix.objects.bulk_create(prefixes) Prefix.objects.bulk_create(prefixes)
# Test # Test
self._compare(Prefix.objects.unrestricted(), prefixes) self._compare(Prefix.objects.all(), prefixes)
class IPAddressOrderingTestCase(OrderingTestBase): class IPAddressOrderingTestCase(OrderingTestBase):
@ -173,4 +173,4 @@ class IPAddressOrderingTestCase(OrderingTestBase):
IPAddress.objects.bulk_create(addresses) IPAddress.objects.bulk_create(addresses)
# Test # Test
self._compare(IPAddress.objects.unrestricted(), addresses) self._compare(IPAddress.objects.all(), addresses)

View File

@ -729,8 +729,7 @@ class VLANGroupVLANsView(ObjectView):
class VLANListView(ObjectListView): class VLANListView(ObjectListView):
queryset = VLAN.objects.prefetch_related( queryset = VLAN.objects.prefetch_related(
Prefetch('prefixes', Prefix.objects.unrestricted()), 'site', 'group', 'tenant', 'role', 'prefixes'
'site', 'group', 'tenant', 'role'
) )
filterset = filters.VLANFilterSet filterset = filters.VLANFilterSet
filterset_form = forms.VLANFilterForm filterset_form = forms.VLANFilterForm
@ -820,9 +819,7 @@ class ServiceListView(ObjectListView):
class ServiceView(ObjectView): class ServiceView(ObjectView):
queryset = Service.objects.prefetch_related( queryset = Service.objects.prefetch_related('ipaddresses')
Prefetch('ipaddresses', IPAddress.objects.unrestricted())
)
def get(self, request, pk): def get(self, request, pk):
@ -834,9 +831,7 @@ class ServiceView(ObjectView):
class ServiceEditView(ObjectEditView): class ServiceEditView(ObjectEditView):
queryset = Service.objects.prefetch_related( queryset = Service.objects.prefetch_related('ipaddresses')
Prefetch('ipaddresses', IPAddress.objects.unrestricted())
)
model_form = forms.ServiceForm model_form = forms.ServiceForm
template_name = 'ipam/service_edit.html' template_name = 'ipam/service_edit.html'

View File

@ -24,7 +24,7 @@ class ObjectPermissionBackend(ModelBackend):
Return all permissions granted to the user by an ObjectPermission. Return all permissions granted to the user by an ObjectPermission.
""" """
# Retrieve all assigned and enabled ObjectPermissions # Retrieve all assigned and enabled ObjectPermissions
object_permissions = ObjectPermission.objects.unrestricted().filter( object_permissions = ObjectPermission.objects.filter(
Q(users=user_obj) | Q(groups__user=user_obj), Q(users=user_obj) | Q(groups__user=user_obj),
enabled=True enabled=True
).prefetch_related('object_types') ).prefetch_related('object_types')

View File

@ -26,22 +26,22 @@ class SecretFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterS
label='Search', label='Search',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=SecretRole.objects.unrestricted(), queryset=SecretRole.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug', field_name='role__slug',
queryset=SecretRole.objects.unrestricted(), queryset=SecretRole.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
device_id = django_filters.ModelMultipleChoiceFilter( device_id = django_filters.ModelMultipleChoiceFilter(
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
label='Device (ID)', label='Device (ID)',
) )
device = django_filters.ModelMultipleChoiceFilter( device = django_filters.ModelMultipleChoiceFilter(
field_name='device__name', field_name='device__name',
queryset=Device.objects.unrestricted(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
label='Device (name)', label='Device (name)',
) )

View File

@ -6,7 +6,7 @@ from secrets.models import Secret, SecretRole
class SecretRoleTestCase(TestCase): class SecretRoleTestCase(TestCase):
queryset = SecretRole.objects.unrestricted() queryset = SecretRole.objects.all()
filterset = SecretRoleFilterSet filterset = SecretRoleFilterSet
@classmethod @classmethod
@ -33,7 +33,7 @@ class SecretRoleTestCase(TestCase):
class SecretTestCase(TestCase): class SecretTestCase(TestCase):
queryset = Secret.objects.unrestricted() queryset = Secret.objects.all()
filterset = SecretFilterSet filterset = SecretFilterSet
@classmethod @classmethod
@ -76,14 +76,14 @@ class SecretTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self): def test_role(self):
roles = SecretRole.objects.unrestricted()[:2] roles = SecretRole.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]} params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [roles[0].slug, roles[1].slug]} params = {'role': [roles[0].slug, roles[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_device(self): def test_device(self):
devices = Device.objects.unrestricted()[:2] devices = Device.objects.all()[:2]
params = {'device_id': [devices[0].pk, devices[1].pk]} params = {'device_id': [devices[0].pk, devices[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'device': [devices[0].name, devices[1].name]} params = {'device': [devices[0].name, devices[1].name]}

View File

@ -15,12 +15,12 @@ __all__ = (
class TenantGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class TenantGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
label='Tenant group (ID)', label='Tenant group (ID)',
) )
parent = django_filters.ModelMultipleChoiceFilter( parent = django_filters.ModelMultipleChoiceFilter(
field_name='parent__slug', field_name='parent__slug',
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Tenant group group (slug)', label='Tenant group group (slug)',
) )
@ -36,13 +36,13 @@ class TenantFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterS
label='Search', label='Search',
) )
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
field_name='group', field_name='group',
lookup_expr='in', lookup_expr='in',
label='Tenant group (ID)', label='Tenant group (ID)',
) )
group = TreeNodeMultipleChoiceFilter( group = TreeNodeMultipleChoiceFilter(
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
field_name='group', field_name='group',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -70,24 +70,24 @@ class TenancyFilterSet(django_filters.FilterSet):
An inheritable FilterSet for models which support Tenant assignment. An inheritable FilterSet for models which support Tenant assignment.
""" """
tenant_group_id = TreeNodeMultipleChoiceFilter( tenant_group_id = TreeNodeMultipleChoiceFilter(
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
field_name='tenant__group', field_name='tenant__group',
lookup_expr='in', lookup_expr='in',
label='Tenant Group (ID)', label='Tenant Group (ID)',
) )
tenant_group = TreeNodeMultipleChoiceFilter( tenant_group = TreeNodeMultipleChoiceFilter(
queryset=TenantGroup.objects.unrestricted(), queryset=TenantGroup.objects.all(),
field_name='tenant__group', field_name='tenant__group',
to_field_name='slug', to_field_name='slug',
lookup_expr='in', lookup_expr='in',
label='Tenant Group (slug)', label='Tenant Group (slug)',
) )
tenant_id = django_filters.ModelMultipleChoiceFilter( tenant_id = django_filters.ModelMultipleChoiceFilter(
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
label='Tenant (ID)', label='Tenant (ID)',
) )
tenant = django_filters.ModelMultipleChoiceFilter( tenant = django_filters.ModelMultipleChoiceFilter(
queryset=Tenant.objects.unrestricted(), queryset=Tenant.objects.all(),
field_name='tenant__slug', field_name='tenant__slug',
to_field_name='slug', to_field_name='slug',
label='Tenant (slug)', label='Tenant (slug)',

View File

@ -5,7 +5,7 @@ from tenancy.models import Tenant, TenantGroup
class TenantGroupTestCase(TestCase): class TenantGroupTestCase(TestCase):
queryset = TenantGroup.objects.unrestricted() queryset = TenantGroup.objects.all()
filterset = TenantGroupFilterSet filterset = TenantGroupFilterSet
@classmethod @classmethod
@ -52,7 +52,7 @@ class TenantGroupTestCase(TestCase):
class TenantTestCase(TestCase): class TenantTestCase(TestCase):
queryset = Tenant.objects.unrestricted() queryset = Tenant.objects.all()
filterset = TenantFilterSet filterset = TenantFilterSet
@classmethod @classmethod
@ -86,7 +86,7 @@ class TenantTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_group(self): def test_group(self):
group = TenantGroup.objects.unrestricted()[:2] group = TenantGroup.objects.all()[:2]
params = {'group_id': [group[0].pk, group[1].pk]} params = {'group_id': [group[0].pk, group[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'group': [group[0].slug, group[1].slug]} params = {'group': [group[0].slug, group[1].slug]}

View File

@ -180,7 +180,7 @@ class ActionListFilter(admin.SimpleListFilter):
def lookups(self, request, model_admin): def lookups(self, request, model_admin):
options = set() options = set()
for action_list in ObjectPermission.objects.unrestricted().values_list('actions', flat=True).distinct(): for action_list in ObjectPermission.objects.values_list('actions', flat=True).distinct():
options.update(action_list) options.update(action_list)
return [ return [
(action, action) for action in sorted(options) (action, action) for action in sorted(options)
@ -196,7 +196,7 @@ class ObjectTypeListFilter(admin.SimpleListFilter):
parameter_name = 'object_type' parameter_name = 'object_type'
def lookups(self, request, model_admin): def lookups(self, request, model_admin):
object_types = ObjectPermission.objects.unrestricted().values_list('id', flat=True).distinct() object_types = ObjectPermission.objects.values_list('id', flat=True).distinct()
content_types = ContentType.objects.filter(pk__in=object_types).order_by('app_label', 'model') content_types = ContentType.objects.filter(pk__in=object_types).order_by('app_label', 'model')
return [ return [
(ct.pk, ct) for ct in content_types (ct.pk, ct) for ct in content_types
@ -238,7 +238,7 @@ class ObjectPermissionAdmin(admin.ModelAdmin):
] ]
def get_queryset(self, request): def get_queryset(self, request):
return super().get_queryset(request).unrestricted().prefetch_related('object_types', 'users', 'groups') return super().get_queryset(request).prefetch_related('object_types', 'users', 'groups')
def get_name(self, obj): def get_name(self, obj):
return obj.name or f'Permission #{obj.pk}' return obj.name or f'Permission #{obj.pk}'

View File

@ -244,8 +244,6 @@ class WritableNestedSerializer(serializers.ModelSerializer):
if isinstance(data, dict): if isinstance(data, dict):
params = dict_to_filter_params(data) params = dict_to_filter_params(data)
queryset = self.Meta.model.objects queryset = self.Meta.model.objects
if hasattr(queryset, 'restrict'):
queryset = queryset.unrestricted()
try: try:
return queryset.get(**params) return queryset.get(**params)
except ObjectDoesNotExist: except ObjectDoesNotExist:
@ -274,8 +272,6 @@ class WritableNestedSerializer(serializers.ModelSerializer):
# Look up object by PK # Look up object by PK
queryset = self.Meta.model.objects queryset = self.Meta.model.objects
if hasattr(queryset, 'restrict'):
queryset = queryset.unrestricted()
try: try:
return queryset.get(pk=int(data)) return queryset.get(pk=int(data))
except ObjectDoesNotExist: except ObjectDoesNotExist:

View File

@ -16,8 +16,4 @@ class TreeManager(Manager.from_queryset(TreeQuerySet), TreeManager_):
""" """
Extend django-mptt's TreeManager to incorporate RestrictedQuerySet(). Extend django-mptt's TreeManager to incorporate RestrictedQuerySet().
""" """
def db_manager(self, using=None, hints=None): pass
manager = super().db_manager(using, hints)
# Return an unrestricted QuerySet for use by MPTT
return manager.unrestricted()

View File

@ -1,5 +1,3 @@
import logging
from django.db.models import Q, QuerySet from django.db.models import Q, QuerySet
from utilities.permissions import permission_is_exempt from utilities.permissions import permission_is_exempt
@ -21,44 +19,6 @@ class DummyQuerySet:
class RestrictedQuerySet(QuerySet): class RestrictedQuerySet(QuerySet):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Initialize the allow_evaluation flag to False. This indicates that the QuerySet has not yet been restricted.
self.allow_evaluation = False
def _check_restriction(self):
# Raise a warning if the QuerySet is evaluated without first calling restrict() or unrestricted().
if not getattr(self, 'allow_evaluation', False):
logger = logging.getLogger('netbox.RestrictedQuerySet')
logger.warning(
f'Evaluation of RestrictedQuerySet prior to calling restrict() or unrestricted(): {self.model}'
)
def _clone(self):
# Persist the allow_evaluation flag when cloning the QuerySet.
c = super()._clone()
c.allow_evaluation = self.allow_evaluation
return c
def _fetch_all(self):
self._check_restriction()
return super()._fetch_all()
def count(self):
self._check_restriction()
return super().count()
def unrestricted(self):
"""
Bypass restriction for the QuerySet. This is necessary in cases where we are not interacting with the objects
directly (e.g. when filtering by related object).
"""
self.allow_evaluation = True
return self
def restrict(self, user, action='view'): def restrict(self, user, action='view'):
""" """
Filter the QuerySet to return only objects on which the specified user has been granted the specified Filter the QuerySet to return only objects on which the specified user has been granted the specified
@ -88,7 +48,4 @@ class RestrictedQuerySet(QuerySet):
attrs |= Q(**perm_attrs) attrs |= Q(**perm_attrs)
qs = self.filter(attrs) qs = self.filter(attrs)
# Allow QuerySet evaluation
qs.allow_evaluation = True
return qs return qs

View File

@ -158,10 +158,8 @@ class ModelTestCase(TestCase):
def _get_queryset(self): def _get_queryset(self):
""" """
Return a base queryset suitable for use in test methods. Call unrestricted() if RestrictedQuerySet is in use. Return a base queryset suitable for use in test methods.
""" """
if hasattr(self.model.objects, 'restrict'):
return self.model.objects.unrestricted()
return self.model.objects.all() return self.model.objects.all()

View File

@ -79,8 +79,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet):
class VMInterfaceViewSet(ModelViewSet): class VMInterfaceViewSet(ModelViewSet):
queryset = VMInterface.objects.prefetch_related( queryset = VMInterface.objects.prefetch_related(
Prefetch('tagged_vlans', queryset=VLAN.objects.unrestricted()), 'virtual_machine', 'tags', 'tagged_vlans'
'virtual_machine', 'tags'
) )
serializer_class = serializers.VMInterfaceSerializer serializer_class = serializers.VMInterfaceSerializer
filterset_class = filters.VMInterfaceFilterSet filterset_class = filters.VMInterfaceFilterSet

View File

@ -40,45 +40,45 @@ class ClusterFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cr
label='Search', label='Search',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='site__region', field_name='site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
label='Region (slug)', label='Region (slug)',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug', field_name='site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
label='Parent group (ID)', label='Parent group (ID)',
) )
group = django_filters.ModelMultipleChoiceFilter( group = django_filters.ModelMultipleChoiceFilter(
field_name='group__slug', field_name='group__slug',
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Parent group (slug)', label='Parent group (slug)',
) )
type_id = django_filters.ModelMultipleChoiceFilter( type_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterType.objects.unrestricted(), queryset=ClusterType.objects.all(),
label='Cluster type (ID)', label='Cluster type (ID)',
) )
type = django_filters.ModelMultipleChoiceFilter( type = django_filters.ModelMultipleChoiceFilter(
field_name='type__slug', field_name='type__slug',
queryset=ClusterType.objects.unrestricted(), queryset=ClusterType.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Cluster type (slug)', label='Cluster type (slug)',
) )
@ -114,38 +114,38 @@ class VirtualMachineFilterSet(
) )
cluster_group_id = django_filters.ModelMultipleChoiceFilter( cluster_group_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__group', field_name='cluster__group',
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
label='Cluster group (ID)', label='Cluster group (ID)',
) )
cluster_group = django_filters.ModelMultipleChoiceFilter( cluster_group = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__group__slug', field_name='cluster__group__slug',
queryset=ClusterGroup.objects.unrestricted(), queryset=ClusterGroup.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Cluster group (slug)', label='Cluster group (slug)',
) )
cluster_type_id = django_filters.ModelMultipleChoiceFilter( cluster_type_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__type', field_name='cluster__type',
queryset=ClusterType.objects.unrestricted(), queryset=ClusterType.objects.all(),
label='Cluster type (ID)', label='Cluster type (ID)',
) )
cluster_type = django_filters.ModelMultipleChoiceFilter( cluster_type = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__type__slug', field_name='cluster__type__slug',
queryset=ClusterType.objects.unrestricted(), queryset=ClusterType.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Cluster type (slug)', label='Cluster type (slug)',
) )
cluster_id = django_filters.ModelMultipleChoiceFilter( cluster_id = django_filters.ModelMultipleChoiceFilter(
queryset=Cluster.objects.unrestricted(), queryset=Cluster.objects.all(),
label='Cluster (ID)', label='Cluster (ID)',
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='cluster__site__region', field_name='cluster__site__region',
lookup_expr='in', lookup_expr='in',
label='Region (ID)', label='Region (ID)',
) )
region = TreeNodeMultipleChoiceFilter( region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(), queryset=Region.objects.all(),
field_name='cluster__site__region', field_name='cluster__site__region',
lookup_expr='in', lookup_expr='in',
to_field_name='slug', to_field_name='slug',
@ -153,32 +153,32 @@ class VirtualMachineFilterSet(
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__site', field_name='cluster__site',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__site__slug', field_name='cluster__site__slug',
queryset=Site.objects.unrestricted(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Site (slug)', label='Site (slug)',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug', field_name='role__slug',
queryset=DeviceRole.objects.unrestricted(), queryset=DeviceRole.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
platform_id = django_filters.ModelMultipleChoiceFilter( platform_id = django_filters.ModelMultipleChoiceFilter(
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
label='Platform (ID)', label='Platform (ID)',
) )
platform = django_filters.ModelMultipleChoiceFilter( platform = django_filters.ModelMultipleChoiceFilter(
field_name='platform__slug', field_name='platform__slug',
queryset=Platform.objects.unrestricted(), queryset=Platform.objects.all(),
to_field_name='slug', to_field_name='slug',
label='Platform (slug)', label='Platform (slug)',
) )
@ -208,23 +208,23 @@ class VMInterfaceFilterSet(BaseFilterSet):
) )
cluster_id = django_filters.ModelMultipleChoiceFilter( cluster_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster', field_name='virtual_machine__cluster',
queryset=Cluster.objects.unrestricted(), queryset=Cluster.objects.all(),
label='Cluster (ID)', label='Cluster (ID)',
) )
cluster = django_filters.ModelMultipleChoiceFilter( cluster = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster__name', field_name='virtual_machine__cluster__name',
queryset=Cluster.objects.unrestricted(), queryset=Cluster.objects.all(),
to_field_name='name', to_field_name='name',
label='Cluster', label='Cluster',
) )
virtual_machine_id = django_filters.ModelMultipleChoiceFilter( virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine', field_name='virtual_machine',
queryset=VirtualMachine.objects.unrestricted(), queryset=VirtualMachine.objects.all(),
label='Virtual machine (ID)', label='Virtual machine (ID)',
) )
virtual_machine = django_filters.ModelMultipleChoiceFilter( virtual_machine = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__name', field_name='virtual_machine__name',
queryset=VirtualMachine.objects.unrestricted(), queryset=VirtualMachine.objects.all(),
to_field_name='name', to_field_name='name',
label='Virtual machine', label='Virtual machine',
) )

View File

@ -177,7 +177,7 @@ class Cluster(ChangeLoggedModel, CustomFieldModel):
# If the Cluster is assigned to a Site, verify that all host Devices belong to that Site. # If the Cluster is assigned to a Site, verify that all host Devices belong to that Site.
if self.pk and self.site: if self.pk and self.site:
nonsite_devices = Device.objects.unrestricted().filter(cluster=self).exclude(site=self.site).count() nonsite_devices = Device.objects.filter(cluster=self).exclude(site=self.site).count()
if nonsite_devices: if nonsite_devices:
raise ValidationError({ raise ValidationError({
'site': "{} devices are assigned as hosts for this cluster but are not in site {}".format( 'site': "{} devices are assigned as hosts for this cluster but are not in site {}".format(
@ -317,7 +317,7 @@ class VirtualMachine(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
# Check for a duplicate name on a VM assigned to the same Cluster and no Tenant. This is necessary # Check for a duplicate name on a VM assigned to the same Cluster and no Tenant. This is necessary
# because Django does not consider two NULL fields to be equal, and thus will not trigger a violation # because Django does not consider two NULL fields to be equal, and thus will not trigger a violation
# of the uniqueness constraint without manual intervention. # of the uniqueness constraint without manual intervention.
if self.tenant is None and VirtualMachine.objects.unrestricted().exclude(pk=self.pk).filter( if self.tenant is None and VirtualMachine.objects.exclude(pk=self.pk).filter(
name=self.name, tenant__isnull=True name=self.name, tenant__isnull=True
): ):
raise ValidationError({ raise ValidationError({

View File

@ -164,7 +164,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase):
""" """
Check that config context data is included by default in the virtual machines list. Check that config context data is included by default in the virtual machines list.
""" """
virtualmachine = VirtualMachine.objects.unrestricted().first() virtualmachine = VirtualMachine.objects.first()
url = '{}?id={}'.format(reverse('virtualization-api:virtualmachine-list'), virtualmachine.pk) url = '{}?id={}'.format(reverse('virtualization-api:virtualmachine-list'), virtualmachine.pk)
self.add_permissions('virtualization.view_virtualmachine') self.add_permissions('virtualization.view_virtualmachine')
@ -187,7 +187,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase):
""" """
data = { data = {
'name': 'Virtual Machine 1', 'name': 'Virtual Machine 1',
'cluster': Cluster.objects.unrestricted().first().pk, 'cluster': Cluster.objects.first().pk,
} }
url = reverse('virtualization-api:virtualmachine-list') url = reverse('virtualization-api:virtualmachine-list')
self.add_permissions('virtualization.add_virtualmachine') self.add_permissions('virtualization.add_virtualmachine')
@ -260,7 +260,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase):
self.add_permissions('virtualization.view_vminterface') self.add_permissions('virtualization.view_vminterface')
url = reverse('virtualization-api:vminterface-graphs', kwargs={ url = reverse('virtualization-api:vminterface-graphs', kwargs={
'pk': VMInterface.objects.unrestricted().first().pk 'pk': VMInterface.objects.first().pk
}) })
response = self.client.get(url, **self.header) response = self.client.get(url, **self.header)

View File

@ -8,7 +8,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMac
class ClusterTypeTestCase(TestCase): class ClusterTypeTestCase(TestCase):
queryset = ClusterType.objects.unrestricted() queryset = ClusterType.objects.all()
filterset = ClusterTypeFilterSet filterset = ClusterTypeFilterSet
@classmethod @classmethod
@ -39,7 +39,7 @@ class ClusterTypeTestCase(TestCase):
class ClusterGroupTestCase(TestCase): class ClusterGroupTestCase(TestCase):
queryset = ClusterGroup.objects.unrestricted() queryset = ClusterGroup.objects.all()
filterset = ClusterGroupFilterSet filterset = ClusterGroupFilterSet
@classmethod @classmethod
@ -70,7 +70,7 @@ class ClusterGroupTestCase(TestCase):
class ClusterTestCase(TestCase): class ClusterTestCase(TestCase):
queryset = Cluster.objects.unrestricted() queryset = Cluster.objects.all()
filterset = ClusterFilterSet filterset = ClusterFilterSet
@classmethod @classmethod
@ -137,42 +137,42 @@ class ClusterTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_group(self): def test_group(self):
groups = ClusterGroup.objects.unrestricted()[:2] groups = ClusterGroup.objects.all()[:2]
params = {'group_id': [groups[0].pk, groups[1].pk]} params = {'group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'group': [groups[0].slug, groups[1].slug]} params = {'group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_type(self): def test_type(self):
types = ClusterType.objects.unrestricted()[:2] types = ClusterType.objects.all()[:2]
params = {'type_id': [types[0].pk, types[1].pk]} params = {'type_id': [types[0].pk, types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'type': [types[0].slug, types[1].slug]} params = {'type': [types[0].slug, types[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -180,7 +180,7 @@ class ClusterTestCase(TestCase):
class VirtualMachineTestCase(TestCase): class VirtualMachineTestCase(TestCase):
queryset = VirtualMachine.objects.unrestricted() queryset = VirtualMachine.objects.all()
filterset = VirtualMachineFilterSet filterset = VirtualMachineFilterSet
@classmethod @classmethod
@ -291,21 +291,21 @@ class VirtualMachineTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster_group(self): def test_cluster_group(self):
groups = ClusterGroup.objects.unrestricted()[:2] groups = ClusterGroup.objects.all()[:2]
params = {'cluster_group_id': [groups[0].pk, groups[1].pk]} params = {'cluster_group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'cluster_group': [groups[0].slug, groups[1].slug]} params = {'cluster_group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster_type(self): def test_cluster_type(self):
types = ClusterType.objects.unrestricted()[:2] types = ClusterType.objects.all()[:2]
params = {'cluster_type_id': [types[0].pk, types[1].pk]} params = {'cluster_type_id': [types[0].pk, types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'cluster_type': [types[0].slug, types[1].slug]} params = {'cluster_type': [types[0].slug, types[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster(self): def test_cluster(self):
clusters = Cluster.objects.unrestricted()[:2] clusters = Cluster.objects.all()[:2]
params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} params = {'cluster_id': [clusters[0].pk, clusters[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
# TODO: 'cluster' should match on name # TODO: 'cluster' should match on name
@ -313,28 +313,28 @@ class VirtualMachineTestCase(TestCase):
# self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) # self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self): def test_region(self):
regions = Region.objects.unrestricted()[:2] regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]} params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]} params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self): def test_site(self):
sites = Site.objects.unrestricted()[:2] sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]} params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]} params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self): def test_role(self):
roles = DeviceRole.objects.unrestricted()[:2] roles = DeviceRole.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]} params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [roles[0].slug, roles[1].slug]} params = {'role': [roles[0].slug, roles[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_platform(self): def test_platform(self):
platforms = Platform.objects.unrestricted()[:2] platforms = Platform.objects.all()[:2]
params = {'platform_id': [platforms[0].pk, platforms[1].pk]} params = {'platform_id': [platforms[0].pk, platforms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'platform': [platforms[0].slug, platforms[1].slug]} params = {'platform': [platforms[0].slug, platforms[1].slug]}
@ -351,14 +351,14 @@ class VirtualMachineTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self): def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2] tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]} params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self): def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2] tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@ -366,7 +366,7 @@ class VirtualMachineTestCase(TestCase):
class VMInterfaceTestCase(TestCase): class VMInterfaceTestCase(TestCase):
queryset = VMInterface.objects.unrestricted() queryset = VMInterface.objects.all()
filterset = VMInterfaceFilterSet filterset = VMInterfaceFilterSet
@classmethod @classmethod
@ -420,7 +420,7 @@ class VMInterfaceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_machine(self): def test_virtual_machine(self):
vms = VirtualMachine.objects.unrestricted()[:2] vms = VirtualMachine.objects.all()[:2]
params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'virtual_machine': [vms[0].name, vms[1].name]} params = {'virtual_machine': [vms[0].name, vms[1].name]}