mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Relocate and group generic views
This commit is contained in:
parent
8714c33e8a
commit
b3c770216e
@ -4,11 +4,9 @@ from django.db.models import Count
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django_tables2 import RequestConfig
|
||||
|
||||
from netbox.views import generic
|
||||
from utilities.forms import ConfirmationForm
|
||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
||||
from utilities.views import (
|
||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||
)
|
||||
from . import filters, forms, tables
|
||||
from .choices import CircuitTerminationSideChoices
|
||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||
@ -18,14 +16,14 @@ from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||
# Providers
|
||||
#
|
||||
|
||||
class ProviderListView(ObjectListView):
|
||||
class ProviderListView(generic.ObjectListView):
|
||||
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
|
||||
filterset = filters.ProviderFilterSet
|
||||
filterset_form = forms.ProviderFilterForm
|
||||
table = tables.ProviderTable
|
||||
|
||||
|
||||
class ProviderView(ObjectView):
|
||||
class ProviderView(generic.ObjectView):
|
||||
queryset = Provider.objects.all()
|
||||
|
||||
def get(self, request, slug):
|
||||
@ -52,30 +50,30 @@ class ProviderView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class ProviderEditView(ObjectEditView):
|
||||
class ProviderEditView(generic.ObjectEditView):
|
||||
queryset = Provider.objects.all()
|
||||
model_form = forms.ProviderForm
|
||||
template_name = 'circuits/provider_edit.html'
|
||||
|
||||
|
||||
class ProviderDeleteView(ObjectDeleteView):
|
||||
class ProviderDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Provider.objects.all()
|
||||
|
||||
|
||||
class ProviderBulkImportView(BulkImportView):
|
||||
class ProviderBulkImportView(generic.BulkImportView):
|
||||
queryset = Provider.objects.all()
|
||||
model_form = forms.ProviderCSVForm
|
||||
table = tables.ProviderTable
|
||||
|
||||
|
||||
class ProviderBulkEditView(BulkEditView):
|
||||
class ProviderBulkEditView(generic.BulkEditView):
|
||||
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
|
||||
filterset = filters.ProviderFilterSet
|
||||
table = tables.ProviderTable
|
||||
form = forms.ProviderBulkEditForm
|
||||
|
||||
|
||||
class ProviderBulkDeleteView(BulkDeleteView):
|
||||
class ProviderBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
|
||||
filterset = filters.ProviderFilterSet
|
||||
table = tables.ProviderTable
|
||||
@ -85,27 +83,27 @@ class ProviderBulkDeleteView(BulkDeleteView):
|
||||
# Circuit Types
|
||||
#
|
||||
|
||||
class CircuitTypeListView(ObjectListView):
|
||||
class CircuitTypeListView(generic.ObjectListView):
|
||||
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering)
|
||||
table = tables.CircuitTypeTable
|
||||
|
||||
|
||||
class CircuitTypeEditView(ObjectEditView):
|
||||
class CircuitTypeEditView(generic.ObjectEditView):
|
||||
queryset = CircuitType.objects.all()
|
||||
model_form = forms.CircuitTypeForm
|
||||
|
||||
|
||||
class CircuitTypeDeleteView(ObjectDeleteView):
|
||||
class CircuitTypeDeleteView(generic.ObjectDeleteView):
|
||||
queryset = CircuitType.objects.all()
|
||||
|
||||
|
||||
class CircuitTypeBulkImportView(BulkImportView):
|
||||
class CircuitTypeBulkImportView(generic.BulkImportView):
|
||||
queryset = CircuitType.objects.all()
|
||||
model_form = forms.CircuitTypeCSVForm
|
||||
table = tables.CircuitTypeTable
|
||||
|
||||
|
||||
class CircuitTypeBulkDeleteView(BulkDeleteView):
|
||||
class CircuitTypeBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering)
|
||||
table = tables.CircuitTypeTable
|
||||
|
||||
@ -114,7 +112,7 @@ class CircuitTypeBulkDeleteView(BulkDeleteView):
|
||||
# Circuits
|
||||
#
|
||||
|
||||
class CircuitListView(ObjectListView):
|
||||
class CircuitListView(generic.ObjectListView):
|
||||
queryset = Circuit.objects.prefetch_related(
|
||||
'provider', 'type', 'tenant', 'terminations'
|
||||
).annotate_sites()
|
||||
@ -123,7 +121,7 @@ class CircuitListView(ObjectListView):
|
||||
table = tables.CircuitTable
|
||||
|
||||
|
||||
class CircuitView(ObjectView):
|
||||
class CircuitView(generic.ObjectView):
|
||||
queryset = Circuit.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -152,23 +150,23 @@ class CircuitView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class CircuitEditView(ObjectEditView):
|
||||
class CircuitEditView(generic.ObjectEditView):
|
||||
queryset = Circuit.objects.all()
|
||||
model_form = forms.CircuitForm
|
||||
template_name = 'circuits/circuit_edit.html'
|
||||
|
||||
|
||||
class CircuitDeleteView(ObjectDeleteView):
|
||||
class CircuitDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Circuit.objects.all()
|
||||
|
||||
|
||||
class CircuitBulkImportView(BulkImportView):
|
||||
class CircuitBulkImportView(generic.BulkImportView):
|
||||
queryset = Circuit.objects.all()
|
||||
model_form = forms.CircuitCSVForm
|
||||
table = tables.CircuitTable
|
||||
|
||||
|
||||
class CircuitBulkEditView(BulkEditView):
|
||||
class CircuitBulkEditView(generic.BulkEditView):
|
||||
queryset = Circuit.objects.prefetch_related(
|
||||
'provider', 'type', 'tenant', 'terminations'
|
||||
)
|
||||
@ -177,7 +175,7 @@ class CircuitBulkEditView(BulkEditView):
|
||||
form = forms.CircuitBulkEditForm
|
||||
|
||||
|
||||
class CircuitBulkDeleteView(BulkDeleteView):
|
||||
class CircuitBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Circuit.objects.prefetch_related(
|
||||
'provider', 'type', 'tenant', 'terminations'
|
||||
)
|
||||
@ -185,7 +183,7 @@ class CircuitBulkDeleteView(BulkDeleteView):
|
||||
table = tables.CircuitTable
|
||||
|
||||
|
||||
class CircuitSwapTerminations(ObjectEditView):
|
||||
class CircuitSwapTerminations(generic.ObjectEditView):
|
||||
"""
|
||||
Swap the A and Z terminations of a circuit.
|
||||
"""
|
||||
@ -258,7 +256,7 @@ class CircuitSwapTerminations(ObjectEditView):
|
||||
# Circuit terminations
|
||||
#
|
||||
|
||||
class CircuitTerminationEditView(ObjectEditView):
|
||||
class CircuitTerminationEditView(generic.ObjectEditView):
|
||||
queryset = CircuitTermination.objects.all()
|
||||
model_form = forms.CircuitTerminationForm
|
||||
template_name = 'circuits/circuittermination_edit.html'
|
||||
@ -272,5 +270,5 @@ class CircuitTerminationEditView(ObjectEditView):
|
||||
return obj.circuit.get_absolute_url()
|
||||
|
||||
|
||||
class CircuitTerminationDeleteView(ObjectDeleteView):
|
||||
class CircuitTerminationDeleteView(generic.ObjectDeleteView):
|
||||
queryset = CircuitTermination.objects.all()
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -10,14 +10,12 @@ from django_tables2 import RequestConfig
|
||||
from rq import Worker
|
||||
|
||||
from dcim.models import DeviceRole, Platform, Region, Site
|
||||
from netbox.views import generic
|
||||
from tenancy.models import Tenant, TenantGroup
|
||||
from utilities.forms import ConfirmationForm
|
||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
||||
from utilities.utils import copy_safe_request, shallow_compare_dict
|
||||
from utilities.views import (
|
||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||
ContentTypePermissionRequiredMixin,
|
||||
)
|
||||
from utilities.views import ContentTypePermissionRequiredMixin
|
||||
from virtualization.models import Cluster, ClusterGroup
|
||||
from . import filters, forms, tables
|
||||
from .choices import JobResultStatusChoices
|
||||
@ -30,7 +28,7 @@ from .scripts import get_scripts, run_script
|
||||
# Tags
|
||||
#
|
||||
|
||||
class TagListView(ObjectListView):
|
||||
class TagListView(generic.ObjectListView):
|
||||
queryset = Tag.objects.annotate(
|
||||
items=Count('extras_taggeditem_items')
|
||||
).order_by(*Tag._meta.ordering)
|
||||
@ -39,23 +37,23 @@ class TagListView(ObjectListView):
|
||||
table = tables.TagTable
|
||||
|
||||
|
||||
class TagEditView(ObjectEditView):
|
||||
class TagEditView(generic.ObjectEditView):
|
||||
queryset = Tag.objects.all()
|
||||
model_form = forms.TagForm
|
||||
template_name = 'extras/tag_edit.html'
|
||||
|
||||
|
||||
class TagDeleteView(ObjectDeleteView):
|
||||
class TagDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Tag.objects.all()
|
||||
|
||||
|
||||
class TagBulkImportView(BulkImportView):
|
||||
class TagBulkImportView(generic.BulkImportView):
|
||||
queryset = Tag.objects.all()
|
||||
model_form = forms.TagCSVForm
|
||||
table = tables.TagTable
|
||||
|
||||
|
||||
class TagBulkEditView(BulkEditView):
|
||||
class TagBulkEditView(generic.BulkEditView):
|
||||
queryset = Tag.objects.annotate(
|
||||
items=Count('extras_taggeditem_items')
|
||||
).order_by(*Tag._meta.ordering)
|
||||
@ -63,7 +61,7 @@ class TagBulkEditView(BulkEditView):
|
||||
form = forms.TagBulkEditForm
|
||||
|
||||
|
||||
class TagBulkDeleteView(BulkDeleteView):
|
||||
class TagBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Tag.objects.annotate(
|
||||
items=Count('extras_taggeditem_items')
|
||||
).order_by(*Tag._meta.ordering)
|
||||
@ -74,7 +72,7 @@ class TagBulkDeleteView(BulkDeleteView):
|
||||
# Config contexts
|
||||
#
|
||||
|
||||
class ConfigContextListView(ObjectListView):
|
||||
class ConfigContextListView(generic.ObjectListView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
filterset = filters.ConfigContextFilterSet
|
||||
filterset_form = forms.ConfigContextFilterForm
|
||||
@ -82,7 +80,7 @@ class ConfigContextListView(ObjectListView):
|
||||
action_buttons = ('add',)
|
||||
|
||||
|
||||
class ConfigContextView(ObjectView):
|
||||
class ConfigContextView(generic.ObjectView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -116,29 +114,29 @@ class ConfigContextView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class ConfigContextEditView(ObjectEditView):
|
||||
class ConfigContextEditView(generic.ObjectEditView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
model_form = forms.ConfigContextForm
|
||||
template_name = 'extras/configcontext_edit.html'
|
||||
|
||||
|
||||
class ConfigContextBulkEditView(BulkEditView):
|
||||
class ConfigContextBulkEditView(generic.BulkEditView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
filterset = filters.ConfigContextFilterSet
|
||||
table = tables.ConfigContextTable
|
||||
form = forms.ConfigContextBulkEditForm
|
||||
|
||||
|
||||
class ConfigContextDeleteView(ObjectDeleteView):
|
||||
class ConfigContextDeleteView(generic.ObjectDeleteView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
|
||||
|
||||
class ConfigContextBulkDeleteView(BulkDeleteView):
|
||||
class ConfigContextBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = ConfigContext.objects.all()
|
||||
table = tables.ConfigContextTable
|
||||
|
||||
|
||||
class ObjectConfigContextView(ObjectView):
|
||||
class ObjectConfigContextView(generic.ObjectView):
|
||||
base_template = None
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -172,7 +170,7 @@ class ObjectConfigContextView(ObjectView):
|
||||
# Change logging
|
||||
#
|
||||
|
||||
class ObjectChangeListView(ObjectListView):
|
||||
class ObjectChangeListView(generic.ObjectListView):
|
||||
queryset = ObjectChange.objects.all()
|
||||
filterset = filters.ObjectChangeFilterSet
|
||||
filterset_form = forms.ObjectChangeFilterForm
|
||||
@ -181,7 +179,7 @@ class ObjectChangeListView(ObjectListView):
|
||||
action_buttons = ('export',)
|
||||
|
||||
|
||||
class ObjectChangeView(ObjectView):
|
||||
class ObjectChangeView(generic.ObjectView):
|
||||
queryset = ObjectChange.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -283,7 +281,7 @@ class ObjectChangeLogView(View):
|
||||
# Image attachments
|
||||
#
|
||||
|
||||
class ImageAttachmentEditView(ObjectEditView):
|
||||
class ImageAttachmentEditView(generic.ObjectEditView):
|
||||
queryset = ImageAttachment.objects.all()
|
||||
model_form = forms.ImageAttachmentForm
|
||||
|
||||
@ -298,7 +296,7 @@ class ImageAttachmentEditView(ObjectEditView):
|
||||
return imageattachment.parent.get_absolute_url()
|
||||
|
||||
|
||||
class ImageAttachmentDeleteView(ObjectDeleteView):
|
||||
class ImageAttachmentDeleteView(generic.ObjectDeleteView):
|
||||
queryset = ImageAttachment.objects.all()
|
||||
|
||||
def get_return_url(self, request, imageattachment):
|
||||
|
@ -1,20 +1,14 @@
|
||||
import netaddr
|
||||
from django.conf import settings
|
||||
from django.db.models import Count, Prefetch
|
||||
from django.db.models.expressions import RawSQL
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django_tables2 import RequestConfig
|
||||
|
||||
from dcim.models import Device, Interface
|
||||
from netbox.views import generic
|
||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
||||
from utilities.utils import get_subquery
|
||||
from utilities.views import (
|
||||
BulkCreateView, BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView,
|
||||
ObjectListView,
|
||||
)
|
||||
from virtualization.models import VirtualMachine, VMInterface
|
||||
from . import filters, forms, tables
|
||||
from .choices import *
|
||||
from .constants import *
|
||||
from .models import Aggregate, IPAddress, Prefix, RIR, Role, RouteTarget, Service, VLAN, VLANGroup, VRF
|
||||
from .utils import add_available_ipaddresses, add_available_prefixes, add_available_vlans
|
||||
@ -24,14 +18,14 @@ from .utils import add_available_ipaddresses, add_available_prefixes, add_availa
|
||||
# VRFs
|
||||
#
|
||||
|
||||
class VRFListView(ObjectListView):
|
||||
class VRFListView(generic.ObjectListView):
|
||||
queryset = VRF.objects.all()
|
||||
filterset = filters.VRFFilterSet
|
||||
filterset_form = forms.VRFFilterForm
|
||||
table = tables.VRFTable
|
||||
|
||||
|
||||
class VRFView(ObjectView):
|
||||
class VRFView(generic.ObjectView):
|
||||
queryset = VRF.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -56,30 +50,30 @@ class VRFView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class VRFEditView(ObjectEditView):
|
||||
class VRFEditView(generic.ObjectEditView):
|
||||
queryset = VRF.objects.all()
|
||||
model_form = forms.VRFForm
|
||||
template_name = 'ipam/vrf_edit.html'
|
||||
|
||||
|
||||
class VRFDeleteView(ObjectDeleteView):
|
||||
class VRFDeleteView(generic.ObjectDeleteView):
|
||||
queryset = VRF.objects.all()
|
||||
|
||||
|
||||
class VRFBulkImportView(BulkImportView):
|
||||
class VRFBulkImportView(generic.BulkImportView):
|
||||
queryset = VRF.objects.all()
|
||||
model_form = forms.VRFCSVForm
|
||||
table = tables.VRFTable
|
||||
|
||||
|
||||
class VRFBulkEditView(BulkEditView):
|
||||
class VRFBulkEditView(generic.BulkEditView):
|
||||
queryset = VRF.objects.prefetch_related('tenant')
|
||||
filterset = filters.VRFFilterSet
|
||||
table = tables.VRFTable
|
||||
form = forms.VRFBulkEditForm
|
||||
|
||||
|
||||
class VRFBulkDeleteView(BulkDeleteView):
|
||||
class VRFBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = VRF.objects.prefetch_related('tenant')
|
||||
filterset = filters.VRFFilterSet
|
||||
table = tables.VRFTable
|
||||
@ -89,14 +83,14 @@ class VRFBulkDeleteView(BulkDeleteView):
|
||||
# Route targets
|
||||
#
|
||||
|
||||
class RouteTargetListView(ObjectListView):
|
||||
class RouteTargetListView(generic.ObjectListView):
|
||||
queryset = RouteTarget.objects.all()
|
||||
filterset = filters.RouteTargetFilterSet
|
||||
filterset_form = forms.RouteTargetFilterForm
|
||||
table = tables.RouteTargetTable
|
||||
|
||||
|
||||
class RouteTargetView(ObjectView):
|
||||
class RouteTargetView(generic.ObjectView):
|
||||
queryset = RouteTarget.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -118,29 +112,29 @@ class RouteTargetView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class RouteTargetEditView(ObjectEditView):
|
||||
class RouteTargetEditView(generic.ObjectEditView):
|
||||
queryset = RouteTarget.objects.all()
|
||||
model_form = forms.RouteTargetForm
|
||||
|
||||
|
||||
class RouteTargetDeleteView(ObjectDeleteView):
|
||||
class RouteTargetDeleteView(generic.ObjectDeleteView):
|
||||
queryset = RouteTarget.objects.all()
|
||||
|
||||
|
||||
class RouteTargetBulkImportView(BulkImportView):
|
||||
class RouteTargetBulkImportView(generic.BulkImportView):
|
||||
queryset = RouteTarget.objects.all()
|
||||
model_form = forms.RouteTargetCSVForm
|
||||
table = tables.RouteTargetTable
|
||||
|
||||
|
||||
class RouteTargetBulkEditView(BulkEditView):
|
||||
class RouteTargetBulkEditView(generic.BulkEditView):
|
||||
queryset = RouteTarget.objects.prefetch_related('tenant')
|
||||
filterset = filters.RouteTargetFilterSet
|
||||
table = tables.RouteTargetTable
|
||||
form = forms.RouteTargetBulkEditForm
|
||||
|
||||
|
||||
class RouteTargetBulkDeleteView(BulkDeleteView):
|
||||
class RouteTargetBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = RouteTarget.objects.prefetch_related('tenant')
|
||||
filterset = filters.RouteTargetFilterSet
|
||||
table = tables.RouteTargetTable
|
||||
@ -150,7 +144,7 @@ class RouteTargetBulkDeleteView(BulkDeleteView):
|
||||
# RIRs
|
||||
#
|
||||
|
||||
class RIRListView(ObjectListView):
|
||||
class RIRListView(generic.ObjectListView):
|
||||
queryset = RIR.objects.annotate(aggregate_count=Count('aggregates')).order_by(*RIR._meta.ordering)
|
||||
filterset = filters.RIRFilterSet
|
||||
filterset_form = forms.RIRFilterForm
|
||||
@ -158,22 +152,22 @@ class RIRListView(ObjectListView):
|
||||
template_name = 'ipam/rir_list.html'
|
||||
|
||||
|
||||
class RIREditView(ObjectEditView):
|
||||
class RIREditView(generic.ObjectEditView):
|
||||
queryset = RIR.objects.all()
|
||||
model_form = forms.RIRForm
|
||||
|
||||
|
||||
class RIRDeleteView(ObjectDeleteView):
|
||||
class RIRDeleteView(generic.ObjectDeleteView):
|
||||
queryset = RIR.objects.all()
|
||||
|
||||
|
||||
class RIRBulkImportView(BulkImportView):
|
||||
class RIRBulkImportView(generic.BulkImportView):
|
||||
queryset = RIR.objects.all()
|
||||
model_form = forms.RIRCSVForm
|
||||
table = tables.RIRTable
|
||||
|
||||
|
||||
class RIRBulkDeleteView(BulkDeleteView):
|
||||
class RIRBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = RIR.objects.annotate(aggregate_count=Count('aggregates')).order_by(*RIR._meta.ordering)
|
||||
filterset = filters.RIRFilterSet
|
||||
table = tables.RIRTable
|
||||
@ -183,7 +177,7 @@ class RIRBulkDeleteView(BulkDeleteView):
|
||||
# Aggregates
|
||||
#
|
||||
|
||||
class AggregateListView(ObjectListView):
|
||||
class AggregateListView(generic.ObjectListView):
|
||||
queryset = Aggregate.objects.annotate(
|
||||
child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
|
||||
).order_by(*Aggregate._meta.ordering)
|
||||
@ -209,7 +203,7 @@ class AggregateListView(ObjectListView):
|
||||
}
|
||||
|
||||
|
||||
class AggregateView(ObjectView):
|
||||
class AggregateView(generic.ObjectView):
|
||||
queryset = Aggregate.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -254,30 +248,30 @@ class AggregateView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class AggregateEditView(ObjectEditView):
|
||||
class AggregateEditView(generic.ObjectEditView):
|
||||
queryset = Aggregate.objects.all()
|
||||
model_form = forms.AggregateForm
|
||||
template_name = 'ipam/aggregate_edit.html'
|
||||
|
||||
|
||||
class AggregateDeleteView(ObjectDeleteView):
|
||||
class AggregateDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Aggregate.objects.all()
|
||||
|
||||
|
||||
class AggregateBulkImportView(BulkImportView):
|
||||
class AggregateBulkImportView(generic.BulkImportView):
|
||||
queryset = Aggregate.objects.all()
|
||||
model_form = forms.AggregateCSVForm
|
||||
table = tables.AggregateTable
|
||||
|
||||
|
||||
class AggregateBulkEditView(BulkEditView):
|
||||
class AggregateBulkEditView(generic.BulkEditView):
|
||||
queryset = Aggregate.objects.prefetch_related('rir')
|
||||
filterset = filters.AggregateFilterSet
|
||||
table = tables.AggregateTable
|
||||
form = forms.AggregateBulkEditForm
|
||||
|
||||
|
||||
class AggregateBulkDeleteView(BulkDeleteView):
|
||||
class AggregateBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Aggregate.objects.prefetch_related('rir')
|
||||
filterset = filters.AggregateFilterSet
|
||||
table = tables.AggregateTable
|
||||
@ -287,7 +281,7 @@ class AggregateBulkDeleteView(BulkDeleteView):
|
||||
# Prefix/VLAN roles
|
||||
#
|
||||
|
||||
class RoleListView(ObjectListView):
|
||||
class RoleListView(generic.ObjectListView):
|
||||
queryset = Role.objects.annotate(
|
||||
prefix_count=get_subquery(Prefix, 'role'),
|
||||
vlan_count=get_subquery(VLAN, 'role')
|
||||
@ -295,22 +289,22 @@ class RoleListView(ObjectListView):
|
||||
table = tables.RoleTable
|
||||
|
||||
|
||||
class RoleEditView(ObjectEditView):
|
||||
class RoleEditView(generic.ObjectEditView):
|
||||
queryset = Role.objects.all()
|
||||
model_form = forms.RoleForm
|
||||
|
||||
|
||||
class RoleDeleteView(ObjectDeleteView):
|
||||
class RoleDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Role.objects.all()
|
||||
|
||||
|
||||
class RoleBulkImportView(BulkImportView):
|
||||
class RoleBulkImportView(generic.BulkImportView):
|
||||
queryset = Role.objects.all()
|
||||
model_form = forms.RoleCSVForm
|
||||
table = tables.RoleTable
|
||||
|
||||
|
||||
class RoleBulkDeleteView(BulkDeleteView):
|
||||
class RoleBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Role.objects.all()
|
||||
table = tables.RoleTable
|
||||
|
||||
@ -319,7 +313,7 @@ class RoleBulkDeleteView(BulkDeleteView):
|
||||
# Prefixes
|
||||
#
|
||||
|
||||
class PrefixListView(ObjectListView):
|
||||
class PrefixListView(generic.ObjectListView):
|
||||
queryset = Prefix.objects.annotate_tree()
|
||||
filterset = filters.PrefixFilterSet
|
||||
filterset_form = forms.PrefixFilterForm
|
||||
@ -327,7 +321,7 @@ class PrefixListView(ObjectListView):
|
||||
template_name = 'ipam/prefix_list.html'
|
||||
|
||||
|
||||
class PrefixView(ObjectView):
|
||||
class PrefixView(generic.ObjectView):
|
||||
queryset = Prefix.objects.prefetch_related('vrf', 'site__region', 'tenant__group', 'vlan__group', 'role')
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -371,7 +365,7 @@ class PrefixView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class PrefixPrefixesView(ObjectView):
|
||||
class PrefixPrefixesView(generic.ObjectView):
|
||||
queryset = Prefix.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -415,7 +409,7 @@ class PrefixPrefixesView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class PrefixIPAddressesView(ObjectView):
|
||||
class PrefixIPAddressesView(generic.ObjectView):
|
||||
queryset = Prefix.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -459,31 +453,31 @@ class PrefixIPAddressesView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class PrefixEditView(ObjectEditView):
|
||||
class PrefixEditView(generic.ObjectEditView):
|
||||
queryset = Prefix.objects.all()
|
||||
model_form = forms.PrefixForm
|
||||
template_name = 'ipam/prefix_edit.html'
|
||||
|
||||
|
||||
class PrefixDeleteView(ObjectDeleteView):
|
||||
class PrefixDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Prefix.objects.all()
|
||||
template_name = 'ipam/prefix_delete.html'
|
||||
|
||||
|
||||
class PrefixBulkImportView(BulkImportView):
|
||||
class PrefixBulkImportView(generic.BulkImportView):
|
||||
queryset = Prefix.objects.all()
|
||||
model_form = forms.PrefixCSVForm
|
||||
table = tables.PrefixTable
|
||||
|
||||
|
||||
class PrefixBulkEditView(BulkEditView):
|
||||
class PrefixBulkEditView(generic.BulkEditView):
|
||||
queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
|
||||
filterset = filters.PrefixFilterSet
|
||||
table = tables.PrefixTable
|
||||
form = forms.PrefixBulkEditForm
|
||||
|
||||
|
||||
class PrefixBulkDeleteView(BulkDeleteView):
|
||||
class PrefixBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
|
||||
filterset = filters.PrefixFilterSet
|
||||
table = tables.PrefixTable
|
||||
@ -493,14 +487,14 @@ class PrefixBulkDeleteView(BulkDeleteView):
|
||||
# IP addresses
|
||||
#
|
||||
|
||||
class IPAddressListView(ObjectListView):
|
||||
class IPAddressListView(generic.ObjectListView):
|
||||
queryset = IPAddress.objects.all()
|
||||
filterset = filters.IPAddressFilterSet
|
||||
filterset_form = forms.IPAddressFilterForm
|
||||
table = tables.IPAddressDetailTable
|
||||
|
||||
|
||||
class IPAddressView(ObjectView):
|
||||
class IPAddressView(generic.ObjectView):
|
||||
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -553,7 +547,7 @@ class IPAddressView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class IPAddressEditView(ObjectEditView):
|
||||
class IPAddressEditView(generic.ObjectEditView):
|
||||
queryset = IPAddress.objects.all()
|
||||
model_form = forms.IPAddressForm
|
||||
template_name = 'ipam/ipaddress_edit.html'
|
||||
@ -575,7 +569,7 @@ class IPAddressEditView(ObjectEditView):
|
||||
return obj
|
||||
|
||||
|
||||
class IPAddressAssignView(ObjectView):
|
||||
class IPAddressAssignView(generic.ObjectView):
|
||||
"""
|
||||
Search for IPAddresses to be assigned to an Interface.
|
||||
"""
|
||||
@ -615,11 +609,11 @@ class IPAddressAssignView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class IPAddressDeleteView(ObjectDeleteView):
|
||||
class IPAddressDeleteView(generic.ObjectDeleteView):
|
||||
queryset = IPAddress.objects.all()
|
||||
|
||||
|
||||
class IPAddressBulkCreateView(BulkCreateView):
|
||||
class IPAddressBulkCreateView(generic.BulkCreateView):
|
||||
queryset = IPAddress.objects.all()
|
||||
form = forms.IPAddressBulkCreateForm
|
||||
model_form = forms.IPAddressBulkAddForm
|
||||
@ -627,20 +621,20 @@ class IPAddressBulkCreateView(BulkCreateView):
|
||||
template_name = 'ipam/ipaddress_bulk_add.html'
|
||||
|
||||
|
||||
class IPAddressBulkImportView(BulkImportView):
|
||||
class IPAddressBulkImportView(generic.BulkImportView):
|
||||
queryset = IPAddress.objects.all()
|
||||
model_form = forms.IPAddressCSVForm
|
||||
table = tables.IPAddressTable
|
||||
|
||||
|
||||
class IPAddressBulkEditView(BulkEditView):
|
||||
class IPAddressBulkEditView(generic.BulkEditView):
|
||||
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
|
||||
filterset = filters.IPAddressFilterSet
|
||||
table = tables.IPAddressTable
|
||||
form = forms.IPAddressBulkEditForm
|
||||
|
||||
|
||||
class IPAddressBulkDeleteView(BulkDeleteView):
|
||||
class IPAddressBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
|
||||
filterset = filters.IPAddressFilterSet
|
||||
table = tables.IPAddressTable
|
||||
@ -650,7 +644,7 @@ class IPAddressBulkDeleteView(BulkDeleteView):
|
||||
# VLAN groups
|
||||
#
|
||||
|
||||
class VLANGroupListView(ObjectListView):
|
||||
class VLANGroupListView(generic.ObjectListView):
|
||||
queryset = VLANGroup.objects.annotate(
|
||||
vlan_count=Count('vlans')
|
||||
).order_by(*VLANGroup._meta.ordering)
|
||||
@ -659,22 +653,22 @@ class VLANGroupListView(ObjectListView):
|
||||
table = tables.VLANGroupTable
|
||||
|
||||
|
||||
class VLANGroupEditView(ObjectEditView):
|
||||
class VLANGroupEditView(generic.ObjectEditView):
|
||||
queryset = VLANGroup.objects.all()
|
||||
model_form = forms.VLANGroupForm
|
||||
|
||||
|
||||
class VLANGroupDeleteView(ObjectDeleteView):
|
||||
class VLANGroupDeleteView(generic.ObjectDeleteView):
|
||||
queryset = VLANGroup.objects.all()
|
||||
|
||||
|
||||
class VLANGroupBulkImportView(BulkImportView):
|
||||
class VLANGroupBulkImportView(generic.BulkImportView):
|
||||
queryset = VLANGroup.objects.all()
|
||||
model_form = forms.VLANGroupCSVForm
|
||||
table = tables.VLANGroupTable
|
||||
|
||||
|
||||
class VLANGroupBulkDeleteView(BulkDeleteView):
|
||||
class VLANGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = VLANGroup.objects.prefetch_related('site').annotate(
|
||||
vlan_count=Count('vlans')
|
||||
).order_by(*VLANGroup._meta.ordering)
|
||||
@ -682,7 +676,7 @@ class VLANGroupBulkDeleteView(BulkDeleteView):
|
||||
table = tables.VLANGroupTable
|
||||
|
||||
|
||||
class VLANGroupVLANsView(ObjectView):
|
||||
class VLANGroupVLANsView(generic.ObjectView):
|
||||
queryset = VLANGroup.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -725,14 +719,14 @@ class VLANGroupVLANsView(ObjectView):
|
||||
# VLANs
|
||||
#
|
||||
|
||||
class VLANListView(ObjectListView):
|
||||
class VLANListView(generic.ObjectListView):
|
||||
queryset = VLAN.objects.all()
|
||||
filterset = filters.VLANFilterSet
|
||||
filterset_form = forms.VLANFilterForm
|
||||
table = tables.VLANDetailTable
|
||||
|
||||
|
||||
class VLANView(ObjectView):
|
||||
class VLANView(generic.ObjectView):
|
||||
queryset = VLAN.objects.prefetch_related('site__region', 'tenant__group', 'role')
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -750,7 +744,7 @@ class VLANView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class VLANInterfacesView(ObjectView):
|
||||
class VLANInterfacesView(generic.ObjectView):
|
||||
queryset = VLAN.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -771,7 +765,7 @@ class VLANInterfacesView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class VLANVMInterfacesView(ObjectView):
|
||||
class VLANVMInterfacesView(generic.ObjectView):
|
||||
queryset = VLAN.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -792,30 +786,30 @@ class VLANVMInterfacesView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class VLANEditView(ObjectEditView):
|
||||
class VLANEditView(generic.ObjectEditView):
|
||||
queryset = VLAN.objects.all()
|
||||
model_form = forms.VLANForm
|
||||
template_name = 'ipam/vlan_edit.html'
|
||||
|
||||
|
||||
class VLANDeleteView(ObjectDeleteView):
|
||||
class VLANDeleteView(generic.ObjectDeleteView):
|
||||
queryset = VLAN.objects.all()
|
||||
|
||||
|
||||
class VLANBulkImportView(BulkImportView):
|
||||
class VLANBulkImportView(generic.BulkImportView):
|
||||
queryset = VLAN.objects.all()
|
||||
model_form = forms.VLANCSVForm
|
||||
table = tables.VLANTable
|
||||
|
||||
|
||||
class VLANBulkEditView(BulkEditView):
|
||||
class VLANBulkEditView(generic.BulkEditView):
|
||||
queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
|
||||
filterset = filters.VLANFilterSet
|
||||
table = tables.VLANTable
|
||||
form = forms.VLANBulkEditForm
|
||||
|
||||
|
||||
class VLANBulkDeleteView(BulkDeleteView):
|
||||
class VLANBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
|
||||
filterset = filters.VLANFilterSet
|
||||
table = tables.VLANTable
|
||||
@ -825,7 +819,7 @@ class VLANBulkDeleteView(BulkDeleteView):
|
||||
# Services
|
||||
#
|
||||
|
||||
class ServiceListView(ObjectListView):
|
||||
class ServiceListView(generic.ObjectListView):
|
||||
queryset = Service.objects.all()
|
||||
filterset = filters.ServiceFilterSet
|
||||
filterset_form = forms.ServiceFilterForm
|
||||
@ -833,7 +827,7 @@ class ServiceListView(ObjectListView):
|
||||
action_buttons = ('export',)
|
||||
|
||||
|
||||
class ServiceView(ObjectView):
|
||||
class ServiceView(generic.ObjectView):
|
||||
queryset = Service.objects.prefetch_related('ipaddresses')
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -845,7 +839,7 @@ class ServiceView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class ServiceEditView(ObjectEditView):
|
||||
class ServiceEditView(generic.ObjectEditView):
|
||||
queryset = Service.objects.prefetch_related('ipaddresses')
|
||||
model_form = forms.ServiceForm
|
||||
template_name = 'ipam/service_edit.html'
|
||||
@ -864,24 +858,24 @@ class ServiceEditView(ObjectEditView):
|
||||
return obj
|
||||
|
||||
|
||||
class ServiceBulkImportView(BulkImportView):
|
||||
class ServiceBulkImportView(generic.BulkImportView):
|
||||
queryset = Service.objects.all()
|
||||
model_form = forms.ServiceCSVForm
|
||||
table = tables.ServiceTable
|
||||
|
||||
|
||||
class ServiceDeleteView(ObjectDeleteView):
|
||||
class ServiceDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Service.objects.all()
|
||||
|
||||
|
||||
class ServiceBulkEditView(BulkEditView):
|
||||
class ServiceBulkEditView(generic.BulkEditView):
|
||||
queryset = Service.objects.prefetch_related('device', 'virtual_machine')
|
||||
filterset = filters.ServiceFilterSet
|
||||
table = tables.ServiceTable
|
||||
form = forms.ServiceBulkEditForm
|
||||
|
||||
|
||||
class ServiceBulkDeleteView(BulkDeleteView):
|
||||
class ServiceBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Service.objects.prefetch_related('device', 'virtual_machine')
|
||||
filterset = filters.ServiceFilterSet
|
||||
table = tables.ServiceTable
|
||||
|
@ -8,8 +8,8 @@ from django.http import Http404, HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
|
||||
from extras.context_managers import change_logging
|
||||
from netbox.views import server_error
|
||||
from utilities.api import is_api_request, rest_api_server_error
|
||||
from utilities.views import server_error
|
||||
|
||||
|
||||
class LoginRequiredMiddleware(object):
|
||||
|
@ -94,4 +94,4 @@ urlpatterns = [
|
||||
path('{}'.format(settings.BASE_PATH), include(_patterns))
|
||||
]
|
||||
|
||||
handler500 = 'utilities.views.server_error'
|
||||
handler500 = 'netbox.views.server_error'
|
||||
|
@ -1,22 +1,32 @@
|
||||
import platform
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db.models import F
|
||||
from django.http import HttpResponseServerError
|
||||
from django.shortcuts import render
|
||||
from django.template import loader
|
||||
from django.template.exceptions import TemplateDoesNotExist
|
||||
from django.urls import reverse
|
||||
from django.views.decorators.csrf import requires_csrf_token
|
||||
from django.views.defaults import ERROR_500_TEMPLATE_NAME
|
||||
from django.views.generic import View
|
||||
from packaging import version
|
||||
|
||||
from circuits.models import Circuit, Provider
|
||||
from dcim.models import Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, Site
|
||||
from dcim.models import (
|
||||
Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, Site,
|
||||
)
|
||||
from extras.choices import JobResultStatusChoices
|
||||
from extras.models import ObjectChange, JobResult
|
||||
from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
|
||||
from netbox.constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
|
||||
from netbox.forms import SearchForm
|
||||
from netbox.releases import get_latest_release
|
||||
from secrets.models import Secret
|
||||
from tenancy.models import Tenant
|
||||
from virtualization.models import Cluster, VirtualMachine
|
||||
from .constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
|
||||
from .forms import SearchForm
|
||||
|
||||
|
||||
class HomeView(View):
|
||||
@ -157,3 +167,22 @@ class StaticMediaFailureView(View):
|
||||
return render(request, 'media_failure.html', {
|
||||
'filename': request.GET.get('filename')
|
||||
})
|
||||
|
||||
|
||||
@requires_csrf_token
|
||||
def server_error(request, template_name=ERROR_500_TEMPLATE_NAME):
|
||||
"""
|
||||
Custom 500 handler to provide additional context when rendering 500.html.
|
||||
"""
|
||||
try:
|
||||
template = loader.get_template(template_name)
|
||||
except TemplateDoesNotExist:
|
||||
return HttpResponseServerError('<h1>Server Error (500)</h1>', content_type='text/html')
|
||||
type_, error, traceback = sys.exc_info()
|
||||
|
||||
return HttpResponseServerError(template.render({
|
||||
'error': error,
|
||||
'exception': str(type_),
|
||||
'netbox_version': settings.VERSION,
|
||||
'python_version': platform.python_version(),
|
||||
}))
|
1223
netbox/netbox/views/generic.py
Normal file
1223
netbox/netbox/views/generic.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -7,9 +7,7 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils.html import escape
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from utilities.views import (
|
||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||
)
|
||||
from netbox.views import generic
|
||||
from . import filters, forms, tables
|
||||
from .models import SecretRole, Secret, SessionKey, UserKey
|
||||
|
||||
@ -28,27 +26,27 @@ def get_session_key(request):
|
||||
# Secret roles
|
||||
#
|
||||
|
||||
class SecretRoleListView(ObjectListView):
|
||||
class SecretRoleListView(generic.ObjectListView):
|
||||
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
|
||||
table = tables.SecretRoleTable
|
||||
|
||||
|
||||
class SecretRoleEditView(ObjectEditView):
|
||||
class SecretRoleEditView(generic.ObjectEditView):
|
||||
queryset = SecretRole.objects.all()
|
||||
model_form = forms.SecretRoleForm
|
||||
|
||||
|
||||
class SecretRoleDeleteView(ObjectDeleteView):
|
||||
class SecretRoleDeleteView(generic.ObjectDeleteView):
|
||||
queryset = SecretRole.objects.all()
|
||||
|
||||
|
||||
class SecretRoleBulkImportView(BulkImportView):
|
||||
class SecretRoleBulkImportView(generic.BulkImportView):
|
||||
queryset = SecretRole.objects.all()
|
||||
model_form = forms.SecretRoleCSVForm
|
||||
table = tables.SecretRoleTable
|
||||
|
||||
|
||||
class SecretRoleBulkDeleteView(BulkDeleteView):
|
||||
class SecretRoleBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
|
||||
table = tables.SecretRoleTable
|
||||
|
||||
@ -57,7 +55,7 @@ class SecretRoleBulkDeleteView(BulkDeleteView):
|
||||
# Secrets
|
||||
#
|
||||
|
||||
class SecretListView(ObjectListView):
|
||||
class SecretListView(generic.ObjectListView):
|
||||
queryset = Secret.objects.all()
|
||||
filterset = filters.SecretFilterSet
|
||||
filterset_form = forms.SecretFilterForm
|
||||
@ -65,7 +63,7 @@ class SecretListView(ObjectListView):
|
||||
action_buttons = ('import', 'export')
|
||||
|
||||
|
||||
class SecretView(ObjectView):
|
||||
class SecretView(generic.ObjectView):
|
||||
queryset = Secret.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -77,7 +75,7 @@ class SecretView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class SecretEditView(ObjectEditView):
|
||||
class SecretEditView(generic.ObjectEditView):
|
||||
queryset = Secret.objects.all()
|
||||
model_form = forms.SecretForm
|
||||
template_name = 'secrets/secret_edit.html'
|
||||
@ -146,11 +144,11 @@ class SecretEditView(ObjectEditView):
|
||||
})
|
||||
|
||||
|
||||
class SecretDeleteView(ObjectDeleteView):
|
||||
class SecretDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Secret.objects.all()
|
||||
|
||||
|
||||
class SecretBulkImportView(BulkImportView):
|
||||
class SecretBulkImportView(generic.BulkImportView):
|
||||
queryset = Secret.objects.all()
|
||||
model_form = forms.SecretCSVForm
|
||||
table = tables.SecretTable
|
||||
@ -197,14 +195,14 @@ class SecretBulkImportView(BulkImportView):
|
||||
})
|
||||
|
||||
|
||||
class SecretBulkEditView(BulkEditView):
|
||||
class SecretBulkEditView(generic.BulkEditView):
|
||||
queryset = Secret.objects.prefetch_related('role')
|
||||
filterset = filters.SecretFilterSet
|
||||
table = tables.SecretTable
|
||||
form = forms.SecretBulkEditForm
|
||||
|
||||
|
||||
class SecretBulkDeleteView(BulkDeleteView):
|
||||
class SecretBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Secret.objects.prefetch_related('role')
|
||||
filterset = filters.SecretFilterSet
|
||||
table = tables.SecretTable
|
||||
|
@ -1,12 +1,9 @@
|
||||
from django.db.models import Count
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
|
||||
from circuits.models import Circuit
|
||||
from dcim.models import Site, Rack, Device, RackReservation
|
||||
from ipam.models import IPAddress, Prefix, VLAN, VRF
|
||||
from utilities.views import (
|
||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||
)
|
||||
from netbox.views import generic
|
||||
from virtualization.models import VirtualMachine, Cluster
|
||||
from . import filters, forms, tables
|
||||
from .models import Tenant, TenantGroup
|
||||
@ -16,7 +13,7 @@ from .models import Tenant, TenantGroup
|
||||
# Tenant groups
|
||||
#
|
||||
|
||||
class TenantGroupListView(ObjectListView):
|
||||
class TenantGroupListView(generic.ObjectListView):
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
@ -27,22 +24,22 @@ class TenantGroupListView(ObjectListView):
|
||||
table = tables.TenantGroupTable
|
||||
|
||||
|
||||
class TenantGroupEditView(ObjectEditView):
|
||||
class TenantGroupEditView(generic.ObjectEditView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
model_form = forms.TenantGroupForm
|
||||
|
||||
|
||||
class TenantGroupDeleteView(ObjectDeleteView):
|
||||
class TenantGroupDeleteView(generic.ObjectDeleteView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
|
||||
|
||||
class TenantGroupBulkImportView(BulkImportView):
|
||||
class TenantGroupBulkImportView(generic.BulkImportView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
model_form = forms.TenantGroupCSVForm
|
||||
table = tables.TenantGroupTable
|
||||
|
||||
|
||||
class TenantGroupBulkDeleteView(BulkDeleteView):
|
||||
class TenantGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
@ -57,14 +54,14 @@ class TenantGroupBulkDeleteView(BulkDeleteView):
|
||||
# Tenants
|
||||
#
|
||||
|
||||
class TenantListView(ObjectListView):
|
||||
class TenantListView(generic.ObjectListView):
|
||||
queryset = Tenant.objects.all()
|
||||
filterset = filters.TenantFilterSet
|
||||
filterset_form = forms.TenantFilterForm
|
||||
table = tables.TenantTable
|
||||
|
||||
|
||||
class TenantView(ObjectView):
|
||||
class TenantView(generic.ObjectView):
|
||||
queryset = Tenant.objects.prefetch_related('group')
|
||||
|
||||
def get(self, request, slug):
|
||||
@ -90,30 +87,30 @@ class TenantView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class TenantEditView(ObjectEditView):
|
||||
class TenantEditView(generic.ObjectEditView):
|
||||
queryset = Tenant.objects.all()
|
||||
model_form = forms.TenantForm
|
||||
template_name = 'tenancy/tenant_edit.html'
|
||||
|
||||
|
||||
class TenantDeleteView(ObjectDeleteView):
|
||||
class TenantDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Tenant.objects.all()
|
||||
|
||||
|
||||
class TenantBulkImportView(BulkImportView):
|
||||
class TenantBulkImportView(generic.BulkImportView):
|
||||
queryset = Tenant.objects.all()
|
||||
model_form = forms.TenantCSVForm
|
||||
table = tables.TenantTable
|
||||
|
||||
|
||||
class TenantBulkEditView(BulkEditView):
|
||||
class TenantBulkEditView(generic.BulkEditView):
|
||||
queryset = Tenant.objects.prefetch_related('group')
|
||||
filterset = filters.TenantFilterSet
|
||||
table = tables.TenantTable
|
||||
form = forms.TenantBulkEditForm
|
||||
|
||||
|
||||
class TenantBulkDeleteView(BulkDeleteView):
|
||||
class TenantBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Tenant.objects.prefetch_related('group')
|
||||
filterset = filters.TenantFilterSet
|
||||
table = tables.TenantTable
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -9,12 +9,9 @@ from dcim.tables import DeviceTable
|
||||
from extras.views import ObjectConfigContextView
|
||||
from ipam.models import IPAddress, Service
|
||||
from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
|
||||
from netbox.views import generic
|
||||
from secrets.models import Secret
|
||||
from utilities.utils import get_subquery
|
||||
from utilities.views import (
|
||||
BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, BulkRenameView, ComponentCreateView,
|
||||
ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||
)
|
||||
from . import filters, forms, tables
|
||||
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
|
||||
|
||||
@ -23,27 +20,27 @@ from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterf
|
||||
# Cluster types
|
||||
#
|
||||
|
||||
class ClusterTypeListView(ObjectListView):
|
||||
class ClusterTypeListView(generic.ObjectListView):
|
||||
queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering)
|
||||
table = tables.ClusterTypeTable
|
||||
|
||||
|
||||
class ClusterTypeEditView(ObjectEditView):
|
||||
class ClusterTypeEditView(generic.ObjectEditView):
|
||||
queryset = ClusterType.objects.all()
|
||||
model_form = forms.ClusterTypeForm
|
||||
|
||||
|
||||
class ClusterTypeDeleteView(ObjectDeleteView):
|
||||
class ClusterTypeDeleteView(generic.ObjectDeleteView):
|
||||
queryset = ClusterType.objects.all()
|
||||
|
||||
|
||||
class ClusterTypeBulkImportView(BulkImportView):
|
||||
class ClusterTypeBulkImportView(generic.BulkImportView):
|
||||
queryset = ClusterType.objects.all()
|
||||
model_form = forms.ClusterTypeCSVForm
|
||||
table = tables.ClusterTypeTable
|
||||
|
||||
|
||||
class ClusterTypeBulkDeleteView(BulkDeleteView):
|
||||
class ClusterTypeBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering)
|
||||
table = tables.ClusterTypeTable
|
||||
|
||||
@ -52,27 +49,27 @@ class ClusterTypeBulkDeleteView(BulkDeleteView):
|
||||
# Cluster groups
|
||||
#
|
||||
|
||||
class ClusterGroupListView(ObjectListView):
|
||||
class ClusterGroupListView(generic.ObjectListView):
|
||||
queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering)
|
||||
table = tables.ClusterGroupTable
|
||||
|
||||
|
||||
class ClusterGroupEditView(ObjectEditView):
|
||||
class ClusterGroupEditView(generic.ObjectEditView):
|
||||
queryset = ClusterGroup.objects.all()
|
||||
model_form = forms.ClusterGroupForm
|
||||
|
||||
|
||||
class ClusterGroupDeleteView(ObjectDeleteView):
|
||||
class ClusterGroupDeleteView(generic.ObjectDeleteView):
|
||||
queryset = ClusterGroup.objects.all()
|
||||
|
||||
|
||||
class ClusterGroupBulkImportView(BulkImportView):
|
||||
class ClusterGroupBulkImportView(generic.BulkImportView):
|
||||
queryset = ClusterGroup.objects.all()
|
||||
model_form = forms.ClusterGroupCSVForm
|
||||
table = tables.ClusterGroupTable
|
||||
|
||||
|
||||
class ClusterGroupBulkDeleteView(BulkDeleteView):
|
||||
class ClusterGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering)
|
||||
table = tables.ClusterGroupTable
|
||||
|
||||
@ -81,7 +78,7 @@ class ClusterGroupBulkDeleteView(BulkDeleteView):
|
||||
# Clusters
|
||||
#
|
||||
|
||||
class ClusterListView(ObjectListView):
|
||||
class ClusterListView(generic.ObjectListView):
|
||||
permission_required = 'virtualization.view_cluster'
|
||||
queryset = Cluster.objects.annotate(
|
||||
device_count=get_subquery(Device, 'cluster'),
|
||||
@ -92,7 +89,7 @@ class ClusterListView(ObjectListView):
|
||||
filterset_form = forms.ClusterFilterForm
|
||||
|
||||
|
||||
class ClusterView(ObjectView):
|
||||
class ClusterView(generic.ObjectView):
|
||||
queryset = Cluster.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -114,36 +111,36 @@ class ClusterView(ObjectView):
|
||||
})
|
||||
|
||||
|
||||
class ClusterEditView(ObjectEditView):
|
||||
class ClusterEditView(generic.ObjectEditView):
|
||||
template_name = 'virtualization/cluster_edit.html'
|
||||
queryset = Cluster.objects.all()
|
||||
model_form = forms.ClusterForm
|
||||
|
||||
|
||||
class ClusterDeleteView(ObjectDeleteView):
|
||||
class ClusterDeleteView(generic.ObjectDeleteView):
|
||||
queryset = Cluster.objects.all()
|
||||
|
||||
|
||||
class ClusterBulkImportView(BulkImportView):
|
||||
class ClusterBulkImportView(generic.BulkImportView):
|
||||
queryset = Cluster.objects.all()
|
||||
model_form = forms.ClusterCSVForm
|
||||
table = tables.ClusterTable
|
||||
|
||||
|
||||
class ClusterBulkEditView(BulkEditView):
|
||||
class ClusterBulkEditView(generic.BulkEditView):
|
||||
queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
|
||||
filterset = filters.ClusterFilterSet
|
||||
table = tables.ClusterTable
|
||||
form = forms.ClusterBulkEditForm
|
||||
|
||||
|
||||
class ClusterBulkDeleteView(BulkDeleteView):
|
||||
class ClusterBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
|
||||
filterset = filters.ClusterFilterSet
|
||||
table = tables.ClusterTable
|
||||
|
||||
|
||||
class ClusterAddDevicesView(ObjectEditView):
|
||||
class ClusterAddDevicesView(generic.ObjectEditView):
|
||||
queryset = Cluster.objects.all()
|
||||
form = forms.ClusterAddDevicesForm
|
||||
template_name = 'virtualization/cluster_add_devices.html'
|
||||
@ -184,7 +181,7 @@ class ClusterAddDevicesView(ObjectEditView):
|
||||
})
|
||||
|
||||
|
||||
class ClusterRemoveDevicesView(ObjectEditView):
|
||||
class ClusterRemoveDevicesView(generic.ObjectEditView):
|
||||
queryset = Cluster.objects.all()
|
||||
form = forms.ClusterRemoveDevicesForm
|
||||
template_name = 'utilities/obj_bulk_remove.html'
|
||||
@ -229,7 +226,7 @@ class ClusterRemoveDevicesView(ObjectEditView):
|
||||
# Virtual machines
|
||||
#
|
||||
|
||||
class VirtualMachineListView(ObjectListView):
|
||||
class VirtualMachineListView(generic.ObjectListView):
|
||||
queryset = VirtualMachine.objects.all()
|
||||
filterset = filters.VirtualMachineFilterSet
|
||||
filterset_form = forms.VirtualMachineFilterForm
|
||||
@ -237,7 +234,7 @@ class VirtualMachineListView(ObjectListView):
|
||||
template_name = 'virtualization/virtualmachine_list.html'
|
||||
|
||||
|
||||
class VirtualMachineView(ObjectView):
|
||||
class VirtualMachineView(generic.ObjectView):
|
||||
queryset = VirtualMachine.objects.prefetch_related('tenant__group')
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -277,30 +274,30 @@ class VirtualMachineConfigContextView(ObjectConfigContextView):
|
||||
base_template = 'virtualization/virtualmachine.html'
|
||||
|
||||
|
||||
class VirtualMachineEditView(ObjectEditView):
|
||||
class VirtualMachineEditView(generic.ObjectEditView):
|
||||
queryset = VirtualMachine.objects.all()
|
||||
model_form = forms.VirtualMachineForm
|
||||
template_name = 'virtualization/virtualmachine_edit.html'
|
||||
|
||||
|
||||
class VirtualMachineDeleteView(ObjectDeleteView):
|
||||
class VirtualMachineDeleteView(generic.ObjectDeleteView):
|
||||
queryset = VirtualMachine.objects.all()
|
||||
|
||||
|
||||
class VirtualMachineBulkImportView(BulkImportView):
|
||||
class VirtualMachineBulkImportView(generic.BulkImportView):
|
||||
queryset = VirtualMachine.objects.all()
|
||||
model_form = forms.VirtualMachineCSVForm
|
||||
table = tables.VirtualMachineTable
|
||||
|
||||
|
||||
class VirtualMachineBulkEditView(BulkEditView):
|
||||
class VirtualMachineBulkEditView(generic.BulkEditView):
|
||||
queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
|
||||
filterset = filters.VirtualMachineFilterSet
|
||||
table = tables.VirtualMachineTable
|
||||
form = forms.VirtualMachineBulkEditForm
|
||||
|
||||
|
||||
class VirtualMachineBulkDeleteView(BulkDeleteView):
|
||||
class VirtualMachineBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
|
||||
filterset = filters.VirtualMachineFilterSet
|
||||
table = tables.VirtualMachineTable
|
||||
@ -310,7 +307,7 @@ class VirtualMachineBulkDeleteView(BulkDeleteView):
|
||||
# VM interfaces
|
||||
#
|
||||
|
||||
class VMInterfaceListView(ObjectListView):
|
||||
class VMInterfaceListView(generic.ObjectListView):
|
||||
queryset = VMInterface.objects.all()
|
||||
filterset = filters.VMInterfaceFilterSet
|
||||
filterset_form = forms.VMInterfaceFilterForm
|
||||
@ -318,7 +315,7 @@ class VMInterfaceListView(ObjectListView):
|
||||
action_buttons = ('export',)
|
||||
|
||||
|
||||
class VMInterfaceView(ObjectView):
|
||||
class VMInterfaceView(generic.ObjectView):
|
||||
queryset = VMInterface.objects.all()
|
||||
|
||||
def get(self, request, pk):
|
||||
@ -353,41 +350,41 @@ class VMInterfaceView(ObjectView):
|
||||
|
||||
|
||||
# TODO: This should not use ComponentCreateView
|
||||
class VMInterfaceCreateView(ComponentCreateView):
|
||||
class VMInterfaceCreateView(generic.ComponentCreateView):
|
||||
queryset = VMInterface.objects.all()
|
||||
form = forms.VMInterfaceCreateForm
|
||||
model_form = forms.VMInterfaceForm
|
||||
template_name = 'virtualization/virtualmachine_component_add.html'
|
||||
|
||||
|
||||
class VMInterfaceEditView(ObjectEditView):
|
||||
class VMInterfaceEditView(generic.ObjectEditView):
|
||||
queryset = VMInterface.objects.all()
|
||||
model_form = forms.VMInterfaceForm
|
||||
template_name = 'virtualization/vminterface_edit.html'
|
||||
|
||||
|
||||
class VMInterfaceDeleteView(ObjectDeleteView):
|
||||
class VMInterfaceDeleteView(generic.ObjectDeleteView):
|
||||
queryset = VMInterface.objects.all()
|
||||
|
||||
|
||||
class VMInterfaceBulkImportView(BulkImportView):
|
||||
class VMInterfaceBulkImportView(generic.BulkImportView):
|
||||
queryset = VMInterface.objects.all()
|
||||
model_form = forms.VMInterfaceCSVForm
|
||||
table = tables.VMInterfaceTable
|
||||
|
||||
|
||||
class VMInterfaceBulkEditView(BulkEditView):
|
||||
class VMInterfaceBulkEditView(generic.BulkEditView):
|
||||
queryset = VMInterface.objects.all()
|
||||
table = tables.VMInterfaceTable
|
||||
form = forms.VMInterfaceBulkEditForm
|
||||
|
||||
|
||||
class VMInterfaceBulkRenameView(BulkRenameView):
|
||||
class VMInterfaceBulkRenameView(generic.BulkRenameView):
|
||||
queryset = VMInterface.objects.all()
|
||||
form = forms.VMInterfaceBulkRenameForm
|
||||
|
||||
|
||||
class VMInterfaceBulkDeleteView(BulkDeleteView):
|
||||
class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = VMInterface.objects.all()
|
||||
table = tables.VMInterfaceTable
|
||||
|
||||
@ -396,7 +393,7 @@ class VMInterfaceBulkDeleteView(BulkDeleteView):
|
||||
# Bulk Device component creation
|
||||
#
|
||||
|
||||
class VirtualMachineBulkAddInterfaceView(BulkComponentCreateView):
|
||||
class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView):
|
||||
parent_model = VirtualMachine
|
||||
parent_field = 'virtual_machine'
|
||||
form = forms.VMInterfaceBulkCreateForm
|
||||
|
Loading…
Reference in New Issue
Block a user