mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-30 04:16:24 -06:00
Misc cleanup
This commit is contained in:
parent
9dace08ed1
commit
3d45fabcfc
@ -26,26 +26,26 @@ __all__ = (
|
|||||||
class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
|
class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
|
||||||
region_id = TreeNodeMultipleChoiceFilter(
|
region_id = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
field_name='circuits__terminations___site__region',
|
field_name='circuits__terminations___region',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
label=_('Region (ID)'),
|
label=_('Region (ID)'),
|
||||||
)
|
)
|
||||||
region = TreeNodeMultipleChoiceFilter(
|
region = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
field_name='circuits__terminations___site__region',
|
field_name='circuits__terminations___region',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
label=_('Region (slug)'),
|
label=_('Region (slug)'),
|
||||||
)
|
)
|
||||||
site_group_id = TreeNodeMultipleChoiceFilter(
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=SiteGroup.objects.all(),
|
queryset=SiteGroup.objects.all(),
|
||||||
field_name='circuits__terminations___site__group',
|
field_name='circuits__terminations___site_group',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
label=_('Site group (ID)'),
|
label=_('Site group (ID)'),
|
||||||
)
|
)
|
||||||
site_group = TreeNodeMultipleChoiceFilter(
|
site_group = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=SiteGroup.objects.all(),
|
queryset=SiteGroup.objects.all(),
|
||||||
field_name='circuits__terminations___site__group',
|
field_name='circuits__terminations___site_group',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
label=_('Site group (slug)'),
|
label=_('Site group (slug)'),
|
||||||
@ -193,26 +193,26 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte
|
|||||||
)
|
)
|
||||||
region_id = TreeNodeMultipleChoiceFilter(
|
region_id = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
field_name='terminations___site__region',
|
field_name='terminations___region',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
label=_('Region (ID)'),
|
label=_('Region (ID)'),
|
||||||
)
|
)
|
||||||
region = TreeNodeMultipleChoiceFilter(
|
region = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
field_name='terminations___site__region',
|
field_name='terminations___region',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
label=_('Region (slug)'),
|
label=_('Region (slug)'),
|
||||||
)
|
)
|
||||||
site_group_id = TreeNodeMultipleChoiceFilter(
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=SiteGroup.objects.all(),
|
queryset=SiteGroup.objects.all(),
|
||||||
field_name='terminations___site__group',
|
field_name='terminations___site_group',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
label=_('Site group (ID)'),
|
label=_('Site group (ID)'),
|
||||||
)
|
)
|
||||||
site_group = TreeNodeMultipleChoiceFilter(
|
site_group = TreeNodeMultipleChoiceFilter(
|
||||||
queryset=SiteGroup.objects.all(),
|
queryset=SiteGroup.objects.all(),
|
||||||
field_name='terminations___site__group',
|
field_name='terminations___site_group',
|
||||||
lookup_expr='in',
|
lookup_expr='in',
|
||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
label=_('Site group (slug)'),
|
label=_('Site group (slug)'),
|
||||||
|
@ -143,7 +143,7 @@ class CircuitTerminationImportRelatedForm(BaseCircuitTerminationImportForm):
|
|||||||
'pp_info', 'description'
|
'pp_info', 'description'
|
||||||
]
|
]
|
||||||
labels = {
|
labels = {
|
||||||
'termination_id': 'Termination ID',
|
'termination_id': _('Termination ID'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination
|
|||||||
'pp_info', 'description', 'tags'
|
'pp_info', 'description', 'tags'
|
||||||
]
|
]
|
||||||
labels = {
|
labels = {
|
||||||
'termination_id': 'Termination ID',
|
'termination_id': _('Termination ID'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import json
|
|
||||||
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
@ -192,36 +191,31 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|||||||
|
|
||||||
@override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[])
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[])
|
||||||
def test_bulk_import_objects_with_terminations(self):
|
def test_bulk_import_objects_with_terminations(self):
|
||||||
json_data = """
|
site = Site.objects.first()
|
||||||
|
json_data = f"""
|
||||||
[
|
[
|
||||||
{
|
{{
|
||||||
"cid": "Circuit 7",
|
"cid": "Circuit 7",
|
||||||
"provider": "Provider 1",
|
"provider": "Provider 1",
|
||||||
"type": "Circuit Type 1",
|
"type": "Circuit Type 1",
|
||||||
"status": "active",
|
"status": "active",
|
||||||
"description": "Testing Import",
|
"description": "Testing Import",
|
||||||
"terminations": [
|
"terminations": [
|
||||||
{
|
{{
|
||||||
"term_side": "A",
|
"term_side": "A",
|
||||||
"termination_type": "dcim.site",
|
"termination_type": "dcim.site",
|
||||||
"termination_id": "1"
|
"termination_id": "{site.pk}"
|
||||||
},
|
}},
|
||||||
{
|
{{
|
||||||
"term_side": "Z",
|
"term_side": "Z",
|
||||||
"termination_type": "dcim.site",
|
"termination_type": "dcim.site",
|
||||||
"termination_id": "1"
|
"termination_id": "{site.pk}"
|
||||||
}
|
}}
|
||||||
]
|
]
|
||||||
}
|
}}
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Fix up the termination site id
|
|
||||||
site = Site.objects.first()
|
|
||||||
data = json.loads(json_data)
|
|
||||||
data[0]["terminations"][0]["termination_id"] = data[0]["terminations"][1]["termination_id"] = site.id
|
|
||||||
json_data = json.dumps(data)
|
|
||||||
|
|
||||||
initial_count = self._get_queryset().count()
|
initial_count = self._get_queryset().count()
|
||||||
data = {
|
data = {
|
||||||
'data': json_data,
|
'data': json_data,
|
||||||
|
@ -257,8 +257,7 @@ class CircuitTypeBulkDeleteView(generic.BulkDeleteView):
|
|||||||
|
|
||||||
class CircuitListView(generic.ObjectListView):
|
class CircuitListView(generic.ObjectListView):
|
||||||
queryset = Circuit.objects.prefetch_related(
|
queryset = Circuit.objects.prefetch_related(
|
||||||
'tenant__group', 'termination_a___site', 'termination_z___site',
|
'tenant__group', 'termination_a__termination', 'termination_z__termination',
|
||||||
'termination_a___provider_network', 'termination_z___provider_network',
|
|
||||||
)
|
)
|
||||||
filterset = filtersets.CircuitFilterSet
|
filterset = filtersets.CircuitFilterSet
|
||||||
filterset_form = forms.CircuitFilterForm
|
filterset_form = forms.CircuitFilterForm
|
||||||
@ -298,8 +297,7 @@ class CircuitBulkImportView(generic.BulkImportView):
|
|||||||
|
|
||||||
class CircuitBulkEditView(generic.BulkEditView):
|
class CircuitBulkEditView(generic.BulkEditView):
|
||||||
queryset = Circuit.objects.prefetch_related(
|
queryset = Circuit.objects.prefetch_related(
|
||||||
'termination_a___site', 'termination_z___site',
|
'tenant__group', 'termination_a__termination', 'termination_z__termination',
|
||||||
'termination_a___provider_network', 'termination_z___provider_network',
|
|
||||||
)
|
)
|
||||||
filterset = filtersets.CircuitFilterSet
|
filterset = filtersets.CircuitFilterSet
|
||||||
table = tables.CircuitTable
|
table = tables.CircuitTable
|
||||||
@ -308,8 +306,7 @@ class CircuitBulkEditView(generic.BulkEditView):
|
|||||||
|
|
||||||
class CircuitBulkDeleteView(generic.BulkDeleteView):
|
class CircuitBulkDeleteView(generic.BulkDeleteView):
|
||||||
queryset = Circuit.objects.prefetch_related(
|
queryset = Circuit.objects.prefetch_related(
|
||||||
'termination_a___site', 'termination_z___site',
|
'tenant__group', 'termination_a__termination', 'termination_z__termination',
|
||||||
'termination_a___provider_network', 'termination_z___provider_network',
|
|
||||||
)
|
)
|
||||||
filterset = filtersets.CircuitFilterSet
|
filterset = filtersets.CircuitFilterSet
|
||||||
table = tables.CircuitTable
|
table = tables.CircuitTable
|
||||||
|
@ -461,6 +461,10 @@ class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, Organi
|
|||||||
devices: List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]]
|
devices: List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]]
|
||||||
children: List[Annotated["LocationType", strawberry.lazy('dcim.graphql.types')]]
|
children: List[Annotated["LocationType", strawberry.lazy('dcim.graphql.types')]]
|
||||||
|
|
||||||
|
@strawberry_django.field
|
||||||
|
def circuit_terminations(self) -> List[Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')]]:
|
||||||
|
return self.circuit_terminations.all()
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.type(
|
@strawberry_django.type(
|
||||||
models.Manufacturer,
|
models.Manufacturer,
|
||||||
@ -704,6 +708,10 @@ class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
|
|||||||
def parent(self) -> Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None:
|
def parent(self) -> Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None:
|
||||||
return self.parent
|
return self.parent
|
||||||
|
|
||||||
|
@strawberry_django.field
|
||||||
|
def circuit_terminations(self) -> List[Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')]]:
|
||||||
|
return self.circuit_terminations.all()
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.type(
|
@strawberry_django.type(
|
||||||
models.Site,
|
models.Site,
|
||||||
@ -748,6 +756,10 @@ class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
|
|||||||
def parent(self) -> Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None:
|
def parent(self) -> Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None:
|
||||||
return self.parent
|
return self.parent
|
||||||
|
|
||||||
|
@strawberry_django.field
|
||||||
|
def circuit_terminations(self) -> List[Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')]]:
|
||||||
|
return self.circuit_terminations.all()
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.type(
|
@strawberry_django.type(
|
||||||
models.VirtualChassis,
|
models.VirtualChassis,
|
||||||
|
@ -242,6 +242,10 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
extra=(
|
extra=(
|
||||||
(Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
(Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
||||||
(Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
(Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
||||||
|
(
|
||||||
|
Circuit.objects.restrict(request.user, 'view').filter(terminations___region=instance).distinct(),
|
||||||
|
'region_id'
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -324,6 +328,10 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
extra=(
|
extra=(
|
||||||
(Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
(Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
(Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
(Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
|
(
|
||||||
|
Circuit.objects.restrict(request.user, 'view').filter(terminations___site_group=instance).distinct(),
|
||||||
|
'site_group_id'
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -404,8 +412,10 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
scope_id=instance.pk
|
scope_id=instance.pk
|
||||||
), 'site'),
|
), 'site'),
|
||||||
(ASN.objects.restrict(request.user, 'view').filter(sites=instance), 'site_id'),
|
(ASN.objects.restrict(request.user, 'view').filter(sites=instance), 'site_id'),
|
||||||
(Circuit.objects.restrict(request.user, 'view').filter(terminations___site=instance).distinct(),
|
(
|
||||||
'site_id'),
|
Circuit.objects.restrict(request.user, 'view').filter(terminations___site=instance).distinct(),
|
||||||
|
'site_id'
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -475,7 +485,17 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
def get_extra_context(self, request, instance):
|
def get_extra_context(self, request, instance):
|
||||||
locations = instance.get_descendants(include_self=True)
|
locations = instance.get_descendants(include_self=True)
|
||||||
return {
|
return {
|
||||||
'related_models': self.get_related_models(request, locations, [CableTermination]),
|
'related_models': self.get_related_models(
|
||||||
|
request,
|
||||||
|
locations,
|
||||||
|
[CableTermination],
|
||||||
|
(
|
||||||
|
(
|
||||||
|
Circuit.objects.restrict(request.user, 'view').filter(terminations___location=instance).distinct(),
|
||||||
|
'location_id'
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user