Closes #18023: Employ register_model_view() for list views (#18029)

* Extend register_model_view() to enable registering list views

* Register circuits list views with register_model_view()

* Register core list views with register_model_view()

* Fix bulk_edit & bulk_delete URL paths

* Register dcim list views with register_model_view() (WIP)

* Register dcim list views with register_model_view()

* Register extras list views with register_model_view()

* Register ipam list views with register_model_view()

* Register tenancy list views with register_model_view()

* Register users list views with register_model_view()

* Register virtualization list views with register_model_view()

* Register vpn list views with register_model_view()

* Register wireless list views with register_model_view()

* Add change note for register_model_view()
This commit is contained in:
Jeremy Stretch 2024-11-20 15:54:37 -05:00 committed by GitHub
parent d2168b107f
commit a0b4b0afe0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 845 additions and 803 deletions

View File

@ -185,6 +185,9 @@ class MyView(generic.ObjectView):
) )
``` ```
!!! note "Changed in NetBox v4.2"
The `register_model_view()` function was extended in NetBox v4.2 to support registration of list views by passing `detail=False`.
::: utilities.views.register_model_view ::: utilities.views.register_model_view
::: utilities.views.ViewTab ::: utilities.views.ViewTab

View File

@ -5,70 +5,33 @@ from . import views
app_name = 'circuits' app_name = 'circuits'
urlpatterns = [ urlpatterns = [
path('providers/', include(get_model_urls('circuits', 'provider', detail=False))),
# Providers
path('providers/', views.ProviderListView.as_view(), name='provider_list'),
path('providers/add/', views.ProviderEditView.as_view(), name='provider_add'),
path('providers/import/', views.ProviderBulkImportView.as_view(), name='provider_import'),
path('providers/edit/', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'),
path('providers/delete/', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'),
path('providers/<int:pk>/', include(get_model_urls('circuits', 'provider'))), path('providers/<int:pk>/', include(get_model_urls('circuits', 'provider'))),
# Provider accounts path('provider-accounts/', include(get_model_urls('circuits', 'provideraccount', detail=False))),
path('provider-accounts/', views.ProviderAccountListView.as_view(), name='provideraccount_list'),
path('provider-accounts/add/', views.ProviderAccountEditView.as_view(), name='provideraccount_add'),
path('provider-accounts/import/', views.ProviderAccountBulkImportView.as_view(), name='provideraccount_import'),
path('provider-accounts/edit/', views.ProviderAccountBulkEditView.as_view(), name='provideraccount_bulk_edit'),
path('provider-accounts/delete/', views.ProviderAccountBulkDeleteView.as_view(), name='provideraccount_bulk_delete'),
path('provider-accounts/<int:pk>/', include(get_model_urls('circuits', 'provideraccount'))), path('provider-accounts/<int:pk>/', include(get_model_urls('circuits', 'provideraccount'))),
# Provider networks path('provider-networks/', include(get_model_urls('circuits', 'providernetwork', detail=False))),
path('provider-networks/', views.ProviderNetworkListView.as_view(), name='providernetwork_list'),
path('provider-networks/add/', views.ProviderNetworkEditView.as_view(), name='providernetwork_add'),
path('provider-networks/import/', views.ProviderNetworkBulkImportView.as_view(), name='providernetwork_import'),
path('provider-networks/edit/', views.ProviderNetworkBulkEditView.as_view(), name='providernetwork_bulk_edit'),
path('provider-networks/delete/', views.ProviderNetworkBulkDeleteView.as_view(), name='providernetwork_bulk_delete'),
path('provider-networks/<int:pk>/', include(get_model_urls('circuits', 'providernetwork'))), path('provider-networks/<int:pk>/', include(get_model_urls('circuits', 'providernetwork'))),
# Circuit types path('circuit-types/', include(get_model_urls('circuits', 'circuittype', detail=False))),
path('circuit-types/', views.CircuitTypeListView.as_view(), name='circuittype_list'),
path('circuit-types/add/', views.CircuitTypeEditView.as_view(), name='circuittype_add'),
path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'),
path('circuit-types/edit/', views.CircuitTypeBulkEditView.as_view(), name='circuittype_bulk_edit'),
path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'),
path('circuit-types/<int:pk>/', include(get_model_urls('circuits', 'circuittype'))), path('circuit-types/<int:pk>/', include(get_model_urls('circuits', 'circuittype'))),
# Circuits path('circuits/', include(get_model_urls('circuits', 'circuit', detail=False))),
path('circuits/', views.CircuitListView.as_view(), name='circuit_list'), path(
path('circuits/add/', views.CircuitEditView.as_view(), name='circuit_add'), 'circuits/<int:pk>/terminations/swap/',
path('circuits/import/', views.CircuitBulkImportView.as_view(), name='circuit_import'), views.CircuitSwapTerminations.as_view(),
path('circuits/edit/', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'), name='circuit_terminations_swap'
path('circuits/delete/', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'), ),
path('circuits/<int:pk>/terminations/swap/', views.CircuitSwapTerminations.as_view(), name='circuit_terminations_swap'),
path('circuits/<int:pk>/', include(get_model_urls('circuits', 'circuit'))), path('circuits/<int:pk>/', include(get_model_urls('circuits', 'circuit'))),
# Circuit terminations path('circuit-terminations/', include(get_model_urls('circuits', 'circuittermination', detail=False))),
path('circuit-terminations/', views.CircuitTerminationListView.as_view(), name='circuittermination_list'),
path('circuit-terminations/add/', views.CircuitTerminationEditView.as_view(), name='circuittermination_add'),
path('circuit-terminations/import/', views.CircuitTerminationBulkImportView.as_view(), name='circuittermination_import'),
path('circuit-terminations/edit/', views.CircuitTerminationBulkEditView.as_view(), name='circuittermination_bulk_edit'),
path('circuit-terminations/delete/', views.CircuitTerminationBulkDeleteView.as_view(), name='circuittermination_bulk_delete'),
path('circuit-terminations/<int:pk>/', include(get_model_urls('circuits', 'circuittermination'))), path('circuit-terminations/<int:pk>/', include(get_model_urls('circuits', 'circuittermination'))),
# Circuit Groups path('circuit-groups/', include(get_model_urls('circuits', 'circuitgroup', detail=False))),
path('circuit-groups/', views.CircuitGroupListView.as_view(), name='circuitgroup_list'),
path('circuit-groups/add/', views.CircuitGroupEditView.as_view(), name='circuitgroup_add'),
path('circuit-groups/import/', views.CircuitGroupBulkImportView.as_view(), name='circuitgroup_import'),
path('circuit-groups/edit/', views.CircuitGroupBulkEditView.as_view(), name='circuitgroup_bulk_edit'),
path('circuit-groups/delete/', views.CircuitGroupBulkDeleteView.as_view(), name='circuitgroup_bulk_delete'),
path('circuit-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitgroup'))), path('circuit-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitgroup'))),
# Circuit Group Assignments path('circuit-group-assignments/', include(get_model_urls('circuits', 'circuitgroupassignment', detail=False))),
path('circuit-group-assignments/', views.CircuitGroupAssignmentListView.as_view(), name='circuitgroupassignment_list'),
path('circuit-group-assignments/add/', views.CircuitGroupAssignmentEditView.as_view(), name='circuitgroupassignment_add'),
path('circuit-group-assignments/import/', views.CircuitGroupAssignmentBulkImportView.as_view(), name='circuitgroupassignment_import'),
path('circuit-group-assignments/edit/', views.CircuitGroupAssignmentBulkEditView.as_view(), name='circuitgroupassignment_bulk_edit'),
path('circuit-group-assignments/delete/', views.CircuitGroupAssignmentBulkDeleteView.as_view(), name='circuitgroupassignment_bulk_delete'),
path('circuit-group-assignments/<int:pk>/', include(get_model_urls('circuits', 'circuitgroupassignment'))), path('circuit-group-assignments/<int:pk>/', include(get_model_urls('circuits', 'circuitgroupassignment'))),
# Virtual circuits # Virtual circuits

View File

@ -17,6 +17,7 @@ from .models import *
# Providers # Providers
# #
@register_model_view(Provider, 'list', path='', detail=False)
class ProviderListView(generic.ObjectListView): class ProviderListView(generic.ObjectListView):
queryset = Provider.objects.annotate( queryset = Provider.objects.annotate(
count_circuits=count_related(Circuit, 'provider') count_circuits=count_related(Circuit, 'provider')
@ -36,6 +37,7 @@ class ProviderView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(Provider, 'add', detail=False)
@register_model_view(Provider, 'edit') @register_model_view(Provider, 'edit')
class ProviderEditView(generic.ObjectEditView): class ProviderEditView(generic.ObjectEditView):
queryset = Provider.objects.all() queryset = Provider.objects.all()
@ -47,11 +49,13 @@ class ProviderDeleteView(generic.ObjectDeleteView):
queryset = Provider.objects.all() queryset = Provider.objects.all()
@register_model_view(Provider, 'import', detail=False)
class ProviderBulkImportView(generic.BulkImportView): class ProviderBulkImportView(generic.BulkImportView):
queryset = Provider.objects.all() queryset = Provider.objects.all()
model_form = forms.ProviderImportForm model_form = forms.ProviderImportForm
@register_model_view(Provider, 'bulk_edit', path='edit', detail=False)
class ProviderBulkEditView(generic.BulkEditView): class ProviderBulkEditView(generic.BulkEditView):
queryset = Provider.objects.annotate( queryset = Provider.objects.annotate(
count_circuits=count_related(Circuit, 'provider') count_circuits=count_related(Circuit, 'provider')
@ -61,6 +65,7 @@ class ProviderBulkEditView(generic.BulkEditView):
form = forms.ProviderBulkEditForm form = forms.ProviderBulkEditForm
@register_model_view(Provider, 'bulk_delete', path='delete', detail=False)
class ProviderBulkDeleteView(generic.BulkDeleteView): class ProviderBulkDeleteView(generic.BulkDeleteView):
queryset = Provider.objects.annotate( queryset = Provider.objects.annotate(
count_circuits=count_related(Circuit, 'provider') count_circuits=count_related(Circuit, 'provider')
@ -78,6 +83,7 @@ class ProviderContactsView(ObjectContactsView):
# ProviderAccounts # ProviderAccounts
# #
@register_model_view(ProviderAccount, 'list', path='', detail=False)
class ProviderAccountListView(generic.ObjectListView): class ProviderAccountListView(generic.ObjectListView):
queryset = ProviderAccount.objects.annotate( queryset = ProviderAccount.objects.annotate(
count_circuits=count_related(Circuit, 'provider_account') count_circuits=count_related(Circuit, 'provider_account')
@ -97,6 +103,7 @@ class ProviderAccountView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ProviderAccount, 'add', detail=False)
@register_model_view(ProviderAccount, 'edit') @register_model_view(ProviderAccount, 'edit')
class ProviderAccountEditView(generic.ObjectEditView): class ProviderAccountEditView(generic.ObjectEditView):
queryset = ProviderAccount.objects.all() queryset = ProviderAccount.objects.all()
@ -108,12 +115,14 @@ class ProviderAccountDeleteView(generic.ObjectDeleteView):
queryset = ProviderAccount.objects.all() queryset = ProviderAccount.objects.all()
@register_model_view(ProviderAccount, 'import', detail=False)
class ProviderAccountBulkImportView(generic.BulkImportView): class ProviderAccountBulkImportView(generic.BulkImportView):
queryset = ProviderAccount.objects.all() queryset = ProviderAccount.objects.all()
model_form = forms.ProviderAccountImportForm model_form = forms.ProviderAccountImportForm
table = tables.ProviderAccountTable table = tables.ProviderAccountTable
@register_model_view(ProviderAccount, 'bulk_edit', path='edit', detail=False)
class ProviderAccountBulkEditView(generic.BulkEditView): class ProviderAccountBulkEditView(generic.BulkEditView):
queryset = ProviderAccount.objects.annotate( queryset = ProviderAccount.objects.annotate(
count_circuits=count_related(Circuit, 'provider_account') count_circuits=count_related(Circuit, 'provider_account')
@ -123,6 +132,7 @@ class ProviderAccountBulkEditView(generic.BulkEditView):
form = forms.ProviderAccountBulkEditForm form = forms.ProviderAccountBulkEditForm
@register_model_view(ProviderAccount, 'bulk_delete', path='delete', detail=False)
class ProviderAccountBulkDeleteView(generic.BulkDeleteView): class ProviderAccountBulkDeleteView(generic.BulkDeleteView):
queryset = ProviderAccount.objects.annotate( queryset = ProviderAccount.objects.annotate(
count_circuits=count_related(Circuit, 'provider_account') count_circuits=count_related(Circuit, 'provider_account')
@ -140,6 +150,7 @@ class ProviderAccountContactsView(ObjectContactsView):
# Provider networks # Provider networks
# #
@register_model_view(ProviderNetwork, 'list', path='', detail=False)
class ProviderNetworkListView(generic.ObjectListView): class ProviderNetworkListView(generic.ObjectListView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
filterset = filtersets.ProviderNetworkFilterSet filterset = filtersets.ProviderNetworkFilterSet
@ -166,6 +177,7 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ProviderNetwork, 'add', detail=False)
@register_model_view(ProviderNetwork, 'edit') @register_model_view(ProviderNetwork, 'edit')
class ProviderNetworkEditView(generic.ObjectEditView): class ProviderNetworkEditView(generic.ObjectEditView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
@ -177,11 +189,13 @@ class ProviderNetworkDeleteView(generic.ObjectDeleteView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
@register_model_view(ProviderNetwork, 'import', detail=False)
class ProviderNetworkBulkImportView(generic.BulkImportView): class ProviderNetworkBulkImportView(generic.BulkImportView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
model_form = forms.ProviderNetworkImportForm model_form = forms.ProviderNetworkImportForm
@register_model_view(ProviderNetwork, 'bulk_edit', path='edit', detail=False)
class ProviderNetworkBulkEditView(generic.BulkEditView): class ProviderNetworkBulkEditView(generic.BulkEditView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
filterset = filtersets.ProviderNetworkFilterSet filterset = filtersets.ProviderNetworkFilterSet
@ -189,6 +203,7 @@ class ProviderNetworkBulkEditView(generic.BulkEditView):
form = forms.ProviderNetworkBulkEditForm form = forms.ProviderNetworkBulkEditForm
@register_model_view(ProviderNetwork, 'bulk_delete', path='delete', detail=False)
class ProviderNetworkBulkDeleteView(generic.BulkDeleteView): class ProviderNetworkBulkDeleteView(generic.BulkDeleteView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
filterset = filtersets.ProviderNetworkFilterSet filterset = filtersets.ProviderNetworkFilterSet
@ -199,6 +214,7 @@ class ProviderNetworkBulkDeleteView(generic.BulkDeleteView):
# Circuit Types # Circuit Types
# #
@register_model_view(CircuitType, 'list', path='', detail=False)
class CircuitTypeListView(generic.ObjectListView): class CircuitTypeListView(generic.ObjectListView):
queryset = CircuitType.objects.annotate( queryset = CircuitType.objects.annotate(
circuit_count=count_related(Circuit, 'type') circuit_count=count_related(Circuit, 'type')
@ -218,6 +234,7 @@ class CircuitTypeView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(CircuitType, 'add', detail=False)
@register_model_view(CircuitType, 'edit') @register_model_view(CircuitType, 'edit')
class CircuitTypeEditView(generic.ObjectEditView): class CircuitTypeEditView(generic.ObjectEditView):
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
@ -229,11 +246,13 @@ class CircuitTypeDeleteView(generic.ObjectDeleteView):
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
@register_model_view(CircuitType, 'import', detail=False)
class CircuitTypeBulkImportView(generic.BulkImportView): class CircuitTypeBulkImportView(generic.BulkImportView):
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
model_form = forms.CircuitTypeImportForm model_form = forms.CircuitTypeImportForm
@register_model_view(CircuitType, 'bulk_edit', path='edit', detail=False)
class CircuitTypeBulkEditView(generic.BulkEditView): class CircuitTypeBulkEditView(generic.BulkEditView):
queryset = CircuitType.objects.annotate( queryset = CircuitType.objects.annotate(
circuit_count=count_related(Circuit, 'type') circuit_count=count_related(Circuit, 'type')
@ -243,6 +262,7 @@ class CircuitTypeBulkEditView(generic.BulkEditView):
form = forms.CircuitTypeBulkEditForm form = forms.CircuitTypeBulkEditForm
@register_model_view(CircuitType, 'bulk_delete', path='delete', detail=False)
class CircuitTypeBulkDeleteView(generic.BulkDeleteView): class CircuitTypeBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitType.objects.annotate( queryset = CircuitType.objects.annotate(
circuit_count=count_related(Circuit, 'type') circuit_count=count_related(Circuit, 'type')
@ -255,6 +275,7 @@ class CircuitTypeBulkDeleteView(generic.BulkDeleteView):
# Circuits # Circuits
# #
@register_model_view(Circuit, 'list', path='', detail=False)
class CircuitListView(generic.ObjectListView): class CircuitListView(generic.ObjectListView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
'tenant__group', 'termination_a__termination', 'termination_z__termination', 'tenant__group', 'termination_a__termination', 'termination_z__termination',
@ -269,6 +290,7 @@ class CircuitView(generic.ObjectView):
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
@register_model_view(Circuit, 'add', detail=False)
@register_model_view(Circuit, 'edit') @register_model_view(Circuit, 'edit')
class CircuitEditView(generic.ObjectEditView): class CircuitEditView(generic.ObjectEditView):
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
@ -280,6 +302,7 @@ class CircuitDeleteView(generic.ObjectDeleteView):
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
@register_model_view(Circuit, 'import', detail=False)
class CircuitBulkImportView(generic.BulkImportView): class CircuitBulkImportView(generic.BulkImportView):
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
model_form = forms.CircuitImportForm model_form = forms.CircuitImportForm
@ -295,6 +318,7 @@ class CircuitBulkImportView(generic.BulkImportView):
return data return data
@register_model_view(Circuit, 'bulk_edit', path='edit', detail=False)
class CircuitBulkEditView(generic.BulkEditView): class CircuitBulkEditView(generic.BulkEditView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
'tenant__group', 'termination_a__termination', 'termination_z__termination', 'tenant__group', 'termination_a__termination', 'termination_z__termination',
@ -304,6 +328,7 @@ class CircuitBulkEditView(generic.BulkEditView):
form = forms.CircuitBulkEditForm form = forms.CircuitBulkEditForm
@register_model_view(Circuit, 'bulk_delete', path='delete', detail=False)
class CircuitBulkDeleteView(generic.BulkDeleteView): class CircuitBulkDeleteView(generic.BulkDeleteView):
queryset = Circuit.objects.prefetch_related( queryset = Circuit.objects.prefetch_related(
'tenant__group', 'termination_a__termination', 'termination_z__termination', 'tenant__group', 'termination_a__termination', 'termination_z__termination',
@ -397,6 +422,7 @@ class CircuitContactsView(ObjectContactsView):
# Circuit terminations # Circuit terminations
# #
@register_model_view(CircuitTermination, 'list', path='', detail=False)
class CircuitTerminationListView(generic.ObjectListView): class CircuitTerminationListView(generic.ObjectListView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
filterset = filtersets.CircuitTerminationFilterSet filterset = filtersets.CircuitTerminationFilterSet
@ -409,6 +435,7 @@ class CircuitTerminationView(generic.ObjectView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
@register_model_view(CircuitTermination, 'add', detail=False)
@register_model_view(CircuitTermination, 'edit') @register_model_view(CircuitTermination, 'edit')
class CircuitTerminationEditView(generic.ObjectEditView): class CircuitTerminationEditView(generic.ObjectEditView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
@ -420,11 +447,13 @@ class CircuitTerminationDeleteView(generic.ObjectDeleteView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
@register_model_view(CircuitTermination, 'import', detail=False)
class CircuitTerminationBulkImportView(generic.BulkImportView): class CircuitTerminationBulkImportView(generic.BulkImportView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
model_form = forms.CircuitTerminationImportForm model_form = forms.CircuitTerminationImportForm
@register_model_view(CircuitTermination, 'bulk_edit', path='edit', detail=False)
class CircuitTerminationBulkEditView(generic.BulkEditView): class CircuitTerminationBulkEditView(generic.BulkEditView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
filterset = filtersets.CircuitTerminationFilterSet filterset = filtersets.CircuitTerminationFilterSet
@ -432,6 +461,7 @@ class CircuitTerminationBulkEditView(generic.BulkEditView):
form = forms.CircuitTerminationBulkEditForm form = forms.CircuitTerminationBulkEditForm
@register_model_view(CircuitTermination, 'bulk_delete', path='delete', detail=False)
class CircuitTerminationBulkDeleteView(generic.BulkDeleteView): class CircuitTerminationBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
filterset = filtersets.CircuitTerminationFilterSet filterset = filtersets.CircuitTerminationFilterSet
@ -446,6 +476,7 @@ register_model_view(CircuitTermination, 'trace', kwargs={'model': CircuitTermina
# Circuit Groups # Circuit Groups
# #
@register_model_view(CircuitGroup, 'list', path='', detail=False)
class CircuitGroupListView(generic.ObjectListView): class CircuitGroupListView(generic.ObjectListView):
queryset = CircuitGroup.objects.annotate( queryset = CircuitGroup.objects.annotate(
circuit_group_assignment_count=count_related(CircuitGroupAssignment, 'group') circuit_group_assignment_count=count_related(CircuitGroupAssignment, 'group')
@ -465,6 +496,7 @@ class CircuitGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(CircuitGroup, 'add', detail=False)
@register_model_view(CircuitGroup, 'edit') @register_model_view(CircuitGroup, 'edit')
class CircuitGroupEditView(generic.ObjectEditView): class CircuitGroupEditView(generic.ObjectEditView):
queryset = CircuitGroup.objects.all() queryset = CircuitGroup.objects.all()
@ -476,11 +508,13 @@ class CircuitGroupDeleteView(generic.ObjectDeleteView):
queryset = CircuitGroup.objects.all() queryset = CircuitGroup.objects.all()
@register_model_view(CircuitGroup, 'import', detail=False)
class CircuitGroupBulkImportView(generic.BulkImportView): class CircuitGroupBulkImportView(generic.BulkImportView):
queryset = CircuitGroup.objects.all() queryset = CircuitGroup.objects.all()
model_form = forms.CircuitGroupImportForm model_form = forms.CircuitGroupImportForm
@register_model_view(CircuitGroup, 'bulk_edit', path='edit', detail=False)
class CircuitGroupBulkEditView(generic.BulkEditView): class CircuitGroupBulkEditView(generic.BulkEditView):
queryset = CircuitGroup.objects.all() queryset = CircuitGroup.objects.all()
filterset = filtersets.CircuitGroupFilterSet filterset = filtersets.CircuitGroupFilterSet
@ -488,6 +522,7 @@ class CircuitGroupBulkEditView(generic.BulkEditView):
form = forms.CircuitGroupBulkEditForm form = forms.CircuitGroupBulkEditForm
@register_model_view(CircuitGroup, 'bulk_delete', path='delete', detail=False)
class CircuitGroupBulkDeleteView(generic.BulkDeleteView): class CircuitGroupBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitGroup.objects.all() queryset = CircuitGroup.objects.all()
filterset = filtersets.CircuitGroupFilterSet filterset = filtersets.CircuitGroupFilterSet
@ -498,6 +533,7 @@ class CircuitGroupBulkDeleteView(generic.BulkDeleteView):
# Circuit Groups # Circuit Groups
# #
@register_model_view(CircuitGroupAssignment, 'list', path='', detail=False)
class CircuitGroupAssignmentListView(generic.ObjectListView): class CircuitGroupAssignmentListView(generic.ObjectListView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
filterset = filtersets.CircuitGroupAssignmentFilterSet filterset = filtersets.CircuitGroupAssignmentFilterSet
@ -510,6 +546,7 @@ class CircuitGroupAssignmentView(generic.ObjectView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
@register_model_view(CircuitGroupAssignment, 'add', detail=False)
@register_model_view(CircuitGroupAssignment, 'edit') @register_model_view(CircuitGroupAssignment, 'edit')
class CircuitGroupAssignmentEditView(generic.ObjectEditView): class CircuitGroupAssignmentEditView(generic.ObjectEditView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
@ -521,11 +558,13 @@ class CircuitGroupAssignmentDeleteView(generic.ObjectDeleteView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
@register_model_view(CircuitGroupAssignment, 'import', detail=False)
class CircuitGroupAssignmentBulkImportView(generic.BulkImportView): class CircuitGroupAssignmentBulkImportView(generic.BulkImportView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
model_form = forms.CircuitGroupAssignmentImportForm model_form = forms.CircuitGroupAssignmentImportForm
@register_model_view(CircuitGroupAssignment, 'bulk_edit', path='edit', detail=False)
class CircuitGroupAssignmentBulkEditView(generic.BulkEditView): class CircuitGroupAssignmentBulkEditView(generic.BulkEditView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
filterset = filtersets.CircuitGroupAssignmentFilterSet filterset = filtersets.CircuitGroupAssignmentFilterSet
@ -533,6 +572,7 @@ class CircuitGroupAssignmentBulkEditView(generic.BulkEditView):
form = forms.CircuitGroupAssignmentBulkEditForm form = forms.CircuitGroupAssignmentBulkEditForm
@register_model_view(CircuitGroupAssignment, 'bulk_delete', path='delete', detail=False)
class CircuitGroupAssignmentBulkDeleteView(generic.BulkDeleteView): class CircuitGroupAssignmentBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitGroupAssignment.objects.all() queryset = CircuitGroupAssignment.objects.all()
filterset = filtersets.CircuitGroupAssignmentFilterSet filterset = filtersets.CircuitGroupAssignmentFilterSet

View File

@ -6,27 +6,16 @@ from . import views
app_name = 'core' app_name = 'core'
urlpatterns = ( urlpatterns = (
# Data sources path('data-sources/', include(get_model_urls('core', 'datasource', detail=False))),
path('data-sources/', views.DataSourceListView.as_view(), name='datasource_list'),
path('data-sources/add/', views.DataSourceEditView.as_view(), name='datasource_add'),
path('data-sources/import/', views.DataSourceBulkImportView.as_view(), name='datasource_import'),
path('data-sources/edit/', views.DataSourceBulkEditView.as_view(), name='datasource_bulk_edit'),
path('data-sources/delete/', views.DataSourceBulkDeleteView.as_view(), name='datasource_bulk_delete'),
path('data-sources/<int:pk>/', include(get_model_urls('core', 'datasource'))), path('data-sources/<int:pk>/', include(get_model_urls('core', 'datasource'))),
# Data files path('data-files/', include(get_model_urls('core', 'datafile', detail=False))),
path('data-files/', views.DataFileListView.as_view(), name='datafile_list'),
path('data-files/delete/', views.DataFileBulkDeleteView.as_view(), name='datafile_bulk_delete'),
path('data-files/<int:pk>/', include(get_model_urls('core', 'datafile'))), path('data-files/<int:pk>/', include(get_model_urls('core', 'datafile'))),
# Job results path('jobs/', include(get_model_urls('core', 'job', detail=False))),
path('jobs/', views.JobListView.as_view(), name='job_list'), path('jobs/<int:pk>/', include(get_model_urls('core', 'job'))),
path('jobs/delete/', views.JobBulkDeleteView.as_view(), name='job_bulk_delete'),
path('jobs/<int:pk>/', views.JobView.as_view(), name='job'),
path('jobs/<int:pk>/delete/', views.JobDeleteView.as_view(), name='job_delete'),
# Change logging path('changelog/', include(get_model_urls('core', 'objectchange', detail=False))),
path('changelog/', views.ObjectChangeListView.as_view(), name='objectchange_list'),
path('changelog/<int:pk>/', include(get_model_urls('core', 'objectchange'))), path('changelog/<int:pk>/', include(get_model_urls('core', 'objectchange'))),
# Background Tasks # Background Tasks
@ -40,17 +29,11 @@ urlpatterns = (
path('background-workers/<int:queue_index>/', views.WorkerListView.as_view(), name='worker_list'), path('background-workers/<int:queue_index>/', views.WorkerListView.as_view(), name='worker_list'),
path('background-workers/<str:key>/', views.WorkerView.as_view(), name='worker'), path('background-workers/<str:key>/', views.WorkerView.as_view(), name='worker'),
# Config revisions path('config-revisions/', include(get_model_urls('core', 'configrevision', detail=False))),
path('config-revisions/', views.ConfigRevisionListView.as_view(), name='configrevision_list'),
path('config-revisions/add/', views.ConfigRevisionEditView.as_view(), name='configrevision_add'),
path('config-revisions/delete/', views.ConfigRevisionBulkDeleteView.as_view(), name='configrevision_bulk_delete'),
path('config-revisions/<int:pk>/restore/', views.ConfigRevisionRestoreView.as_view(), name='configrevision_restore'),
path('config-revisions/<int:pk>/', include(get_model_urls('core', 'configrevision'))), path('config-revisions/<int:pk>/', include(get_model_urls('core', 'configrevision'))),
# System
path('system/', views.SystemView.as_view(), name='system'), path('system/', views.SystemView.as_view(), name='system'),
# Plugins
path('plugins/', views.PluginListView.as_view(), name='plugin_list'), path('plugins/', views.PluginListView.as_view(), name='plugin_list'),
path('plugins/<str:name>/', views.PluginView.as_view(), name='plugin'), path('plugins/<str:name>/', views.PluginView.as_view(), name='plugin'),
) )

View File

@ -46,6 +46,7 @@ from .tables import CatalogPluginTable, PluginVersionTable
# Data sources # Data sources
# #
@register_model_view(DataSource, 'list', path='', detail=False)
class DataSourceListView(generic.ObjectListView): class DataSourceListView(generic.ObjectListView):
queryset = DataSource.objects.annotate( queryset = DataSource.objects.annotate(
file_count=count_related(DataFile, 'source') file_count=count_related(DataFile, 'source')
@ -92,6 +93,7 @@ class DataSourceSyncView(BaseObjectView):
return redirect(datasource.get_absolute_url()) return redirect(datasource.get_absolute_url())
@register_model_view(DataSource, 'add', detail=False)
@register_model_view(DataSource, 'edit') @register_model_view(DataSource, 'edit')
class DataSourceEditView(generic.ObjectEditView): class DataSourceEditView(generic.ObjectEditView):
queryset = DataSource.objects.all() queryset = DataSource.objects.all()
@ -103,11 +105,13 @@ class DataSourceDeleteView(generic.ObjectDeleteView):
queryset = DataSource.objects.all() queryset = DataSource.objects.all()
@register_model_view(DataSource, 'import', detail=False)
class DataSourceBulkImportView(generic.BulkImportView): class DataSourceBulkImportView(generic.BulkImportView):
queryset = DataSource.objects.all() queryset = DataSource.objects.all()
model_form = forms.DataSourceImportForm model_form = forms.DataSourceImportForm
@register_model_view(DataSource, 'bulk_edit', path='edit', detail=False)
class DataSourceBulkEditView(generic.BulkEditView): class DataSourceBulkEditView(generic.BulkEditView):
queryset = DataSource.objects.annotate( queryset = DataSource.objects.annotate(
count_files=count_related(DataFile, 'source') count_files=count_related(DataFile, 'source')
@ -117,6 +121,7 @@ class DataSourceBulkEditView(generic.BulkEditView):
form = forms.DataSourceBulkEditForm form = forms.DataSourceBulkEditForm
@register_model_view(DataSource, 'bulk_delete', path='delete', detail=False)
class DataSourceBulkDeleteView(generic.BulkDeleteView): class DataSourceBulkDeleteView(generic.BulkDeleteView):
queryset = DataSource.objects.annotate( queryset = DataSource.objects.annotate(
count_files=count_related(DataFile, 'source') count_files=count_related(DataFile, 'source')
@ -129,6 +134,7 @@ class DataSourceBulkDeleteView(generic.BulkDeleteView):
# Data files # Data files
# #
@register_model_view(DataFile, 'list', path='', detail=False)
class DataFileListView(generic.ObjectListView): class DataFileListView(generic.ObjectListView):
queryset = DataFile.objects.defer('data') queryset = DataFile.objects.defer('data')
filterset = filtersets.DataFileFilterSet filterset = filtersets.DataFileFilterSet
@ -149,6 +155,7 @@ class DataFileDeleteView(generic.ObjectDeleteView):
queryset = DataFile.objects.all() queryset = DataFile.objects.all()
@register_model_view(DataFile, 'bulk_delete', path='delete', detail=False)
class DataFileBulkDeleteView(generic.BulkDeleteView): class DataFileBulkDeleteView(generic.BulkDeleteView):
queryset = DataFile.objects.defer('data') queryset = DataFile.objects.defer('data')
filterset = filtersets.DataFileFilterSet filterset = filtersets.DataFileFilterSet
@ -159,6 +166,7 @@ class DataFileBulkDeleteView(generic.BulkDeleteView):
# Jobs # Jobs
# #
@register_model_view(Job, 'list', path='', detail=False)
class JobListView(generic.ObjectListView): class JobListView(generic.ObjectListView):
queryset = Job.objects.all() queryset = Job.objects.all()
filterset = filtersets.JobFilterSet filterset = filtersets.JobFilterSet
@ -170,14 +178,17 @@ class JobListView(generic.ObjectListView):
} }
@register_model_view(Job)
class JobView(generic.ObjectView): class JobView(generic.ObjectView):
queryset = Job.objects.all() queryset = Job.objects.all()
@register_model_view(Job, 'delete')
class JobDeleteView(generic.ObjectDeleteView): class JobDeleteView(generic.ObjectDeleteView):
queryset = Job.objects.all() queryset = Job.objects.all()
@register_model_view(Job, 'bulk_delete', path='delete', detail=False)
class JobBulkDeleteView(generic.BulkDeleteView): class JobBulkDeleteView(generic.BulkDeleteView):
queryset = Job.objects.all() queryset = Job.objects.all()
filterset = filtersets.JobFilterSet filterset = filtersets.JobFilterSet
@ -188,6 +199,7 @@ class JobBulkDeleteView(generic.BulkDeleteView):
# Change logging # Change logging
# #
@register_model_view(ObjectChange, 'list', path='', detail=False)
class ObjectChangeListView(generic.ObjectListView): class ObjectChangeListView(generic.ObjectListView):
queryset = ObjectChange.objects.valid_models() queryset = ObjectChange.objects.valid_models()
filterset = filtersets.ObjectChangeFilterSet filterset = filtersets.ObjectChangeFilterSet
@ -257,6 +269,7 @@ class ObjectChangeView(generic.ObjectView):
# Config Revisions # Config Revisions
# #
@register_model_view(ConfigRevision, 'list', path='', detail=False)
class ConfigRevisionListView(generic.ObjectListView): class ConfigRevisionListView(generic.ObjectListView):
queryset = ConfigRevision.objects.all() queryset = ConfigRevision.objects.all()
filterset = filtersets.ConfigRevisionFilterSet filterset = filtersets.ConfigRevisionFilterSet
@ -269,6 +282,7 @@ class ConfigRevisionView(generic.ObjectView):
queryset = ConfigRevision.objects.all() queryset = ConfigRevision.objects.all()
@register_model_view(ConfigRevision, 'add', detail=False)
class ConfigRevisionEditView(generic.ObjectEditView): class ConfigRevisionEditView(generic.ObjectEditView):
queryset = ConfigRevision.objects.all() queryset = ConfigRevision.objects.all()
form = forms.ConfigRevisionForm form = forms.ConfigRevisionForm
@ -279,12 +293,14 @@ class ConfigRevisionDeleteView(generic.ObjectDeleteView):
queryset = ConfigRevision.objects.all() queryset = ConfigRevision.objects.all()
@register_model_view(ConfigRevision, 'bulk_delete', path='delete', detail=False)
class ConfigRevisionBulkDeleteView(generic.BulkDeleteView): class ConfigRevisionBulkDeleteView(generic.BulkDeleteView):
queryset = ConfigRevision.objects.all() queryset = ConfigRevision.objects.all()
filterset = filtersets.ConfigRevisionFilterSet filterset = filtersets.ConfigRevisionFilterSet
table = tables.ConfigRevisionTable table = tables.ConfigRevisionTable
@register_model_view(ConfigRevision, 'restore')
class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View): class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View):
def get_required_permission(self): def get_required_permission(self):

View File

@ -6,335 +6,144 @@ from . import views
app_name = 'dcim' app_name = 'dcim'
urlpatterns = [ urlpatterns = [
# Regions path('regions/', include(get_model_urls('dcim', 'region', detail=False))),
path('regions/', views.RegionListView.as_view(), name='region_list'),
path('regions/add/', views.RegionEditView.as_view(), name='region_add'),
path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'),
path('regions/edit/', views.RegionBulkEditView.as_view(), name='region_bulk_edit'),
path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'),
path('regions/<int:pk>/', include(get_model_urls('dcim', 'region'))), path('regions/<int:pk>/', include(get_model_urls('dcim', 'region'))),
# Site groups path('site-groups/', include(get_model_urls('dcim', 'sitegroup', detail=False))),
path('site-groups/', views.SiteGroupListView.as_view(), name='sitegroup_list'),
path('site-groups/add/', views.SiteGroupEditView.as_view(), name='sitegroup_add'),
path('site-groups/import/', views.SiteGroupBulkImportView.as_view(), name='sitegroup_import'),
path('site-groups/edit/', views.SiteGroupBulkEditView.as_view(), name='sitegroup_bulk_edit'),
path('site-groups/delete/', views.SiteGroupBulkDeleteView.as_view(), name='sitegroup_bulk_delete'),
path('site-groups/<int:pk>/', include(get_model_urls('dcim', 'sitegroup'))), path('site-groups/<int:pk>/', include(get_model_urls('dcim', 'sitegroup'))),
# Sites path('sites/', include(get_model_urls('dcim', 'site', detail=False))),
path('sites/', views.SiteListView.as_view(), name='site_list'),
path('sites/add/', views.SiteEditView.as_view(), name='site_add'),
path('sites/import/', views.SiteBulkImportView.as_view(), name='site_import'),
path('sites/edit/', views.SiteBulkEditView.as_view(), name='site_bulk_edit'),
path('sites/delete/', views.SiteBulkDeleteView.as_view(), name='site_bulk_delete'),
path('sites/<int:pk>/', include(get_model_urls('dcim', 'site'))), path('sites/<int:pk>/', include(get_model_urls('dcim', 'site'))),
# Locations path('locations/', include(get_model_urls('dcim', 'location', detail=False))),
path('locations/', views.LocationListView.as_view(), name='location_list'),
path('locations/add/', views.LocationEditView.as_view(), name='location_add'),
path('locations/import/', views.LocationBulkImportView.as_view(), name='location_import'),
path('locations/edit/', views.LocationBulkEditView.as_view(), name='location_bulk_edit'),
path('locations/delete/', views.LocationBulkDeleteView.as_view(), name='location_bulk_delete'),
path('locations/<int:pk>/', include(get_model_urls('dcim', 'location'))), path('locations/<int:pk>/', include(get_model_urls('dcim', 'location'))),
# Rack roles path('rack-roles/', include(get_model_urls('dcim', 'rackrole', detail=False))),
path('rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'),
path('rack-roles/add/', views.RackRoleEditView.as_view(), name='rackrole_add'),
path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'),
path('rack-roles/edit/', views.RackRoleBulkEditView.as_view(), name='rackrole_bulk_edit'),
path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'),
path('rack-roles/<int:pk>/', include(get_model_urls('dcim', 'rackrole'))), path('rack-roles/<int:pk>/', include(get_model_urls('dcim', 'rackrole'))),
# Rack reservations path('rack-reservations/', include(get_model_urls('dcim', 'rackreservation', detail=False))),
path('rack-reservations/', views.RackReservationListView.as_view(), name='rackreservation_list'),
path('rack-reservations/add/', views.RackReservationEditView.as_view(), name='rackreservation_add'),
path('rack-reservations/import/', views.RackReservationImportView.as_view(), name='rackreservation_import'),
path('rack-reservations/edit/', views.RackReservationBulkEditView.as_view(), name='rackreservation_bulk_edit'),
path('rack-reservations/delete/', views.RackReservationBulkDeleteView.as_view(), name='rackreservation_bulk_delete'),
path('rack-reservations/<int:pk>/', include(get_model_urls('dcim', 'rackreservation'))), path('rack-reservations/<int:pk>/', include(get_model_urls('dcim', 'rackreservation'))),
# Racks path('racks/', include(get_model_urls('dcim', 'rack', detail=False))),
path('racks/', views.RackListView.as_view(), name='rack_list'),
path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'),
path('racks/add/', views.RackEditView.as_view(), name='rack_add'),
path('racks/import/', views.RackBulkImportView.as_view(), name='rack_import'),
path('racks/edit/', views.RackBulkEditView.as_view(), name='rack_bulk_edit'),
path('racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'),
path('racks/<int:pk>/', include(get_model_urls('dcim', 'rack'))), path('racks/<int:pk>/', include(get_model_urls('dcim', 'rack'))),
path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'),
# Rack Types path('rack-types/', include(get_model_urls('dcim', 'racktype', detail=False))),
path('rack-types/', views.RackTypeListView.as_view(), name='racktype_list'),
path('rack-types/add/', views.RackTypeEditView.as_view(), name='racktype_add'),
path('rack-types/import/', views.RackTypeBulkImportView.as_view(), name='racktype_import'),
path('rack-types/edit/', views.RackTypeBulkEditView.as_view(), name='racktype_bulk_edit'),
path('rack-types/delete/', views.RackTypeBulkDeleteView.as_view(), name='racktype_bulk_delete'),
path('rack-types/<int:pk>/', include(get_model_urls('dcim', 'racktype'))), path('rack-types/<int:pk>/', include(get_model_urls('dcim', 'racktype'))),
# Manufacturers path('manufacturers/', include(get_model_urls('dcim', 'manufacturer', detail=False))),
path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'),
path('manufacturers/add/', views.ManufacturerEditView.as_view(), name='manufacturer_add'),
path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'),
path('manufacturers/edit/', views.ManufacturerBulkEditView.as_view(), name='manufacturer_bulk_edit'),
path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
path('manufacturers/<int:pk>/', include(get_model_urls('dcim', 'manufacturer'))), path('manufacturers/<int:pk>/', include(get_model_urls('dcim', 'manufacturer'))),
# Device types path('device-types/', include(get_model_urls('dcim', 'devicetype', detail=False))),
path('device-types/', views.DeviceTypeListView.as_view(), name='devicetype_list'),
path('device-types/add/', views.DeviceTypeEditView.as_view(), name='devicetype_add'),
path('device-types/import/', views.DeviceTypeImportView.as_view(), name='devicetype_import'),
path('device-types/edit/', views.DeviceTypeBulkEditView.as_view(), name='devicetype_bulk_edit'),
path('device-types/delete/', views.DeviceTypeBulkDeleteView.as_view(), name='devicetype_bulk_delete'),
path('device-types/<int:pk>/', include(get_model_urls('dcim', 'devicetype'))), path('device-types/<int:pk>/', include(get_model_urls('dcim', 'devicetype'))),
# Module types path('module-types/', include(get_model_urls('dcim', 'moduletype', detail=False))),
path('module-types/', views.ModuleTypeListView.as_view(), name='moduletype_list'),
path('module-types/add/', views.ModuleTypeEditView.as_view(), name='moduletype_add'),
path('module-types/import/', views.ModuleTypeImportView.as_view(), name='moduletype_import'),
path('module-types/edit/', views.ModuleTypeBulkEditView.as_view(), name='moduletype_bulk_edit'),
path('module-types/delete/', views.ModuleTypeBulkDeleteView.as_view(), name='moduletype_bulk_delete'),
path('module-types/<int:pk>/', include(get_model_urls('dcim', 'moduletype'))), path('module-types/<int:pk>/', include(get_model_urls('dcim', 'moduletype'))),
# Console port templates path('console-port-templates/', include(get_model_urls('dcim', 'consoleporttemplate', detail=False))),
path('console-port-templates/add/', views.ConsolePortTemplateCreateView.as_view(), name='consoleporttemplate_add'),
path('console-port-templates/edit/', views.ConsolePortTemplateBulkEditView.as_view(), name='consoleporttemplate_bulk_edit'),
path('console-port-templates/rename/', views.ConsolePortTemplateBulkRenameView.as_view(), name='consoleporttemplate_bulk_rename'),
path('console-port-templates/delete/', views.ConsolePortTemplateBulkDeleteView.as_view(), name='consoleporttemplate_bulk_delete'),
path('console-port-templates/<int:pk>/', include(get_model_urls('dcim', 'consoleporttemplate'))), path('console-port-templates/<int:pk>/', include(get_model_urls('dcim', 'consoleporttemplate'))),
# Console server port templates path('console-server-port-templates/', include(get_model_urls('dcim', 'consoleserverporttemplate', detail=False))),
path('console-server-port-templates/add/', views.ConsoleServerPortTemplateCreateView.as_view(), name='consoleserverporttemplate_add'),
path('console-server-port-templates/edit/', views.ConsoleServerPortTemplateBulkEditView.as_view(), name='consoleserverporttemplate_bulk_edit'),
path('console-server-port-templates/rename/', views.ConsoleServerPortTemplateBulkRenameView.as_view(), name='consoleserverporttemplate_bulk_rename'),
path('console-server-port-templates/delete/', views.ConsoleServerPortTemplateBulkDeleteView.as_view(), name='consoleserverporttemplate_bulk_delete'),
path('console-server-port-templates/<int:pk>/', include(get_model_urls('dcim', 'consoleserverporttemplate'))), path('console-server-port-templates/<int:pk>/', include(get_model_urls('dcim', 'consoleserverporttemplate'))),
# Power port templates path('power-port-templates/', include(get_model_urls('dcim', 'powerporttemplate', detail=False))),
path('power-port-templates/add/', views.PowerPortTemplateCreateView.as_view(), name='powerporttemplate_add'),
path('power-port-templates/edit/', views.PowerPortTemplateBulkEditView.as_view(), name='powerporttemplate_bulk_edit'),
path('power-port-templates/rename/', views.PowerPortTemplateBulkRenameView.as_view(), name='powerporttemplate_bulk_rename'),
path('power-port-templates/delete/', views.PowerPortTemplateBulkDeleteView.as_view(), name='powerporttemplate_bulk_delete'),
path('power-port-templates/<int:pk>/', include(get_model_urls('dcim', 'powerporttemplate'))), path('power-port-templates/<int:pk>/', include(get_model_urls('dcim', 'powerporttemplate'))),
# Power outlet templates path('power-outlet-templates/', include(get_model_urls('dcim', 'poweroutlettemplate', detail=False))),
path('power-outlet-templates/add/', views.PowerOutletTemplateCreateView.as_view(), name='poweroutlettemplate_add'),
path('power-outlet-templates/edit/', views.PowerOutletTemplateBulkEditView.as_view(), name='poweroutlettemplate_bulk_edit'),
path('power-outlet-templates/rename/', views.PowerOutletTemplateBulkRenameView.as_view(), name='poweroutlettemplate_bulk_rename'),
path('power-outlet-templates/delete/', views.PowerOutletTemplateBulkDeleteView.as_view(), name='poweroutlettemplate_bulk_delete'),
path('power-outlet-templates/<int:pk>/', include(get_model_urls('dcim', 'poweroutlettemplate'))), path('power-outlet-templates/<int:pk>/', include(get_model_urls('dcim', 'poweroutlettemplate'))),
# Interface templates path('interface-templates/', include(get_model_urls('dcim', 'interfacetemplate', detail=False))),
path('interface-templates/add/', views.InterfaceTemplateCreateView.as_view(), name='interfacetemplate_add'),
path('interface-templates/edit/', views.InterfaceTemplateBulkEditView.as_view(), name='interfacetemplate_bulk_edit'),
path('interface-templates/rename/', views.InterfaceTemplateBulkRenameView.as_view(), name='interfacetemplate_bulk_rename'),
path('interface-templates/delete/', views.InterfaceTemplateBulkDeleteView.as_view(), name='interfacetemplate_bulk_delete'),
path('interface-templates/<int:pk>/', include(get_model_urls('dcim', 'interfacetemplate'))), path('interface-templates/<int:pk>/', include(get_model_urls('dcim', 'interfacetemplate'))),
# Front port templates path('front-port-templates/', include(get_model_urls('dcim', 'frontporttemplate', detail=False))),
path('front-port-templates/add/', views.FrontPortTemplateCreateView.as_view(), name='frontporttemplate_add'),
path('front-port-templates/edit/', views.FrontPortTemplateBulkEditView.as_view(), name='frontporttemplate_bulk_edit'),
path('front-port-templates/rename/', views.FrontPortTemplateBulkRenameView.as_view(), name='frontporttemplate_bulk_rename'),
path('front-port-templates/delete/', views.FrontPortTemplateBulkDeleteView.as_view(), name='frontporttemplate_bulk_delete'),
path('front-port-templates/<int:pk>/', include(get_model_urls('dcim', 'frontporttemplate'))), path('front-port-templates/<int:pk>/', include(get_model_urls('dcim', 'frontporttemplate'))),
# Rear port templates path('rear-port-templates/', include(get_model_urls('dcim', 'rearporttemplate', detail=False))),
path('rear-port-templates/add/', views.RearPortTemplateCreateView.as_view(), name='rearporttemplate_add'),
path('rear-port-templates/edit/', views.RearPortTemplateBulkEditView.as_view(), name='rearporttemplate_bulk_edit'),
path('rear-port-templates/rename/', views.RearPortTemplateBulkRenameView.as_view(), name='rearporttemplate_bulk_rename'),
path('rear-port-templates/delete/', views.RearPortTemplateBulkDeleteView.as_view(), name='rearporttemplate_bulk_delete'),
path('rear-port-templates/<int:pk>/', include(get_model_urls('dcim', 'rearporttemplate'))), path('rear-port-templates/<int:pk>/', include(get_model_urls('dcim', 'rearporttemplate'))),
# Device bay templates path('device-bay-templates/', include(get_model_urls('dcim', 'devicebaytemplate', detail=False))),
path('device-bay-templates/add/', views.DeviceBayTemplateCreateView.as_view(), name='devicebaytemplate_add'),
path('device-bay-templates/edit/', views.DeviceBayTemplateBulkEditView.as_view(), name='devicebaytemplate_bulk_edit'),
path('device-bay-templates/rename/', views.DeviceBayTemplateBulkRenameView.as_view(), name='devicebaytemplate_bulk_rename'),
path('device-bay-templates/delete/', views.DeviceBayTemplateBulkDeleteView.as_view(), name='devicebaytemplate_bulk_delete'),
path('device-bay-templates/<int:pk>/', include(get_model_urls('dcim', 'devicebaytemplate'))), path('device-bay-templates/<int:pk>/', include(get_model_urls('dcim', 'devicebaytemplate'))),
# Module bay templates path('module-bay-templates/', include(get_model_urls('dcim', 'modulebaytemplate', detail=False))),
path('module-bay-templates/add/', views.ModuleBayTemplateCreateView.as_view(), name='modulebaytemplate_add'),
path('module-bay-templates/edit/', views.ModuleBayTemplateBulkEditView.as_view(), name='modulebaytemplate_bulk_edit'),
path('module-bay-templates/rename/', views.ModuleBayTemplateBulkRenameView.as_view(), name='modulebaytemplate_bulk_rename'),
path('module-bay-templates/delete/', views.ModuleBayTemplateBulkDeleteView.as_view(), name='modulebaytemplate_bulk_delete'),
path('module-bay-templates/<int:pk>/', include(get_model_urls('dcim', 'modulebaytemplate'))), path('module-bay-templates/<int:pk>/', include(get_model_urls('dcim', 'modulebaytemplate'))),
# Inventory item templates path('inventory-item-templates/', include(get_model_urls('dcim', 'inventoryitemtemplate', detail=False))),
path('inventory-item-templates/add/', views.InventoryItemTemplateCreateView.as_view(), name='inventoryitemtemplate_add'),
path('inventory-item-templates/edit/', views.InventoryItemTemplateBulkEditView.as_view(), name='inventoryitemtemplate_bulk_edit'),
path('inventory-item-templates/rename/', views.InventoryItemTemplateBulkRenameView.as_view(), name='inventoryitemtemplate_bulk_rename'),
path('inventory-item-templates/delete/', views.InventoryItemTemplateBulkDeleteView.as_view(), name='inventoryitemtemplate_bulk_delete'),
path('inventory-item-templates/<int:pk>/', include(get_model_urls('dcim', 'inventoryitemtemplate'))), path('inventory-item-templates/<int:pk>/', include(get_model_urls('dcim', 'inventoryitemtemplate'))),
# Device roles path('device-roles/', include(get_model_urls('dcim', 'devicerole', detail=False))),
path('device-roles/', views.DeviceRoleListView.as_view(), name='devicerole_list'),
path('device-roles/add/', views.DeviceRoleEditView.as_view(), name='devicerole_add'),
path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'),
path('device-roles/edit/', views.DeviceRoleBulkEditView.as_view(), name='devicerole_bulk_edit'),
path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'),
path('device-roles/<int:pk>/', include(get_model_urls('dcim', 'devicerole'))), path('device-roles/<int:pk>/', include(get_model_urls('dcim', 'devicerole'))),
# Platforms path('platforms/', include(get_model_urls('dcim', 'platform', detail=False))),
path('platforms/', views.PlatformListView.as_view(), name='platform_list'),
path('platforms/add/', views.PlatformEditView.as_view(), name='platform_add'),
path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'),
path('platforms/edit/', views.PlatformBulkEditView.as_view(), name='platform_bulk_edit'),
path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'),
path('platforms/<int:pk>/', include(get_model_urls('dcim', 'platform'))), path('platforms/<int:pk>/', include(get_model_urls('dcim', 'platform'))),
# Devices path('devices/', include(get_model_urls('dcim', 'device', detail=False))),
path('devices/', views.DeviceListView.as_view(), name='device_list'),
path('devices/add/', views.DeviceEditView.as_view(), name='device_add'),
path('devices/import/', views.DeviceBulkImportView.as_view(), name='device_import'),
path('devices/edit/', views.DeviceBulkEditView.as_view(), name='device_bulk_edit'),
path('devices/rename/', views.DeviceBulkRenameView.as_view(), name='device_bulk_rename'),
path('devices/delete/', views.DeviceBulkDeleteView.as_view(), name='device_bulk_delete'),
path('devices/<int:pk>/', include(get_model_urls('dcim', 'device'))), path('devices/<int:pk>/', include(get_model_urls('dcim', 'device'))),
# Virtual Device Context path('virtual-device-contexts/', include(get_model_urls('dcim', 'virtualdevicecontext', detail=False))),
path('virtual-device-contexts/', views.VirtualDeviceContextListView.as_view(), name='virtualdevicecontext_list'),
path('virtual-device-contexts/add/', views.VirtualDeviceContextEditView.as_view(), name='virtualdevicecontext_add'),
path('virtual-device-contexts/import/', views.VirtualDeviceContextBulkImportView.as_view(), name='virtualdevicecontext_import'),
path('virtual-device-contexts/edit/', views.VirtualDeviceContextBulkEditView.as_view(), name='virtualdevicecontext_bulk_edit'),
path('virtual-device-contexts/delete/', views.VirtualDeviceContextBulkDeleteView.as_view(), name='virtualdevicecontext_bulk_delete'),
path('virtual-device-contexts/<int:pk>/', include(get_model_urls('dcim', 'virtualdevicecontext'))), path('virtual-device-contexts/<int:pk>/', include(get_model_urls('dcim', 'virtualdevicecontext'))),
# Modules path('modules/', include(get_model_urls('dcim', 'module', detail=False))),
path('modules/', views.ModuleListView.as_view(), name='module_list'),
path('modules/add/', views.ModuleEditView.as_view(), name='module_add'),
path('modules/import/', views.ModuleBulkImportView.as_view(), name='module_import'),
path('modules/edit/', views.ModuleBulkEditView.as_view(), name='module_bulk_edit'),
path('modules/delete/', views.ModuleBulkDeleteView.as_view(), name='module_bulk_delete'),
path('modules/<int:pk>/', include(get_model_urls('dcim', 'module'))), path('modules/<int:pk>/', include(get_model_urls('dcim', 'module'))),
# Console ports path('console-ports/', include(get_model_urls('dcim', 'consoleport', detail=False))),
path('console-ports/', views.ConsolePortListView.as_view(), name='consoleport_list'),
path('console-ports/add/', views.ConsolePortCreateView.as_view(), name='consoleport_add'),
path('console-ports/import/', views.ConsolePortBulkImportView.as_view(), name='consoleport_import'),
path('console-ports/edit/', views.ConsolePortBulkEditView.as_view(), name='consoleport_bulk_edit'),
path('console-ports/rename/', views.ConsolePortBulkRenameView.as_view(), name='consoleport_bulk_rename'),
path('console-ports/disconnect/', views.ConsolePortBulkDisconnectView.as_view(), name='consoleport_bulk_disconnect'),
path('console-ports/delete/', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'),
path('console-ports/<int:pk>/', include(get_model_urls('dcim', 'consoleport'))), path('console-ports/<int:pk>/', include(get_model_urls('dcim', 'consoleport'))),
path('devices/console-ports/add/', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'), path(
'devices/console-ports/add/',
views.DeviceBulkAddConsolePortView.as_view(),
name='device_bulk_add_consoleport'
),
# Console server ports path('console-server-ports/', include(get_model_urls('dcim', 'consoleserverport', detail=False))),
path('console-server-ports/', views.ConsoleServerPortListView.as_view(), name='consoleserverport_list'),
path('console-server-ports/add/', views.ConsoleServerPortCreateView.as_view(), name='consoleserverport_add'),
path('console-server-ports/import/', views.ConsoleServerPortBulkImportView.as_view(), name='consoleserverport_import'),
path('console-server-ports/edit/', views.ConsoleServerPortBulkEditView.as_view(), name='consoleserverport_bulk_edit'),
path('console-server-ports/rename/', views.ConsoleServerPortBulkRenameView.as_view(), name='consoleserverport_bulk_rename'),
path('console-server-ports/disconnect/', views.ConsoleServerPortBulkDisconnectView.as_view(), name='consoleserverport_bulk_disconnect'),
path('console-server-ports/delete/', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'),
path('console-server-ports/<int:pk>/', include(get_model_urls('dcim', 'consoleserverport'))), path('console-server-ports/<int:pk>/', include(get_model_urls('dcim', 'consoleserverport'))),
path('devices/console-server-ports/add/', views.DeviceBulkAddConsoleServerPortView.as_view(), name='device_bulk_add_consoleserverport'), path(
'devices/console-server-ports/add/',
views.DeviceBulkAddConsoleServerPortView.as_view(),
name='device_bulk_add_consoleserverport'
),
# Power ports path('power-ports/', include(get_model_urls('dcim', 'powerport', detail=False))),
path('power-ports/', views.PowerPortListView.as_view(), name='powerport_list'),
path('power-ports/add/', views.PowerPortCreateView.as_view(), name='powerport_add'),
path('power-ports/import/', views.PowerPortBulkImportView.as_view(), name='powerport_import'),
path('power-ports/edit/', views.PowerPortBulkEditView.as_view(), name='powerport_bulk_edit'),
path('power-ports/rename/', views.PowerPortBulkRenameView.as_view(), name='powerport_bulk_rename'),
path('power-ports/disconnect/', views.PowerPortBulkDisconnectView.as_view(), name='powerport_bulk_disconnect'),
path('power-ports/delete/', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'),
path('power-ports/<int:pk>/', include(get_model_urls('dcim', 'powerport'))), path('power-ports/<int:pk>/', include(get_model_urls('dcim', 'powerport'))),
path('devices/power-ports/add/', views.DeviceBulkAddPowerPortView.as_view(), name='device_bulk_add_powerport'), path('devices/power-ports/add/', views.DeviceBulkAddPowerPortView.as_view(), name='device_bulk_add_powerport'),
# Power outlets path('power-outlets/', include(get_model_urls('dcim', 'poweroutlet', detail=False))),
path('power-outlets/', views.PowerOutletListView.as_view(), name='poweroutlet_list'),
path('power-outlets/add/', views.PowerOutletCreateView.as_view(), name='poweroutlet_add'),
path('power-outlets/import/', views.PowerOutletBulkImportView.as_view(), name='poweroutlet_import'),
path('power-outlets/edit/', views.PowerOutletBulkEditView.as_view(), name='poweroutlet_bulk_edit'),
path('power-outlets/rename/', views.PowerOutletBulkRenameView.as_view(), name='poweroutlet_bulk_rename'),
path('power-outlets/disconnect/', views.PowerOutletBulkDisconnectView.as_view(), name='poweroutlet_bulk_disconnect'),
path('power-outlets/delete/', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'),
path('power-outlets/<int:pk>/', include(get_model_urls('dcim', 'poweroutlet'))), path('power-outlets/<int:pk>/', include(get_model_urls('dcim', 'poweroutlet'))),
path('devices/power-outlets/add/', views.DeviceBulkAddPowerOutletView.as_view(), name='device_bulk_add_poweroutlet'), path(
'devices/power-outlets/add/',
views.DeviceBulkAddPowerOutletView.as_view(),
name='device_bulk_add_poweroutlet'
),
# MAC addresses path('interfaces/', include(get_model_urls('dcim', 'interface', detail=False))),
path('mac-addresses/', views.MACAddressListView.as_view(), name='macaddress_list'),
path('mac-addresses/add/', views.MACAddressEditView.as_view(), name='macaddress_add'),
path('mac-addresses/import/', views.MACAddressBulkImportView.as_view(), name='macaddress_import'),
path('mac-addresses/edit/', views.MACAddressBulkEditView.as_view(), name='macaddress_bulk_edit'),
path('mac-addresses/delete/', views.MACAddressBulkDeleteView.as_view(), name='macaddress_bulk_delete'),
path('mac-addresses/<int:pk>/', include(get_model_urls('dcim', 'macaddress'))),
# Interfaces
path('interfaces/', views.InterfaceListView.as_view(), name='interface_list'),
path('interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'),
path('interfaces/import/', views.InterfaceBulkImportView.as_view(), name='interface_import'),
path('interfaces/edit/', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'),
path('interfaces/rename/', views.InterfaceBulkRenameView.as_view(), name='interface_bulk_rename'),
path('interfaces/disconnect/', views.InterfaceBulkDisconnectView.as_view(), name='interface_bulk_disconnect'),
path('interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'),
path('interfaces/<int:pk>/', include(get_model_urls('dcim', 'interface'))), path('interfaces/<int:pk>/', include(get_model_urls('dcim', 'interface'))),
path('devices/interfaces/add/', views.DeviceBulkAddInterfaceView.as_view(), name='device_bulk_add_interface'), path('devices/interfaces/add/', views.DeviceBulkAddInterfaceView.as_view(), name='device_bulk_add_interface'),
# Front ports path('front-ports/', include(get_model_urls('dcim', 'frontport', detail=False))),
path('front-ports/', views.FrontPortListView.as_view(), name='frontport_list'),
path('front-ports/add/', views.FrontPortCreateView.as_view(), name='frontport_add'),
path('front-ports/import/', views.FrontPortBulkImportView.as_view(), name='frontport_import'),
path('front-ports/edit/', views.FrontPortBulkEditView.as_view(), name='frontport_bulk_edit'),
path('front-ports/rename/', views.FrontPortBulkRenameView.as_view(), name='frontport_bulk_rename'),
path('front-ports/disconnect/', views.FrontPortBulkDisconnectView.as_view(), name='frontport_bulk_disconnect'),
path('front-ports/delete/', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'),
path('front-ports/<int:pk>/', include(get_model_urls('dcim', 'frontport'))), path('front-ports/<int:pk>/', include(get_model_urls('dcim', 'frontport'))),
# path('devices/front-ports/add/', views.DeviceBulkAddFrontPortView.as_view(), name='device_bulk_add_frontport'),
# Rear ports path('rear-ports/', include(get_model_urls('dcim', 'rearport', detail=False))),
path('rear-ports/', views.RearPortListView.as_view(), name='rearport_list'),
path('rear-ports/add/', views.RearPortCreateView.as_view(), name='rearport_add'),
path('rear-ports/import/', views.RearPortBulkImportView.as_view(), name='rearport_import'),
path('rear-ports/edit/', views.RearPortBulkEditView.as_view(), name='rearport_bulk_edit'),
path('rear-ports/rename/', views.RearPortBulkRenameView.as_view(), name='rearport_bulk_rename'),
path('rear-ports/disconnect/', views.RearPortBulkDisconnectView.as_view(), name='rearport_bulk_disconnect'),
path('rear-ports/delete/', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'),
path('rear-ports/<int:pk>/', include(get_model_urls('dcim', 'rearport'))), path('rear-ports/<int:pk>/', include(get_model_urls('dcim', 'rearport'))),
path('devices/rear-ports/add/', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'), path('devices/rear-ports/add/', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'),
# Module bays path('module-bays/', include(get_model_urls('dcim', 'modulebay', detail=False))),
path('module-bays/', views.ModuleBayListView.as_view(), name='modulebay_list'),
path('module-bays/add/', views.ModuleBayCreateView.as_view(), name='modulebay_add'),
path('module-bays/import/', views.ModuleBayBulkImportView.as_view(), name='modulebay_import'),
path('module-bays/edit/', views.ModuleBayBulkEditView.as_view(), name='modulebay_bulk_edit'),
path('module-bays/rename/', views.ModuleBayBulkRenameView.as_view(), name='modulebay_bulk_rename'),
path('module-bays/delete/', views.ModuleBayBulkDeleteView.as_view(), name='modulebay_bulk_delete'),
path('module-bays/<int:pk>/', include(get_model_urls('dcim', 'modulebay'))), path('module-bays/<int:pk>/', include(get_model_urls('dcim', 'modulebay'))),
path('devices/module-bays/add/', views.DeviceBulkAddModuleBayView.as_view(), name='device_bulk_add_modulebay'), path('devices/module-bays/add/', views.DeviceBulkAddModuleBayView.as_view(), name='device_bulk_add_modulebay'),
# Device bays path('device-bays/', include(get_model_urls('dcim', 'devicebay', detail=False))),
path('device-bays/', views.DeviceBayListView.as_view(), name='devicebay_list'),
path('device-bays/add/', views.DeviceBayCreateView.as_view(), name='devicebay_add'),
path('device-bays/import/', views.DeviceBayBulkImportView.as_view(), name='devicebay_import'),
path('device-bays/edit/', views.DeviceBayBulkEditView.as_view(), name='devicebay_bulk_edit'),
path('device-bays/rename/', views.DeviceBayBulkRenameView.as_view(), name='devicebay_bulk_rename'),
path('device-bays/delete/', views.DeviceBayBulkDeleteView.as_view(), name='devicebay_bulk_delete'),
path('device-bays/<int:pk>/', include(get_model_urls('dcim', 'devicebay'))), path('device-bays/<int:pk>/', include(get_model_urls('dcim', 'devicebay'))),
path('devices/device-bays/add/', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'), path('devices/device-bays/add/', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'),
# Inventory items path('inventory-items/', include(get_model_urls('dcim', 'inventoryitem', detail=False))),
path('inventory-items/', views.InventoryItemListView.as_view(), name='inventoryitem_list'),
path('inventory-items/add/', views.InventoryItemCreateView.as_view(), name='inventoryitem_add'),
path('inventory-items/import/', views.InventoryItemBulkImportView.as_view(), name='inventoryitem_import'),
path('inventory-items/edit/', views.InventoryItemBulkEditView.as_view(), name='inventoryitem_bulk_edit'),
path('inventory-items/rename/', views.InventoryItemBulkRenameView.as_view(), name='inventoryitem_bulk_rename'),
path('inventory-items/delete/', views.InventoryItemBulkDeleteView.as_view(), name='inventoryitem_bulk_delete'),
path('inventory-items/<int:pk>/', include(get_model_urls('dcim', 'inventoryitem'))), path('inventory-items/<int:pk>/', include(get_model_urls('dcim', 'inventoryitem'))),
path('devices/inventory-items/add/', views.DeviceBulkAddInventoryItemView.as_view(), name='device_bulk_add_inventoryitem'), path(
'devices/inventory-items/add/',
views.DeviceBulkAddInventoryItemView.as_view(),
name='device_bulk_add_inventoryitem'
),
# Inventory item roles path('inventory-item-roles/', include(get_model_urls('dcim', 'inventoryitemrole', detail=False))),
path('inventory-item-roles/', views.InventoryItemRoleListView.as_view(), name='inventoryitemrole_list'),
path('inventory-item-roles/add/', views.InventoryItemRoleEditView.as_view(), name='inventoryitemrole_add'),
path('inventory-item-roles/import/', views.InventoryItemRoleBulkImportView.as_view(), name='inventoryitemrole_import'),
path('inventory-item-roles/edit/', views.InventoryItemRoleBulkEditView.as_view(), name='inventoryitemrole_bulk_edit'),
path('inventory-item-roles/delete/', views.InventoryItemRoleBulkDeleteView.as_view(), name='inventoryitemrole_bulk_delete'),
path('inventory-item-roles/<int:pk>/', include(get_model_urls('dcim', 'inventoryitemrole'))), path('inventory-item-roles/<int:pk>/', include(get_model_urls('dcim', 'inventoryitemrole'))),
# Cables path('cables/', include(get_model_urls('dcim', 'cable', detail=False))),
path('cables/', views.CableListView.as_view(), name='cable_list'),
path('cables/add/', views.CableEditView.as_view(), name='cable_add'),
path('cables/import/', views.CableBulkImportView.as_view(), name='cable_import'),
path('cables/edit/', views.CableBulkEditView.as_view(), name='cable_bulk_edit'),
path('cables/delete/', views.CableBulkDeleteView.as_view(), name='cable_bulk_delete'),
path('cables/<int:pk>/', include(get_model_urls('dcim', 'cable'))), path('cables/<int:pk>/', include(get_model_urls('dcim', 'cable'))),
# Console/power/interface connections (read-only) # Console/power/interface connections (read-only)
@ -342,30 +151,21 @@ urlpatterns = [
path('power-connections/', views.PowerConnectionsListView.as_view(), name='power_connections_list'), path('power-connections/', views.PowerConnectionsListView.as_view(), name='power_connections_list'),
path('interface-connections/', views.InterfaceConnectionsListView.as_view(), name='interface_connections_list'), path('interface-connections/', views.InterfaceConnectionsListView.as_view(), name='interface_connections_list'),
# Virtual chassis path('virtual-chassis/', include(get_model_urls('dcim', 'virtualchassis', detail=False))),
path('virtual-chassis/', views.VirtualChassisListView.as_view(), name='virtualchassis_list'),
path('virtual-chassis/add/', views.VirtualChassisCreateView.as_view(), name='virtualchassis_add'),
path('virtual-chassis/import/', views.VirtualChassisBulkImportView.as_view(), name='virtualchassis_import'),
path('virtual-chassis/edit/', views.VirtualChassisBulkEditView.as_view(), name='virtualchassis_bulk_edit'),
path('virtual-chassis/delete/', views.VirtualChassisBulkDeleteView.as_view(), name='virtualchassis_bulk_delete'),
path('virtual-chassis/<int:pk>/', include(get_model_urls('dcim', 'virtualchassis'))), path('virtual-chassis/<int:pk>/', include(get_model_urls('dcim', 'virtualchassis'))),
path('virtual-chassis-members/<int:pk>/delete/', views.VirtualChassisRemoveMemberView.as_view(), name='virtualchassis_remove_member'), path(
'virtual-chassis-members/<int:pk>/delete/',
views.VirtualChassisRemoveMemberView.as_view(),
name='virtualchassis_remove_member'
),
# Power panels path('power-panels/', include(get_model_urls('dcim', 'powerpanel', detail=False))),
path('power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'),
path('power-panels/add/', views.PowerPanelEditView.as_view(), name='powerpanel_add'),
path('power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'),
path('power-panels/edit/', views.PowerPanelBulkEditView.as_view(), name='powerpanel_bulk_edit'),
path('power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'),
path('power-panels/<int:pk>/', include(get_model_urls('dcim', 'powerpanel'))), path('power-panels/<int:pk>/', include(get_model_urls('dcim', 'powerpanel'))),
# Power feeds path('power-feeds/', include(get_model_urls('dcim', 'powerfeed', detail=False))),
path('power-feeds/', views.PowerFeedListView.as_view(), name='powerfeed_list'),
path('power-feeds/add/', views.PowerFeedEditView.as_view(), name='powerfeed_add'),
path('power-feeds/import/', views.PowerFeedBulkImportView.as_view(), name='powerfeed_import'),
path('power-feeds/edit/', views.PowerFeedBulkEditView.as_view(), name='powerfeed_bulk_edit'),
path('power-feeds/disconnect/', views.PowerFeedBulkDisconnectView.as_view(), name='powerfeed_bulk_disconnect'),
path('power-feeds/delete/', views.PowerFeedBulkDeleteView.as_view(), name='powerfeed_bulk_delete'),
path('power-feeds/<int:pk>/', include(get_model_urls('dcim', 'powerfeed'))), path('power-feeds/<int:pk>/', include(get_model_urls('dcim', 'powerfeed'))),
path('mac-addresses/', include(get_model_urls('dcim', 'macaddress', detail=False))),
path('mac-addresses/<int:pk>/', include(get_model_urls('dcim', 'macaddress'))),
] ]

File diff suppressed because it is too large Load Diff

View File

@ -7,128 +7,68 @@ from utilities.urls import get_model_urls
app_name = 'extras' app_name = 'extras'
urlpatterns = [ urlpatterns = [
# Custom fields path('custom-fields/', include(get_model_urls('extras', 'customfield', detail=False))),
path('custom-fields/', views.CustomFieldListView.as_view(), name='customfield_list'),
path('custom-fields/add/', views.CustomFieldEditView.as_view(), name='customfield_add'),
path('custom-fields/import/', views.CustomFieldBulkImportView.as_view(), name='customfield_import'),
path('custom-fields/edit/', views.CustomFieldBulkEditView.as_view(), name='customfield_bulk_edit'),
path('custom-fields/delete/', views.CustomFieldBulkDeleteView.as_view(), name='customfield_bulk_delete'),
path('custom-fields/<int:pk>/', include(get_model_urls('extras', 'customfield'))), path('custom-fields/<int:pk>/', include(get_model_urls('extras', 'customfield'))),
# Custom field choices path('custom-field-choices/', include(get_model_urls('extras', 'customfieldchoiceset', detail=False))),
path('custom-field-choices/', views.CustomFieldChoiceSetListView.as_view(), name='customfieldchoiceset_list'),
path('custom-field-choices/add/', views.CustomFieldChoiceSetEditView.as_view(), name='customfieldchoiceset_add'),
path('custom-field-choices/import/', views.CustomFieldChoiceSetBulkImportView.as_view(), name='customfieldchoiceset_import'),
path('custom-field-choices/edit/', views.CustomFieldChoiceSetBulkEditView.as_view(), name='customfieldchoiceset_bulk_edit'),
path('custom-field-choices/delete/', views.CustomFieldChoiceSetBulkDeleteView.as_view(), name='customfieldchoiceset_bulk_delete'),
path('custom-field-choices/<int:pk>/', include(get_model_urls('extras', 'customfieldchoiceset'))), path('custom-field-choices/<int:pk>/', include(get_model_urls('extras', 'customfieldchoiceset'))),
# Custom links path('custom-links/', include(get_model_urls('extras', 'customlink', detail=False))),
path('custom-links/', views.CustomLinkListView.as_view(), name='customlink_list'),
path('custom-links/add/', views.CustomLinkEditView.as_view(), name='customlink_add'),
path('custom-links/import/', views.CustomLinkBulkImportView.as_view(), name='customlink_import'),
path('custom-links/edit/', views.CustomLinkBulkEditView.as_view(), name='customlink_bulk_edit'),
path('custom-links/delete/', views.CustomLinkBulkDeleteView.as_view(), name='customlink_bulk_delete'),
path('custom-links/<int:pk>/', include(get_model_urls('extras', 'customlink'))), path('custom-links/<int:pk>/', include(get_model_urls('extras', 'customlink'))),
# Export templates path('export-templates/', include(get_model_urls('extras', 'exporttemplate', detail=False))),
path('export-templates/', views.ExportTemplateListView.as_view(), name='exporttemplate_list'),
path('export-templates/add/', views.ExportTemplateEditView.as_view(), name='exporttemplate_add'),
path('export-templates/import/', views.ExportTemplateBulkImportView.as_view(), name='exporttemplate_import'),
path('export-templates/edit/', views.ExportTemplateBulkEditView.as_view(), name='exporttemplate_bulk_edit'),
path('export-templates/delete/', views.ExportTemplateBulkDeleteView.as_view(), name='exporttemplate_bulk_delete'),
path('export-templates/sync/', views.ExportTemplateBulkSyncDataView.as_view(), name='exporttemplate_bulk_sync'),
path('export-templates/<int:pk>/', include(get_model_urls('extras', 'exporttemplate'))), path('export-templates/<int:pk>/', include(get_model_urls('extras', 'exporttemplate'))),
# Saved filters path('saved-filters/', include(get_model_urls('extras', 'savedfilter', detail=False))),
path('saved-filters/', views.SavedFilterListView.as_view(), name='savedfilter_list'),
path('saved-filters/add/', views.SavedFilterEditView.as_view(), name='savedfilter_add'),
path('saved-filters/import/', views.SavedFilterBulkImportView.as_view(), name='savedfilter_import'),
path('saved-filters/edit/', views.SavedFilterBulkEditView.as_view(), name='savedfilter_bulk_edit'),
path('saved-filters/delete/', views.SavedFilterBulkDeleteView.as_view(), name='savedfilter_bulk_delete'),
path('saved-filters/<int:pk>/', include(get_model_urls('extras', 'savedfilter'))), path('saved-filters/<int:pk>/', include(get_model_urls('extras', 'savedfilter'))),
# Bookmarks path('bookmarks/', include(get_model_urls('extras', 'bookmark', detail=False))),
path('bookmarks/add/', views.BookmarkCreateView.as_view(), name='bookmark_add'),
path('bookmarks/delete/', views.BookmarkBulkDeleteView.as_view(), name='bookmark_bulk_delete'),
path('bookmarks/<int:pk>/', include(get_model_urls('extras', 'bookmark'))), path('bookmarks/<int:pk>/', include(get_model_urls('extras', 'bookmark'))),
# Notification groups path('notification-groups/', include(get_model_urls('extras', 'notificationgroup', detail=False))),
path('notification-groups/', views.NotificationGroupListView.as_view(), name='notificationgroup_list'),
path('notification-groups/add/', views.NotificationGroupEditView.as_view(), name='notificationgroup_add'),
path('notification-groups/import/', views.NotificationGroupBulkImportView.as_view(), name='notificationgroup_import'),
path('notification-groups/edit/', views.NotificationGroupBulkEditView.as_view(), name='notificationgroup_bulk_edit'),
path('notification-groups/delete/', views.NotificationGroupBulkDeleteView.as_view(), name='notificationgroup_bulk_delete'),
path('notification-groups/<int:pk>/', include(get_model_urls('extras', 'notificationgroup'))), path('notification-groups/<int:pk>/', include(get_model_urls('extras', 'notificationgroup'))),
# Notifications
path('notifications/', views.NotificationsView.as_view(), name='notifications'), path('notifications/', views.NotificationsView.as_view(), name='notifications'),
path('notifications/delete/', views.NotificationBulkDeleteView.as_view(), name='notification_bulk_delete'), path('notifications/', include(get_model_urls('extras', 'notification', detail=False))),
path('notifications/<int:pk>/', include(get_model_urls('extras', 'notification'))), path('notifications/<int:pk>/', include(get_model_urls('extras', 'notification'))),
# Subscriptions path('subscriptions/', include(get_model_urls('extras', 'subscription', detail=False))),
path('subscriptions/add/', views.SubscriptionCreateView.as_view(), name='subscription_add'),
path('subscriptions/delete/', views.SubscriptionBulkDeleteView.as_view(), name='subscription_bulk_delete'),
path('subscriptions/<int:pk>/', include(get_model_urls('extras', 'subscription'))), path('subscriptions/<int:pk>/', include(get_model_urls('extras', 'subscription'))),
# Webhooks path('webhooks/', include(get_model_urls('extras', 'webhook', detail=False))),
path('webhooks/', views.WebhookListView.as_view(), name='webhook_list'),
path('webhooks/add/', views.WebhookEditView.as_view(), name='webhook_add'),
path('webhooks/import/', views.WebhookBulkImportView.as_view(), name='webhook_import'),
path('webhooks/edit/', views.WebhookBulkEditView.as_view(), name='webhook_bulk_edit'),
path('webhooks/delete/', views.WebhookBulkDeleteView.as_view(), name='webhook_bulk_delete'),
path('webhooks/<int:pk>/', include(get_model_urls('extras', 'webhook'))), path('webhooks/<int:pk>/', include(get_model_urls('extras', 'webhook'))),
# Event rules path('event-rules/', include(get_model_urls('extras', 'eventrule', detail=False))),
path('event-rules/', views.EventRuleListView.as_view(), name='eventrule_list'),
path('event-rules/add/', views.EventRuleEditView.as_view(), name='eventrule_add'),
path('event-rules/import/', views.EventRuleBulkImportView.as_view(), name='eventrule_import'),
path('event-rules/edit/', views.EventRuleBulkEditView.as_view(), name='eventrule_bulk_edit'),
path('event-rules/delete/', views.EventRuleBulkDeleteView.as_view(), name='eventrule_bulk_delete'),
path('event-rules/<int:pk>/', include(get_model_urls('extras', 'eventrule'))), path('event-rules/<int:pk>/', include(get_model_urls('extras', 'eventrule'))),
# Tags path('tags/', include(get_model_urls('extras', 'tag', detail=False))),
path('tags/', views.TagListView.as_view(), name='tag_list'),
path('tags/add/', views.TagEditView.as_view(), name='tag_add'),
path('tags/import/', views.TagBulkImportView.as_view(), name='tag_import'),
path('tags/edit/', views.TagBulkEditView.as_view(), name='tag_bulk_edit'),
path('tags/delete/', views.TagBulkDeleteView.as_view(), name='tag_bulk_delete'),
path('tags/<int:pk>/', include(get_model_urls('extras', 'tag'))), path('tags/<int:pk>/', include(get_model_urls('extras', 'tag'))),
# Config contexts path('config-contexts/', include(get_model_urls('extras', 'configcontext', detail=False))),
path('config-contexts/', views.ConfigContextListView.as_view(), name='configcontext_list'),
path('config-contexts/add/', views.ConfigContextEditView.as_view(), name='configcontext_add'),
path('config-contexts/edit/', views.ConfigContextBulkEditView.as_view(), name='configcontext_bulk_edit'),
path('config-contexts/delete/', views.ConfigContextBulkDeleteView.as_view(), name='configcontext_bulk_delete'),
path('config-contexts/sync/', views.ConfigContextBulkSyncDataView.as_view(), name='configcontext_bulk_sync'),
path('config-contexts/<int:pk>/', include(get_model_urls('extras', 'configcontext'))), path('config-contexts/<int:pk>/', include(get_model_urls('extras', 'configcontext'))),
# Config templates path('config-templates/', include(get_model_urls('extras', 'configtemplate', detail=False))),
path('config-templates/', views.ConfigTemplateListView.as_view(), name='configtemplate_list'),
path('config-templates/add/', views.ConfigTemplateEditView.as_view(), name='configtemplate_add'),
path('config-templates/edit/', views.ConfigTemplateBulkEditView.as_view(), name='configtemplate_bulk_edit'),
path('config-templates/delete/', views.ConfigTemplateBulkDeleteView.as_view(), name='configtemplate_bulk_delete'),
path('config-templates/sync/', views.ConfigTemplateBulkSyncDataView.as_view(), name='configtemplate_bulk_sync'),
path('config-templates/<int:pk>/', include(get_model_urls('extras', 'configtemplate'))), path('config-templates/<int:pk>/', include(get_model_urls('extras', 'configtemplate'))),
# Image attachments path('image-attachments/', include(get_model_urls('extras', 'imageattachment', detail=False))),
path('image-attachments/', views.ImageAttachmentListView.as_view(), name='imageattachment_list'),
path('image-attachments/add/', views.ImageAttachmentEditView.as_view(), name='imageattachment_add'),
path('image-attachments/<int:pk>/', include(get_model_urls('extras', 'imageattachment'))), path('image-attachments/<int:pk>/', include(get_model_urls('extras', 'imageattachment'))),
# Journal entries path('journal-entries/', include(get_model_urls('extras', 'journalentry', detail=False))),
path('journal-entries/', views.JournalEntryListView.as_view(), name='journalentry_list'),
path('journal-entries/add/', views.JournalEntryEditView.as_view(), name='journalentry_add'),
path('journal-entries/edit/', views.JournalEntryBulkEditView.as_view(), name='journalentry_bulk_edit'),
path('journal-entries/delete/', views.JournalEntryBulkDeleteView.as_view(), name='journalentry_bulk_delete'),
path('journal-entries/import/', views.JournalEntryBulkImportView.as_view(), name='journalentry_import'),
path('journal-entries/<int:pk>/', include(get_model_urls('extras', 'journalentry'))), path('journal-entries/<int:pk>/', include(get_model_urls('extras', 'journalentry'))),
# User dashboard # User dashboard
path('dashboard/reset/', views.DashboardResetView.as_view(), name='dashboard_reset'), path('dashboard/reset/', views.DashboardResetView.as_view(), name='dashboard_reset'),
path('dashboard/widgets/add/', views.DashboardWidgetAddView.as_view(), name='dashboardwidget_add'), path('dashboard/widgets/add/', views.DashboardWidgetAddView.as_view(), name='dashboardwidget_add'),
path('dashboard/widgets/<uuid:id>/configure/', views.DashboardWidgetConfigView.as_view(), name='dashboardwidget_config'), path(
path('dashboard/widgets/<uuid:id>/delete/', views.DashboardWidgetDeleteView.as_view(), name='dashboardwidget_delete'), 'dashboard/widgets/<uuid:id>/configure/',
views.DashboardWidgetConfigView.as_view(),
name='dashboardwidget_config'
),
path(
'dashboard/widgets/<uuid:id>/delete/',
views.DashboardWidgetDeleteView.as_view(),
name='dashboardwidget_delete'
),
# Scripts # Scripts
path('scripts/', views.ScriptListView.as_view(), name='script_list'), path('scripts/', views.ScriptListView.as_view(), name='script_list'),

View File

@ -42,6 +42,7 @@ from .tables import ReportResultsTable, ScriptResultsTable
# Custom fields # Custom fields
# #
@register_model_view(CustomField, 'list', path='', detail=False)
class CustomFieldListView(generic.ObjectListView): class CustomFieldListView(generic.ObjectListView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
filterset = filtersets.CustomFieldFilterSet filterset = filtersets.CustomFieldFilterSet
@ -69,6 +70,7 @@ class CustomFieldView(generic.ObjectView):
} }
@register_model_view(CustomField, 'add', detail=False)
@register_model_view(CustomField, 'edit') @register_model_view(CustomField, 'edit')
class CustomFieldEditView(generic.ObjectEditView): class CustomFieldEditView(generic.ObjectEditView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
@ -80,11 +82,13 @@ class CustomFieldDeleteView(generic.ObjectDeleteView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
@register_model_view(CustomField, 'import', detail=False)
class CustomFieldBulkImportView(generic.BulkImportView): class CustomFieldBulkImportView(generic.BulkImportView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
model_form = forms.CustomFieldImportForm model_form = forms.CustomFieldImportForm
@register_model_view(CustomField, 'bulk_edit', path='edit', detail=False)
class CustomFieldBulkEditView(generic.BulkEditView): class CustomFieldBulkEditView(generic.BulkEditView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
filterset = filtersets.CustomFieldFilterSet filterset = filtersets.CustomFieldFilterSet
@ -92,6 +96,7 @@ class CustomFieldBulkEditView(generic.BulkEditView):
form = forms.CustomFieldBulkEditForm form = forms.CustomFieldBulkEditForm
@register_model_view(CustomField, 'bulk_delete', path='delete', detail=False)
class CustomFieldBulkDeleteView(generic.BulkDeleteView): class CustomFieldBulkDeleteView(generic.BulkDeleteView):
queryset = CustomField.objects.select_related('choice_set') queryset = CustomField.objects.select_related('choice_set')
filterset = filtersets.CustomFieldFilterSet filterset = filtersets.CustomFieldFilterSet
@ -102,6 +107,7 @@ class CustomFieldBulkDeleteView(generic.BulkDeleteView):
# Custom field choices # Custom field choices
# #
@register_model_view(CustomFieldChoiceSet, 'list', path='', detail=False)
class CustomFieldChoiceSetListView(generic.ObjectListView): class CustomFieldChoiceSetListView(generic.ObjectListView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
filterset = filtersets.CustomFieldChoiceSetFilterSet filterset = filtersets.CustomFieldChoiceSetFilterSet
@ -133,6 +139,7 @@ class CustomFieldChoiceSetView(generic.ObjectView):
} }
@register_model_view(CustomFieldChoiceSet, 'add', detail=False)
@register_model_view(CustomFieldChoiceSet, 'edit') @register_model_view(CustomFieldChoiceSet, 'edit')
class CustomFieldChoiceSetEditView(generic.ObjectEditView): class CustomFieldChoiceSetEditView(generic.ObjectEditView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
@ -144,11 +151,13 @@ class CustomFieldChoiceSetDeleteView(generic.ObjectDeleteView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
@register_model_view(CustomFieldChoiceSet, 'import', detail=False)
class CustomFieldChoiceSetBulkImportView(generic.BulkImportView): class CustomFieldChoiceSetBulkImportView(generic.BulkImportView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
model_form = forms.CustomFieldChoiceSetImportForm model_form = forms.CustomFieldChoiceSetImportForm
@register_model_view(CustomFieldChoiceSet, 'bulk_edit', path='edit', detail=False)
class CustomFieldChoiceSetBulkEditView(generic.BulkEditView): class CustomFieldChoiceSetBulkEditView(generic.BulkEditView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
filterset = filtersets.CustomFieldChoiceSetFilterSet filterset = filtersets.CustomFieldChoiceSetFilterSet
@ -156,6 +165,7 @@ class CustomFieldChoiceSetBulkEditView(generic.BulkEditView):
form = forms.CustomFieldChoiceSetBulkEditForm form = forms.CustomFieldChoiceSetBulkEditForm
@register_model_view(CustomFieldChoiceSet, 'bulk_delete', path='delete', detail=False)
class CustomFieldChoiceSetBulkDeleteView(generic.BulkDeleteView): class CustomFieldChoiceSetBulkDeleteView(generic.BulkDeleteView):
queryset = CustomFieldChoiceSet.objects.all() queryset = CustomFieldChoiceSet.objects.all()
filterset = filtersets.CustomFieldChoiceSetFilterSet filterset = filtersets.CustomFieldChoiceSetFilterSet
@ -166,6 +176,7 @@ class CustomFieldChoiceSetBulkDeleteView(generic.BulkDeleteView):
# Custom links # Custom links
# #
@register_model_view(CustomLink, 'list', path='', detail=False)
class CustomLinkListView(generic.ObjectListView): class CustomLinkListView(generic.ObjectListView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
filterset = filtersets.CustomLinkFilterSet filterset = filtersets.CustomLinkFilterSet
@ -178,6 +189,7 @@ class CustomLinkView(generic.ObjectView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
@register_model_view(CustomLink, 'add', detail=False)
@register_model_view(CustomLink, 'edit') @register_model_view(CustomLink, 'edit')
class CustomLinkEditView(generic.ObjectEditView): class CustomLinkEditView(generic.ObjectEditView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
@ -189,11 +201,13 @@ class CustomLinkDeleteView(generic.ObjectDeleteView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
@register_model_view(CustomLink, 'import', detail=False)
class CustomLinkBulkImportView(generic.BulkImportView): class CustomLinkBulkImportView(generic.BulkImportView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
model_form = forms.CustomLinkImportForm model_form = forms.CustomLinkImportForm
@register_model_view(CustomLink, 'bulk_edit', path='edit', detail=False)
class CustomLinkBulkEditView(generic.BulkEditView): class CustomLinkBulkEditView(generic.BulkEditView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
filterset = filtersets.CustomLinkFilterSet filterset = filtersets.CustomLinkFilterSet
@ -201,6 +215,7 @@ class CustomLinkBulkEditView(generic.BulkEditView):
form = forms.CustomLinkBulkEditForm form = forms.CustomLinkBulkEditForm
@register_model_view(CustomLink, 'bulk_delete', path='delete', detail=False)
class CustomLinkBulkDeleteView(generic.BulkDeleteView): class CustomLinkBulkDeleteView(generic.BulkDeleteView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
filterset = filtersets.CustomLinkFilterSet filterset = filtersets.CustomLinkFilterSet
@ -211,6 +226,7 @@ class CustomLinkBulkDeleteView(generic.BulkDeleteView):
# Export templates # Export templates
# #
@register_model_view(ExportTemplate, 'list', path='', detail=False)
class ExportTemplateListView(generic.ObjectListView): class ExportTemplateListView(generic.ObjectListView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
filterset = filtersets.ExportTemplateFilterSet filterset = filtersets.ExportTemplateFilterSet
@ -228,6 +244,7 @@ class ExportTemplateView(generic.ObjectView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
@register_model_view(ExportTemplate, 'add', detail=False)
@register_model_view(ExportTemplate, 'edit') @register_model_view(ExportTemplate, 'edit')
class ExportTemplateEditView(generic.ObjectEditView): class ExportTemplateEditView(generic.ObjectEditView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
@ -239,11 +256,13 @@ class ExportTemplateDeleteView(generic.ObjectDeleteView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
@register_model_view(ExportTemplate, 'import', detail=False)
class ExportTemplateBulkImportView(generic.BulkImportView): class ExportTemplateBulkImportView(generic.BulkImportView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
model_form = forms.ExportTemplateImportForm model_form = forms.ExportTemplateImportForm
@register_model_view(ExportTemplate, 'bulk_edit', path='edit', detail=False)
class ExportTemplateBulkEditView(generic.BulkEditView): class ExportTemplateBulkEditView(generic.BulkEditView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
filterset = filtersets.ExportTemplateFilterSet filterset = filtersets.ExportTemplateFilterSet
@ -251,12 +270,14 @@ class ExportTemplateBulkEditView(generic.BulkEditView):
form = forms.ExportTemplateBulkEditForm form = forms.ExportTemplateBulkEditForm
@register_model_view(ExportTemplate, 'bulk_delete', path='delete', detail=False)
class ExportTemplateBulkDeleteView(generic.BulkDeleteView): class ExportTemplateBulkDeleteView(generic.BulkDeleteView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
filterset = filtersets.ExportTemplateFilterSet filterset = filtersets.ExportTemplateFilterSet
table = tables.ExportTemplateTable table = tables.ExportTemplateTable
@register_model_view(ExportTemplate, 'bulk_sync', path='sync', detail=False)
class ExportTemplateBulkSyncDataView(generic.BulkSyncDataView): class ExportTemplateBulkSyncDataView(generic.BulkSyncDataView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
@ -283,6 +304,7 @@ class SavedFilterMixin:
) )
@register_model_view(SavedFilter, 'list', path='', detail=False)
class SavedFilterListView(SavedFilterMixin, generic.ObjectListView): class SavedFilterListView(SavedFilterMixin, generic.ObjectListView):
filterset = filtersets.SavedFilterFilterSet filterset = filtersets.SavedFilterFilterSet
filterset_form = forms.SavedFilterFilterForm filterset_form = forms.SavedFilterFilterForm
@ -294,6 +316,7 @@ class SavedFilterView(SavedFilterMixin, generic.ObjectView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
@register_model_view(SavedFilter, 'add', detail=False)
@register_model_view(SavedFilter, 'edit') @register_model_view(SavedFilter, 'edit')
class SavedFilterEditView(SavedFilterMixin, generic.ObjectEditView): class SavedFilterEditView(SavedFilterMixin, generic.ObjectEditView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
@ -310,11 +333,13 @@ class SavedFilterDeleteView(SavedFilterMixin, generic.ObjectDeleteView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
@register_model_view(SavedFilter, 'import', detail=False)
class SavedFilterBulkImportView(SavedFilterMixin, generic.BulkImportView): class SavedFilterBulkImportView(SavedFilterMixin, generic.BulkImportView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
model_form = forms.SavedFilterImportForm model_form = forms.SavedFilterImportForm
@register_model_view(SavedFilter, 'bulk_edit', path='edit', detail=False)
class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView): class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
filterset = filtersets.SavedFilterFilterSet filterset = filtersets.SavedFilterFilterSet
@ -322,6 +347,7 @@ class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView):
form = forms.SavedFilterBulkEditForm form = forms.SavedFilterBulkEditForm
@register_model_view(SavedFilter, 'bulk_delete', path='delete', detail=False)
class SavedFilterBulkDeleteView(SavedFilterMixin, generic.BulkDeleteView): class SavedFilterBulkDeleteView(SavedFilterMixin, generic.BulkDeleteView):
queryset = SavedFilter.objects.all() queryset = SavedFilter.objects.all()
filterset = filtersets.SavedFilterFilterSet filterset = filtersets.SavedFilterFilterSet
@ -332,6 +358,7 @@ class SavedFilterBulkDeleteView(SavedFilterMixin, generic.BulkDeleteView):
# Bookmarks # Bookmarks
# #
@register_model_view(Bookmark, 'add', detail=False)
class BookmarkCreateView(generic.ObjectEditView): class BookmarkCreateView(generic.ObjectEditView):
form = forms.BookmarkForm form = forms.BookmarkForm
@ -350,6 +377,7 @@ class BookmarkDeleteView(generic.ObjectDeleteView):
return Bookmark.objects.filter(user=request.user) return Bookmark.objects.filter(user=request.user)
@register_model_view(Bookmark, 'bulk_delete', path='delete', detail=False)
class BookmarkBulkDeleteView(generic.BulkDeleteView): class BookmarkBulkDeleteView(generic.BulkDeleteView):
table = tables.BookmarkTable table = tables.BookmarkTable
@ -361,6 +389,7 @@ class BookmarkBulkDeleteView(generic.BulkDeleteView):
# Notification groups # Notification groups
# #
@register_model_view(NotificationGroup, 'list', path='', detail=False)
class NotificationGroupListView(generic.ObjectListView): class NotificationGroupListView(generic.ObjectListView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
filterset = filtersets.NotificationGroupFilterSet filterset = filtersets.NotificationGroupFilterSet
@ -373,6 +402,7 @@ class NotificationGroupView(generic.ObjectView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
@register_model_view(NotificationGroup, 'add', detail=False)
@register_model_view(NotificationGroup, 'edit') @register_model_view(NotificationGroup, 'edit')
class NotificationGroupEditView(generic.ObjectEditView): class NotificationGroupEditView(generic.ObjectEditView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
@ -384,11 +414,13 @@ class NotificationGroupDeleteView(generic.ObjectDeleteView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
@register_model_view(NotificationGroup, 'import', detail=False)
class NotificationGroupBulkImportView(generic.BulkImportView): class NotificationGroupBulkImportView(generic.BulkImportView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
model_form = forms.NotificationGroupImportForm model_form = forms.NotificationGroupImportForm
@register_model_view(NotificationGroup, 'bulk_edit', path='edit', detail=False)
class NotificationGroupBulkEditView(generic.BulkEditView): class NotificationGroupBulkEditView(generic.BulkEditView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
filterset = filtersets.NotificationGroupFilterSet filterset = filtersets.NotificationGroupFilterSet
@ -396,6 +428,7 @@ class NotificationGroupBulkEditView(generic.BulkEditView):
form = forms.NotificationGroupBulkEditForm form = forms.NotificationGroupBulkEditForm
@register_model_view(NotificationGroup, 'bulk_delete', path='delete', detail=False)
class NotificationGroupBulkDeleteView(generic.BulkDeleteView): class NotificationGroupBulkDeleteView(generic.BulkDeleteView):
queryset = NotificationGroup.objects.all() queryset = NotificationGroup.objects.all()
filterset = filtersets.NotificationGroupFilterSet filterset = filtersets.NotificationGroupFilterSet
@ -459,6 +492,7 @@ class NotificationDeleteView(generic.ObjectDeleteView):
return Notification.objects.filter(user=request.user) return Notification.objects.filter(user=request.user)
@register_model_view(Notification, 'bulk_delete', path='delete', detail=False)
class NotificationBulkDeleteView(generic.BulkDeleteView): class NotificationBulkDeleteView(generic.BulkDeleteView):
table = tables.NotificationTable table = tables.NotificationTable
@ -470,6 +504,7 @@ class NotificationBulkDeleteView(generic.BulkDeleteView):
# Subscriptions # Subscriptions
# #
@register_model_view(Subscription, 'add', detail=False)
class SubscriptionCreateView(generic.ObjectEditView): class SubscriptionCreateView(generic.ObjectEditView):
form = forms.SubscriptionForm form = forms.SubscriptionForm
@ -488,6 +523,7 @@ class SubscriptionDeleteView(generic.ObjectDeleteView):
return Subscription.objects.filter(user=request.user) return Subscription.objects.filter(user=request.user)
@register_model_view(Subscription, 'bulk_delete', path='delete', detail=False)
class SubscriptionBulkDeleteView(generic.BulkDeleteView): class SubscriptionBulkDeleteView(generic.BulkDeleteView):
table = tables.SubscriptionTable table = tables.SubscriptionTable
@ -499,6 +535,7 @@ class SubscriptionBulkDeleteView(generic.BulkDeleteView):
# Webhooks # Webhooks
# #
@register_model_view(Webhook, 'list', path='', detail=False)
class WebhookListView(generic.ObjectListView): class WebhookListView(generic.ObjectListView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
filterset = filtersets.WebhookFilterSet filterset = filtersets.WebhookFilterSet
@ -511,6 +548,7 @@ class WebhookView(generic.ObjectView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
@register_model_view(Webhook, 'add', detail=False)
@register_model_view(Webhook, 'edit') @register_model_view(Webhook, 'edit')
class WebhookEditView(generic.ObjectEditView): class WebhookEditView(generic.ObjectEditView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
@ -522,11 +560,13 @@ class WebhookDeleteView(generic.ObjectDeleteView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
@register_model_view(Webhook, 'import', detail=False)
class WebhookBulkImportView(generic.BulkImportView): class WebhookBulkImportView(generic.BulkImportView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
model_form = forms.WebhookImportForm model_form = forms.WebhookImportForm
@register_model_view(Webhook, 'bulk_edit', path='edit', detail=False)
class WebhookBulkEditView(generic.BulkEditView): class WebhookBulkEditView(generic.BulkEditView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
filterset = filtersets.WebhookFilterSet filterset = filtersets.WebhookFilterSet
@ -534,6 +574,7 @@ class WebhookBulkEditView(generic.BulkEditView):
form = forms.WebhookBulkEditForm form = forms.WebhookBulkEditForm
@register_model_view(Webhook, 'bulk_delete', path='delete', detail=False)
class WebhookBulkDeleteView(generic.BulkDeleteView): class WebhookBulkDeleteView(generic.BulkDeleteView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
filterset = filtersets.WebhookFilterSet filterset = filtersets.WebhookFilterSet
@ -544,6 +585,7 @@ class WebhookBulkDeleteView(generic.BulkDeleteView):
# Event Rules # Event Rules
# #
@register_model_view(EventRule, 'list', path='', detail=False)
class EventRuleListView(generic.ObjectListView): class EventRuleListView(generic.ObjectListView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
filterset = filtersets.EventRuleFilterSet filterset = filtersets.EventRuleFilterSet
@ -556,6 +598,7 @@ class EventRuleView(generic.ObjectView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
@register_model_view(EventRule, 'add', detail=False)
@register_model_view(EventRule, 'edit') @register_model_view(EventRule, 'edit')
class EventRuleEditView(generic.ObjectEditView): class EventRuleEditView(generic.ObjectEditView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
@ -567,11 +610,13 @@ class EventRuleDeleteView(generic.ObjectDeleteView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
@register_model_view(EventRule, 'import', detail=False)
class EventRuleBulkImportView(generic.BulkImportView): class EventRuleBulkImportView(generic.BulkImportView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
model_form = forms.EventRuleImportForm model_form = forms.EventRuleImportForm
@register_model_view(EventRule, 'bulk_edit', path='edit', detail=False)
class EventRuleBulkEditView(generic.BulkEditView): class EventRuleBulkEditView(generic.BulkEditView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
filterset = filtersets.EventRuleFilterSet filterset = filtersets.EventRuleFilterSet
@ -579,6 +624,7 @@ class EventRuleBulkEditView(generic.BulkEditView):
form = forms.EventRuleBulkEditForm form = forms.EventRuleBulkEditForm
@register_model_view(EventRule, 'bulk_delete', path='delete', detail=False)
class EventRuleBulkDeleteView(generic.BulkDeleteView): class EventRuleBulkDeleteView(generic.BulkDeleteView):
queryset = EventRule.objects.all() queryset = EventRule.objects.all()
filterset = filtersets.EventRuleFilterSet filterset = filtersets.EventRuleFilterSet
@ -589,6 +635,7 @@ class EventRuleBulkDeleteView(generic.BulkDeleteView):
# Tags # Tags
# #
@register_model_view(Tag, 'list', path='', detail=False)
class TagListView(generic.ObjectListView): class TagListView(generic.ObjectListView):
queryset = Tag.objects.annotate( queryset = Tag.objects.annotate(
items=count_related(TaggedItem, 'tag') items=count_related(TaggedItem, 'tag')
@ -624,6 +671,7 @@ class TagView(generic.ObjectView):
} }
@register_model_view(Tag, 'add', detail=False)
@register_model_view(Tag, 'edit') @register_model_view(Tag, 'edit')
class TagEditView(generic.ObjectEditView): class TagEditView(generic.ObjectEditView):
queryset = Tag.objects.all() queryset = Tag.objects.all()
@ -635,11 +683,13 @@ class TagDeleteView(generic.ObjectDeleteView):
queryset = Tag.objects.all() queryset = Tag.objects.all()
@register_model_view(Tag, 'import', detail=False)
class TagBulkImportView(generic.BulkImportView): class TagBulkImportView(generic.BulkImportView):
queryset = Tag.objects.all() queryset = Tag.objects.all()
model_form = forms.TagImportForm model_form = forms.TagImportForm
@register_model_view(Tag, 'bulk_edit', path='edit', detail=False)
class TagBulkEditView(generic.BulkEditView): class TagBulkEditView(generic.BulkEditView):
queryset = Tag.objects.annotate( queryset = Tag.objects.annotate(
items=count_related(TaggedItem, 'tag') items=count_related(TaggedItem, 'tag')
@ -648,6 +698,7 @@ class TagBulkEditView(generic.BulkEditView):
form = forms.TagBulkEditForm form = forms.TagBulkEditForm
@register_model_view(Tag, 'bulk_delete', path='delete', detail=False)
class TagBulkDeleteView(generic.BulkDeleteView): class TagBulkDeleteView(generic.BulkDeleteView):
queryset = Tag.objects.annotate( queryset = Tag.objects.annotate(
items=count_related(TaggedItem, 'tag') items=count_related(TaggedItem, 'tag')
@ -659,6 +710,7 @@ class TagBulkDeleteView(generic.BulkDeleteView):
# Config contexts # Config contexts
# #
@register_model_view(ConfigContext, 'list', path='', detail=False)
class ConfigContextListView(generic.ObjectListView): class ConfigContextListView(generic.ObjectListView):
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
filterset = filtersets.ConfigContextFilterSet filterset = filtersets.ConfigContextFilterSet
@ -711,30 +763,34 @@ class ConfigContextView(generic.ObjectView):
} }
@register_model_view(ConfigContext, 'add', detail=False)
@register_model_view(ConfigContext, 'edit') @register_model_view(ConfigContext, 'edit')
class ConfigContextEditView(generic.ObjectEditView): class ConfigContextEditView(generic.ObjectEditView):
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
form = forms.ConfigContextForm form = forms.ConfigContextForm
class ConfigContextBulkEditView(generic.BulkEditView):
queryset = ConfigContext.objects.all()
filterset = filtersets.ConfigContextFilterSet
table = tables.ConfigContextTable
form = forms.ConfigContextBulkEditForm
@register_model_view(ConfigContext, 'delete') @register_model_view(ConfigContext, 'delete')
class ConfigContextDeleteView(generic.ObjectDeleteView): class ConfigContextDeleteView(generic.ObjectDeleteView):
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
@register_model_view(ConfigContext, 'bulk_edit', path='edit', detail=False)
class ConfigContextBulkEditView(generic.BulkEditView):
queryset = ConfigContext.objects.all()
filterset = filtersets.ConfigContextFilterSet
table = tables.ConfigContextTable
form = forms.ConfigContextBulkEditForm
@register_model_view(ConfigContext, 'bulk_delete', path='delete', detail=False)
class ConfigContextBulkDeleteView(generic.BulkDeleteView): class ConfigContextBulkDeleteView(generic.BulkDeleteView):
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
filterset = filtersets.ConfigContextFilterSet filterset = filtersets.ConfigContextFilterSet
table = tables.ConfigContextTable table = tables.ConfigContextTable
@register_model_view(ConfigContext, 'bulk_sync', path='sync', detail=False)
class ConfigContextBulkSyncDataView(generic.BulkSyncDataView): class ConfigContextBulkSyncDataView(generic.BulkSyncDataView):
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
@ -768,6 +824,7 @@ class ObjectConfigContextView(generic.ObjectView):
# Config templates # Config templates
# #
@register_model_view(ConfigTemplate, 'list', path='', detail=False)
class ConfigTemplateListView(generic.ObjectListView): class ConfigTemplateListView(generic.ObjectListView):
queryset = ConfigTemplate.objects.annotate( queryset = ConfigTemplate.objects.annotate(
device_count=count_related(Device, 'config_template'), device_count=count_related(Device, 'config_template'),
@ -790,6 +847,7 @@ class ConfigTemplateView(generic.ObjectView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
@register_model_view(ConfigTemplate, 'add', detail=False)
@register_model_view(ConfigTemplate, 'edit') @register_model_view(ConfigTemplate, 'edit')
class ConfigTemplateEditView(generic.ObjectEditView): class ConfigTemplateEditView(generic.ObjectEditView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
@ -801,11 +859,13 @@ class ConfigTemplateDeleteView(generic.ObjectDeleteView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
@register_model_view(ConfigTemplate, 'import', detail=False)
class ConfigTemplateBulkImportView(generic.BulkImportView): class ConfigTemplateBulkImportView(generic.BulkImportView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
model_form = forms.ConfigTemplateImportForm model_form = forms.ConfigTemplateImportForm
@register_model_view(ConfigTemplate, 'bulk_edit', path='edit', detail=False)
class ConfigTemplateBulkEditView(generic.BulkEditView): class ConfigTemplateBulkEditView(generic.BulkEditView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
filterset = filtersets.ConfigTemplateFilterSet filterset = filtersets.ConfigTemplateFilterSet
@ -813,12 +873,14 @@ class ConfigTemplateBulkEditView(generic.BulkEditView):
form = forms.ConfigTemplateBulkEditForm form = forms.ConfigTemplateBulkEditForm
@register_model_view(ConfigTemplate, 'bulk_delete', path='delete', detail=False)
class ConfigTemplateBulkDeleteView(generic.BulkDeleteView): class ConfigTemplateBulkDeleteView(generic.BulkDeleteView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
filterset = filtersets.ConfigTemplateFilterSet filterset = filtersets.ConfigTemplateFilterSet
table = tables.ConfigTemplateTable table = tables.ConfigTemplateTable
@register_model_view(ConfigTemplate, 'bulk_sync', path='sync', detail=False)
class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView): class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView):
queryset = ConfigTemplate.objects.all() queryset = ConfigTemplate.objects.all()
@ -827,6 +889,7 @@ class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView):
# Image attachments # Image attachments
# #
@register_model_view(ImageAttachment, 'list', path='', detail=False)
class ImageAttachmentListView(generic.ObjectListView): class ImageAttachmentListView(generic.ObjectListView):
queryset = ImageAttachment.objects.all() queryset = ImageAttachment.objects.all()
filterset = filtersets.ImageAttachmentFilterSet filterset = filtersets.ImageAttachmentFilterSet
@ -837,6 +900,7 @@ class ImageAttachmentListView(generic.ObjectListView):
} }
@register_model_view(ImageAttachment, 'add', detail=False)
@register_model_view(ImageAttachment, 'edit') @register_model_view(ImageAttachment, 'edit')
class ImageAttachmentEditView(generic.ObjectEditView): class ImageAttachmentEditView(generic.ObjectEditView):
queryset = ImageAttachment.objects.all() queryset = ImageAttachment.objects.all()
@ -871,6 +935,7 @@ class ImageAttachmentDeleteView(generic.ObjectDeleteView):
# Journal entries # Journal entries
# #
@register_model_view(JournalEntry, 'list', path='', detail=False)
class JournalEntryListView(generic.ObjectListView): class JournalEntryListView(generic.ObjectListView):
queryset = JournalEntry.objects.all() queryset = JournalEntry.objects.all()
filterset = filtersets.JournalEntryFilterSet filterset = filtersets.JournalEntryFilterSet
@ -889,6 +954,7 @@ class JournalEntryView(generic.ObjectView):
queryset = JournalEntry.objects.all() queryset = JournalEntry.objects.all()
@register_model_view(JournalEntry, 'add', detail=False)
@register_model_view(JournalEntry, 'edit') @register_model_view(JournalEntry, 'edit')
class JournalEntryEditView(generic.ObjectEditView): class JournalEntryEditView(generic.ObjectEditView):
queryset = JournalEntry.objects.all() queryset = JournalEntry.objects.all()
@ -917,6 +983,13 @@ class JournalEntryDeleteView(generic.ObjectDeleteView):
return reverse(viewname, kwargs={'pk': obj.pk}) return reverse(viewname, kwargs={'pk': obj.pk})
@register_model_view(JournalEntry, 'import', detail=False)
class JournalEntryBulkImportView(generic.BulkImportView):
queryset = JournalEntry.objects.all()
model_form = forms.JournalEntryImportForm
@register_model_view(JournalEntry, 'bulk_edit', path='edit', detail=False)
class JournalEntryBulkEditView(generic.BulkEditView): class JournalEntryBulkEditView(generic.BulkEditView):
queryset = JournalEntry.objects.all() queryset = JournalEntry.objects.all()
filterset = filtersets.JournalEntryFilterSet filterset = filtersets.JournalEntryFilterSet
@ -924,17 +997,13 @@ class JournalEntryBulkEditView(generic.BulkEditView):
form = forms.JournalEntryBulkEditForm form = forms.JournalEntryBulkEditForm
@register_model_view(JournalEntry, 'bulk_delete', path='delete', detail=False)
class JournalEntryBulkDeleteView(generic.BulkDeleteView): class JournalEntryBulkDeleteView(generic.BulkDeleteView):
queryset = JournalEntry.objects.all() queryset = JournalEntry.objects.all()
filterset = filtersets.JournalEntryFilterSet filterset = filtersets.JournalEntryFilterSet
table = tables.JournalEntryTable table = tables.JournalEntryTable
class JournalEntryBulkImportView(generic.BulkImportView):
queryset = JournalEntry.objects.all()
model_form = forms.JournalEntryImportForm
# #
# Dashboard & widgets # Dashboard & widgets
# #

View File

@ -1,150 +1,62 @@
from django.urls import include, path from django.urls import include, path
from utilities.urls import get_model_urls from utilities.urls import get_model_urls
from . import views from . import views # noqa F401
app_name = 'ipam' app_name = 'ipam'
urlpatterns = [ urlpatterns = [
# ASN ranges path('asn-ranges/', include(get_model_urls('ipam', 'asnrange', detail=False))),
path('asn-ranges/', views.ASNRangeListView.as_view(), name='asnrange_list'),
path('asn-ranges/add/', views.ASNRangeEditView.as_view(), name='asnrange_add'),
path('asn-ranges/import/', views.ASNRangeBulkImportView.as_view(), name='asnrange_import'),
path('asn-ranges/edit/', views.ASNRangeBulkEditView.as_view(), name='asnrange_bulk_edit'),
path('asn-ranges/delete/', views.ASNRangeBulkDeleteView.as_view(), name='asnrange_bulk_delete'),
path('asn-ranges/<int:pk>/', include(get_model_urls('ipam', 'asnrange'))), path('asn-ranges/<int:pk>/', include(get_model_urls('ipam', 'asnrange'))),
# ASNs path('asns/', include(get_model_urls('ipam', 'asn', detail=False))),
path('asns/', views.ASNListView.as_view(), name='asn_list'),
path('asns/add/', views.ASNEditView.as_view(), name='asn_add'),
path('asns/import/', views.ASNBulkImportView.as_view(), name='asn_import'),
path('asns/edit/', views.ASNBulkEditView.as_view(), name='asn_bulk_edit'),
path('asns/delete/', views.ASNBulkDeleteView.as_view(), name='asn_bulk_delete'),
path('asns/<int:pk>/', include(get_model_urls('ipam', 'asn'))), path('asns/<int:pk>/', include(get_model_urls('ipam', 'asn'))),
# VRFs path('vrfs/', include(get_model_urls('ipam', 'vrf', detail=False))),
path('vrfs/', views.VRFListView.as_view(), name='vrf_list'),
path('vrfs/add/', views.VRFEditView.as_view(), name='vrf_add'),
path('vrfs/import/', views.VRFBulkImportView.as_view(), name='vrf_import'),
path('vrfs/edit/', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'),
path('vrfs/delete/', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'),
path('vrfs/<int:pk>/', include(get_model_urls('ipam', 'vrf'))), path('vrfs/<int:pk>/', include(get_model_urls('ipam', 'vrf'))),
# Route targets path('route-targets/', include(get_model_urls('ipam', 'routetarget', detail=False))),
path('route-targets/', views.RouteTargetListView.as_view(), name='routetarget_list'),
path('route-targets/add/', views.RouteTargetEditView.as_view(), name='routetarget_add'),
path('route-targets/import/', views.RouteTargetBulkImportView.as_view(), name='routetarget_import'),
path('route-targets/edit/', views.RouteTargetBulkEditView.as_view(), name='routetarget_bulk_edit'),
path('route-targets/delete/', views.RouteTargetBulkDeleteView.as_view(), name='routetarget_bulk_delete'),
path('route-targets/<int:pk>/', include(get_model_urls('ipam', 'routetarget'))), path('route-targets/<int:pk>/', include(get_model_urls('ipam', 'routetarget'))),
# RIRs path('rirs/', include(get_model_urls('ipam', 'rir', detail=False))),
path('rirs/', views.RIRListView.as_view(), name='rir_list'),
path('rirs/add/', views.RIREditView.as_view(), name='rir_add'),
path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'),
path('rirs/edit/', views.RIRBulkEditView.as_view(), name='rir_bulk_edit'),
path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'),
path('rirs/<int:pk>/', include(get_model_urls('ipam', 'rir'))), path('rirs/<int:pk>/', include(get_model_urls('ipam', 'rir'))),
# Aggregates path('aggregates/', include(get_model_urls('ipam', 'aggregate', detail=False))),
path('aggregates/', views.AggregateListView.as_view(), name='aggregate_list'),
path('aggregates/add/', views.AggregateEditView.as_view(), name='aggregate_add'),
path('aggregates/import/', views.AggregateBulkImportView.as_view(), name='aggregate_import'),
path('aggregates/edit/', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'),
path('aggregates/delete/', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'),
path('aggregates/<int:pk>/', include(get_model_urls('ipam', 'aggregate'))), path('aggregates/<int:pk>/', include(get_model_urls('ipam', 'aggregate'))),
# Roles path('roles/', include(get_model_urls('ipam', 'role', detail=False))),
path('roles/', views.RoleListView.as_view(), name='role_list'),
path('roles/add/', views.RoleEditView.as_view(), name='role_add'),
path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'),
path('roles/edit/', views.RoleBulkEditView.as_view(), name='role_bulk_edit'),
path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'),
path('roles/<int:pk>/', include(get_model_urls('ipam', 'role'))), path('roles/<int:pk>/', include(get_model_urls('ipam', 'role'))),
# Prefixes path('prefixes/', include(get_model_urls('ipam', 'prefix', detail=False))),
path('prefixes/', views.PrefixListView.as_view(), name='prefix_list'),
path('prefixes/add/', views.PrefixEditView.as_view(), name='prefix_add'),
path('prefixes/import/', views.PrefixBulkImportView.as_view(), name='prefix_import'),
path('prefixes/edit/', views.PrefixBulkEditView.as_view(), name='prefix_bulk_edit'),
path('prefixes/delete/', views.PrefixBulkDeleteView.as_view(), name='prefix_bulk_delete'),
path('prefixes/<int:pk>/', include(get_model_urls('ipam', 'prefix'))), path('prefixes/<int:pk>/', include(get_model_urls('ipam', 'prefix'))),
# IP ranges path('ip-ranges/', include(get_model_urls('ipam', 'iprange', detail=False))),
path('ip-ranges/', views.IPRangeListView.as_view(), name='iprange_list'),
path('ip-ranges/add/', views.IPRangeEditView.as_view(), name='iprange_add'),
path('ip-ranges/import/', views.IPRangeBulkImportView.as_view(), name='iprange_import'),
path('ip-ranges/edit/', views.IPRangeBulkEditView.as_view(), name='iprange_bulk_edit'),
path('ip-ranges/delete/', views.IPRangeBulkDeleteView.as_view(), name='iprange_bulk_delete'),
path('ip-ranges/<int:pk>/', include(get_model_urls('ipam', 'iprange'))), path('ip-ranges/<int:pk>/', include(get_model_urls('ipam', 'iprange'))),
# IP addresses path('ip-addresses/', include(get_model_urls('ipam', 'ipaddress', detail=False))),
path('ip-addresses/', views.IPAddressListView.as_view(), name='ipaddress_list'),
path('ip-addresses/add/', views.IPAddressEditView.as_view(), name='ipaddress_add'),
path('ip-addresses/bulk-add/', views.IPAddressBulkCreateView.as_view(), name='ipaddress_bulk_add'),
path('ip-addresses/import/', views.IPAddressBulkImportView.as_view(), name='ipaddress_import'),
path('ip-addresses/edit/', views.IPAddressBulkEditView.as_view(), name='ipaddress_bulk_edit'),
path('ip-addresses/delete/', views.IPAddressBulkDeleteView.as_view(), name='ipaddress_bulk_delete'),
path('ip-addresses/assign/', views.IPAddressAssignView.as_view(), name='ipaddress_assign'),
path('ip-addresses/<int:pk>/', include(get_model_urls('ipam', 'ipaddress'))), path('ip-addresses/<int:pk>/', include(get_model_urls('ipam', 'ipaddress'))),
# FHRP groups path('fhrp-groups/', include(get_model_urls('ipam', 'fhrpgroup', detail=False))),
path('fhrp-groups/', views.FHRPGroupListView.as_view(), name='fhrpgroup_list'),
path('fhrp-groups/add/', views.FHRPGroupEditView.as_view(), name='fhrpgroup_add'),
path('fhrp-groups/import/', views.FHRPGroupBulkImportView.as_view(), name='fhrpgroup_import'),
path('fhrp-groups/edit/', views.FHRPGroupBulkEditView.as_view(), name='fhrpgroup_bulk_edit'),
path('fhrp-groups/delete/', views.FHRPGroupBulkDeleteView.as_view(), name='fhrpgroup_bulk_delete'),
path('fhrp-groups/<int:pk>/', include(get_model_urls('ipam', 'fhrpgroup'))), path('fhrp-groups/<int:pk>/', include(get_model_urls('ipam', 'fhrpgroup'))),
# FHRP group assignments path('fhrp-group-assignments/', include(get_model_urls('ipam', 'fhrpgroupassignment', detail=False))),
path('fhrp-group-assignments/add/', views.FHRPGroupAssignmentEditView.as_view(), name='fhrpgroupassignment_add'),
path('fhrp-group-assignments/<int:pk>/', include(get_model_urls('ipam', 'fhrpgroupassignment'))), path('fhrp-group-assignments/<int:pk>/', include(get_model_urls('ipam', 'fhrpgroupassignment'))),
# VLAN groups path('vlan-groups/', include(get_model_urls('ipam', 'vlangroup', detail=False))),
path('vlan-groups/', views.VLANGroupListView.as_view(), name='vlangroup_list'),
path('vlan-groups/add/', views.VLANGroupEditView.as_view(), name='vlangroup_add'),
path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'),
path('vlan-groups/edit/', views.VLANGroupBulkEditView.as_view(), name='vlangroup_bulk_edit'),
path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'),
path('vlan-groups/<int:pk>/', include(get_model_urls('ipam', 'vlangroup'))), path('vlan-groups/<int:pk>/', include(get_model_urls('ipam', 'vlangroup'))),
# VLANs path('vlans/', include(get_model_urls('ipam', 'vlan', detail=False))),
path('vlans/', views.VLANListView.as_view(), name='vlan_list'),
path('vlans/add/', views.VLANEditView.as_view(), name='vlan_add'),
path('vlans/import/', views.VLANBulkImportView.as_view(), name='vlan_import'),
path('vlans/edit/', views.VLANBulkEditView.as_view(), name='vlan_bulk_edit'),
path('vlans/delete/', views.VLANBulkDeleteView.as_view(), name='vlan_bulk_delete'),
path('vlans/<int:pk>/', include(get_model_urls('ipam', 'vlan'))), path('vlans/<int:pk>/', include(get_model_urls('ipam', 'vlan'))),
# VLAN Translation Policies path('vlan-translation-policies/', include(get_model_urls('ipam', 'vlantranslationpolicy', detail=False))),
path('vlan-translation-policies/', views.VLANTranslationPolicyListView.as_view(), name='vlantranslationpolicy_list'),
path('vlan-translation-policies/add/', views.VLANTranslationPolicyEditView.as_view(), name='vlantranslationpolicy_add'),
path('vlan-translation-policies/import/', views.VLANTranslationPolicyBulkImportView.as_view(), name='vlantranslationpolicy_import'),
path('vlan-translation-policies/edit/', views.VLANTranslationPolicyBulkEditView.as_view(), name='vlantranslationpolicy_bulk_edit'),
path('vlan-translation-policies/delete/', views.VLANTranslationPolicyBulkDeleteView.as_view(), name='vlantranslationpolicy_bulk_delete'),
path('vlan-translation-policies/<int:pk>/', include(get_model_urls('ipam', 'vlantranslationpolicy'))), path('vlan-translation-policies/<int:pk>/', include(get_model_urls('ipam', 'vlantranslationpolicy'))),
# VLAN Translation Rules path('vlan-translation-rules/', include(get_model_urls('ipam', 'vlantranslationrule', detail=False))),
path('vlan-translation-rules/', views.VLANTranslationRuleListView.as_view(), name='vlantranslationrule_list'),
path('vlan-translation-rules/add/', views.VLANTranslationRuleEditView.as_view(), name='vlantranslationrule_add'),
path('vlan-translation-rules/import/', views.VLANTranslationRuleBulkImportView.as_view(), name='vlantranslationrule_import'),
path('vlan-translation-rules/edit/', views.VLANTranslationRuleBulkEditView.as_view(), name='vlantranslationrule_bulk_edit'),
path('vlan-translation-rules/delete/', views.VLANTranslationRuleBulkDeleteView.as_view(), name='vlantranslationrule_bulk_delete'),
path('vlan-translation-rules/<int:pk>/', include(get_model_urls('ipam', 'vlantranslationrule'))), path('vlan-translation-rules/<int:pk>/', include(get_model_urls('ipam', 'vlantranslationrule'))),
# Service templates path('service-templates/', include(get_model_urls('ipam', 'servicetemplate', detail=False))),
path('service-templates/', views.ServiceTemplateListView.as_view(), name='servicetemplate_list'),
path('service-templates/add/', views.ServiceTemplateEditView.as_view(), name='servicetemplate_add'),
path('service-templates/import/', views.ServiceTemplateBulkImportView.as_view(), name='servicetemplate_import'),
path('service-templates/edit/', views.ServiceTemplateBulkEditView.as_view(), name='servicetemplate_bulk_edit'),
path('service-templates/delete/', views.ServiceTemplateBulkDeleteView.as_view(), name='servicetemplate_bulk_delete'),
path('service-templates/<int:pk>/', include(get_model_urls('ipam', 'servicetemplate'))), path('service-templates/<int:pk>/', include(get_model_urls('ipam', 'servicetemplate'))),
# Services path('services/', include(get_model_urls('ipam', 'service', detail=False))),
path('services/', views.ServiceListView.as_view(), name='service_list'),
path('services/add/', views.ServiceCreateView.as_view(), name='service_add'),
path('services/import/', views.ServiceBulkImportView.as_view(), name='service_import'),
path('services/edit/', views.ServiceBulkEditView.as_view(), name='service_bulk_edit'),
path('services/delete/', views.ServiceBulkDeleteView.as_view(), name='service_bulk_delete'),
path('services/<int:pk>/', include(get_model_urls('ipam', 'service'))), path('services/<int:pk>/', include(get_model_urls('ipam', 'service'))),
] ]

View File

@ -29,6 +29,7 @@ from .utils import add_requested_prefixes, add_available_ipaddresses, add_availa
# VRFs # VRFs
# #
@register_model_view(VRF, 'list', path='', detail=False)
class VRFListView(generic.ObjectListView): class VRFListView(generic.ObjectListView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
filterset = filtersets.VRFFilterSet filterset = filtersets.VRFFilterSet
@ -57,6 +58,7 @@ class VRFView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(VRF, 'add', detail=False)
@register_model_view(VRF, 'edit') @register_model_view(VRF, 'edit')
class VRFEditView(generic.ObjectEditView): class VRFEditView(generic.ObjectEditView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
@ -68,11 +70,13 @@ class VRFDeleteView(generic.ObjectDeleteView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
@register_model_view(VRF, 'import', detail=False)
class VRFBulkImportView(generic.BulkImportView): class VRFBulkImportView(generic.BulkImportView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
model_form = forms.VRFImportForm model_form = forms.VRFImportForm
@register_model_view(VRF, 'bulk_edit', path='edit', detail=False)
class VRFBulkEditView(generic.BulkEditView): class VRFBulkEditView(generic.BulkEditView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
filterset = filtersets.VRFFilterSet filterset = filtersets.VRFFilterSet
@ -80,6 +84,7 @@ class VRFBulkEditView(generic.BulkEditView):
form = forms.VRFBulkEditForm form = forms.VRFBulkEditForm
@register_model_view(VRF, 'bulk_delete', path='delete', detail=False)
class VRFBulkDeleteView(generic.BulkDeleteView): class VRFBulkDeleteView(generic.BulkDeleteView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
filterset = filtersets.VRFFilterSet filterset = filtersets.VRFFilterSet
@ -90,6 +95,7 @@ class VRFBulkDeleteView(generic.BulkDeleteView):
# Route targets # Route targets
# #
@register_model_view(RouteTarget, 'list', path='', detail=False)
class RouteTargetListView(generic.ObjectListView): class RouteTargetListView(generic.ObjectListView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
filterset = filtersets.RouteTargetFilterSet filterset = filtersets.RouteTargetFilterSet
@ -102,6 +108,7 @@ class RouteTargetView(generic.ObjectView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
@register_model_view(RouteTarget, 'add', detail=False)
@register_model_view(RouteTarget, 'edit') @register_model_view(RouteTarget, 'edit')
class RouteTargetEditView(generic.ObjectEditView): class RouteTargetEditView(generic.ObjectEditView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
@ -113,11 +120,13 @@ class RouteTargetDeleteView(generic.ObjectDeleteView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
@register_model_view(RouteTarget, 'import', detail=False)
class RouteTargetBulkImportView(generic.BulkImportView): class RouteTargetBulkImportView(generic.BulkImportView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
model_form = forms.RouteTargetImportForm model_form = forms.RouteTargetImportForm
@register_model_view(RouteTarget, 'bulk_edit', path='edit', detail=False)
class RouteTargetBulkEditView(generic.BulkEditView): class RouteTargetBulkEditView(generic.BulkEditView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
filterset = filtersets.RouteTargetFilterSet filterset = filtersets.RouteTargetFilterSet
@ -125,6 +134,7 @@ class RouteTargetBulkEditView(generic.BulkEditView):
form = forms.RouteTargetBulkEditForm form = forms.RouteTargetBulkEditForm
@register_model_view(RouteTarget, 'bulk_delete', path='delete', detail=False)
class RouteTargetBulkDeleteView(generic.BulkDeleteView): class RouteTargetBulkDeleteView(generic.BulkDeleteView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
filterset = filtersets.RouteTargetFilterSet filterset = filtersets.RouteTargetFilterSet
@ -135,6 +145,7 @@ class RouteTargetBulkDeleteView(generic.BulkDeleteView):
# RIRs # RIRs
# #
@register_model_view(RIR, 'list', path='', detail=False)
class RIRListView(generic.ObjectListView): class RIRListView(generic.ObjectListView):
queryset = RIR.objects.annotate( queryset = RIR.objects.annotate(
aggregate_count=count_related(Aggregate, 'rir') aggregate_count=count_related(Aggregate, 'rir')
@ -154,6 +165,7 @@ class RIRView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(RIR, 'add', detail=False)
@register_model_view(RIR, 'edit') @register_model_view(RIR, 'edit')
class RIREditView(generic.ObjectEditView): class RIREditView(generic.ObjectEditView):
queryset = RIR.objects.all() queryset = RIR.objects.all()
@ -165,11 +177,13 @@ class RIRDeleteView(generic.ObjectDeleteView):
queryset = RIR.objects.all() queryset = RIR.objects.all()
@register_model_view(RIR, 'import', detail=False)
class RIRBulkImportView(generic.BulkImportView): class RIRBulkImportView(generic.BulkImportView):
queryset = RIR.objects.all() queryset = RIR.objects.all()
model_form = forms.RIRImportForm model_form = forms.RIRImportForm
@register_model_view(RIR, 'bulk_edit', path='edit', detail=False)
class RIRBulkEditView(generic.BulkEditView): class RIRBulkEditView(generic.BulkEditView):
queryset = RIR.objects.annotate( queryset = RIR.objects.annotate(
aggregate_count=count_related(Aggregate, 'rir') aggregate_count=count_related(Aggregate, 'rir')
@ -179,6 +193,7 @@ class RIRBulkEditView(generic.BulkEditView):
form = forms.RIRBulkEditForm form = forms.RIRBulkEditForm
@register_model_view(RIR, 'bulk_delete', path='delete', detail=False)
class RIRBulkDeleteView(generic.BulkDeleteView): class RIRBulkDeleteView(generic.BulkDeleteView):
queryset = RIR.objects.annotate( queryset = RIR.objects.annotate(
aggregate_count=count_related(Aggregate, 'rir') aggregate_count=count_related(Aggregate, 'rir')
@ -191,6 +206,7 @@ class RIRBulkDeleteView(generic.BulkDeleteView):
# ASN ranges # ASN ranges
# #
@register_model_view(ASNRange, 'list', path='', detail=False)
class ASNRangeListView(generic.ObjectListView): class ASNRangeListView(generic.ObjectListView):
queryset = ASNRange.objects.annotate_asn_counts() queryset = ASNRange.objects.annotate_asn_counts()
filterset = filtersets.ASNRangeFilterSet filterset = filtersets.ASNRangeFilterSet
@ -224,6 +240,7 @@ class ASNRangeASNsView(generic.ObjectChildrenView):
) )
@register_model_view(ASNRange, 'add', detail=False)
@register_model_view(ASNRange, 'edit') @register_model_view(ASNRange, 'edit')
class ASNRangeEditView(generic.ObjectEditView): class ASNRangeEditView(generic.ObjectEditView):
queryset = ASNRange.objects.all() queryset = ASNRange.objects.all()
@ -235,11 +252,13 @@ class ASNRangeDeleteView(generic.ObjectDeleteView):
queryset = ASNRange.objects.all() queryset = ASNRange.objects.all()
@register_model_view(ASNRange, 'import', detail=False)
class ASNRangeBulkImportView(generic.BulkImportView): class ASNRangeBulkImportView(generic.BulkImportView):
queryset = ASNRange.objects.all() queryset = ASNRange.objects.all()
model_form = forms.ASNRangeImportForm model_form = forms.ASNRangeImportForm
@register_model_view(ASNRange, 'bulk_edit', path='edit', detail=False)
class ASNRangeBulkEditView(generic.BulkEditView): class ASNRangeBulkEditView(generic.BulkEditView):
queryset = ASNRange.objects.annotate_asn_counts() queryset = ASNRange.objects.annotate_asn_counts()
filterset = filtersets.ASNRangeFilterSet filterset = filtersets.ASNRangeFilterSet
@ -247,6 +266,7 @@ class ASNRangeBulkEditView(generic.BulkEditView):
form = forms.ASNRangeBulkEditForm form = forms.ASNRangeBulkEditForm
@register_model_view(ASNRange, 'bulk_delete', path='delete', detail=False)
class ASNRangeBulkDeleteView(generic.BulkDeleteView): class ASNRangeBulkDeleteView(generic.BulkDeleteView):
queryset = ASNRange.objects.annotate_asn_counts() queryset = ASNRange.objects.annotate_asn_counts()
filterset = filtersets.ASNRangeFilterSet filterset = filtersets.ASNRangeFilterSet
@ -257,6 +277,7 @@ class ASNRangeBulkDeleteView(generic.BulkDeleteView):
# ASNs # ASNs
# #
@register_model_view(ASN, 'list', path='', detail=False)
class ASNListView(generic.ObjectListView): class ASNListView(generic.ObjectListView):
queryset = ASN.objects.annotate( queryset = ASN.objects.annotate(
site_count=count_related(Site, 'asns'), site_count=count_related(Site, 'asns'),
@ -284,6 +305,7 @@ class ASNView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ASN, 'add', detail=False)
@register_model_view(ASN, 'edit') @register_model_view(ASN, 'edit')
class ASNEditView(generic.ObjectEditView): class ASNEditView(generic.ObjectEditView):
queryset = ASN.objects.all() queryset = ASN.objects.all()
@ -295,11 +317,13 @@ class ASNDeleteView(generic.ObjectDeleteView):
queryset = ASN.objects.all() queryset = ASN.objects.all()
@register_model_view(ASN, 'import', detail=False)
class ASNBulkImportView(generic.BulkImportView): class ASNBulkImportView(generic.BulkImportView):
queryset = ASN.objects.all() queryset = ASN.objects.all()
model_form = forms.ASNImportForm model_form = forms.ASNImportForm
@register_model_view(ASN, 'bulk_edit', path='edit', detail=False)
class ASNBulkEditView(generic.BulkEditView): class ASNBulkEditView(generic.BulkEditView):
queryset = ASN.objects.annotate( queryset = ASN.objects.annotate(
site_count=count_related(Site, 'asns') site_count=count_related(Site, 'asns')
@ -309,6 +333,7 @@ class ASNBulkEditView(generic.BulkEditView):
form = forms.ASNBulkEditForm form = forms.ASNBulkEditForm
@register_model_view(ASN, 'bulk_delete', path='delete', detail=False)
class ASNBulkDeleteView(generic.BulkDeleteView): class ASNBulkDeleteView(generic.BulkDeleteView):
queryset = ASN.objects.annotate( queryset = ASN.objects.annotate(
site_count=count_related(Site, 'asns') site_count=count_related(Site, 'asns')
@ -321,6 +346,7 @@ class ASNBulkDeleteView(generic.BulkDeleteView):
# Aggregates # Aggregates
# #
@register_model_view(Aggregate, 'list', path='', detail=False)
class AggregateListView(generic.ObjectListView): class AggregateListView(generic.ObjectListView):
queryset = Aggregate.objects.annotate( queryset = Aggregate.objects.annotate(
child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
@ -371,6 +397,7 @@ class AggregatePrefixesView(generic.ObjectChildrenView):
} }
@register_model_view(Aggregate, 'add', detail=False)
@register_model_view(Aggregate, 'edit') @register_model_view(Aggregate, 'edit')
class AggregateEditView(generic.ObjectEditView): class AggregateEditView(generic.ObjectEditView):
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
@ -382,11 +409,13 @@ class AggregateDeleteView(generic.ObjectDeleteView):
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
@register_model_view(Aggregate, 'import', detail=False)
class AggregateBulkImportView(generic.BulkImportView): class AggregateBulkImportView(generic.BulkImportView):
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
model_form = forms.AggregateImportForm model_form = forms.AggregateImportForm
@register_model_view(Aggregate, 'bulk_edit', path='edit', detail=False)
class AggregateBulkEditView(generic.BulkEditView): class AggregateBulkEditView(generic.BulkEditView):
queryset = Aggregate.objects.annotate( queryset = Aggregate.objects.annotate(
child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
@ -396,6 +425,7 @@ class AggregateBulkEditView(generic.BulkEditView):
form = forms.AggregateBulkEditForm form = forms.AggregateBulkEditForm
@register_model_view(Aggregate, 'bulk_delete', path='delete', detail=False)
class AggregateBulkDeleteView(generic.BulkDeleteView): class AggregateBulkDeleteView(generic.BulkDeleteView):
queryset = Aggregate.objects.annotate( queryset = Aggregate.objects.annotate(
child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
@ -413,6 +443,7 @@ class AggregateContactsView(ObjectContactsView):
# Prefix/VLAN roles # Prefix/VLAN roles
# #
@register_model_view(Role, 'list', path='', detail=False)
class RoleListView(generic.ObjectListView): class RoleListView(generic.ObjectListView):
queryset = Role.objects.annotate( queryset = Role.objects.annotate(
prefix_count=count_related(Prefix, 'role'), prefix_count=count_related(Prefix, 'role'),
@ -434,6 +465,7 @@ class RoleView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(Role, 'add', detail=False)
@register_model_view(Role, 'edit') @register_model_view(Role, 'edit')
class RoleEditView(generic.ObjectEditView): class RoleEditView(generic.ObjectEditView):
queryset = Role.objects.all() queryset = Role.objects.all()
@ -445,11 +477,13 @@ class RoleDeleteView(generic.ObjectDeleteView):
queryset = Role.objects.all() queryset = Role.objects.all()
@register_model_view(Role, 'import', detail=False)
class RoleBulkImportView(generic.BulkImportView): class RoleBulkImportView(generic.BulkImportView):
queryset = Role.objects.all() queryset = Role.objects.all()
model_form = forms.RoleImportForm model_form = forms.RoleImportForm
@register_model_view(Role, 'bulk_edit', path='edit', detail=False)
class RoleBulkEditView(generic.BulkEditView): class RoleBulkEditView(generic.BulkEditView):
queryset = Role.objects.all() queryset = Role.objects.all()
filterset = filtersets.RoleFilterSet filterset = filtersets.RoleFilterSet
@ -457,6 +491,7 @@ class RoleBulkEditView(generic.BulkEditView):
form = forms.RoleBulkEditForm form = forms.RoleBulkEditForm
@register_model_view(Role, 'bulk_delete', path='delete', detail=False)
class RoleBulkDeleteView(generic.BulkDeleteView): class RoleBulkDeleteView(generic.BulkDeleteView):
queryset = Role.objects.all() queryset = Role.objects.all()
filterset = filtersets.RoleFilterSet filterset = filtersets.RoleFilterSet
@ -467,6 +502,7 @@ class RoleBulkDeleteView(generic.BulkDeleteView):
# Prefixes # Prefixes
# #
@register_model_view(Prefix, 'list', path='', detail=False)
class PrefixListView(generic.ObjectListView): class PrefixListView(generic.ObjectListView):
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
filterset = filtersets.PrefixFilterSet filterset = filtersets.PrefixFilterSet
@ -615,6 +651,7 @@ class PrefixIPAddressesView(generic.ObjectChildrenView):
} }
@register_model_view(Prefix, 'add', detail=False)
@register_model_view(Prefix, 'edit') @register_model_view(Prefix, 'edit')
class PrefixEditView(generic.ObjectEditView): class PrefixEditView(generic.ObjectEditView):
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
@ -626,11 +663,13 @@ class PrefixDeleteView(generic.ObjectDeleteView):
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
@register_model_view(Prefix, 'import', detail=False)
class PrefixBulkImportView(generic.BulkImportView): class PrefixBulkImportView(generic.BulkImportView):
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
model_form = forms.PrefixImportForm model_form = forms.PrefixImportForm
@register_model_view(Prefix, 'bulk_edit', path='edit', detail=False)
class PrefixBulkEditView(generic.BulkEditView): class PrefixBulkEditView(generic.BulkEditView):
queryset = Prefix.objects.prefetch_related('vrf__tenant') queryset = Prefix.objects.prefetch_related('vrf__tenant')
filterset = filtersets.PrefixFilterSet filterset = filtersets.PrefixFilterSet
@ -638,6 +677,7 @@ class PrefixBulkEditView(generic.BulkEditView):
form = forms.PrefixBulkEditForm form = forms.PrefixBulkEditForm
@register_model_view(Prefix, 'bulk_delete', path='delete', detail=False)
class PrefixBulkDeleteView(generic.BulkDeleteView): class PrefixBulkDeleteView(generic.BulkDeleteView):
queryset = Prefix.objects.prefetch_related('vrf__tenant') queryset = Prefix.objects.prefetch_related('vrf__tenant')
filterset = filtersets.PrefixFilterSet filterset = filtersets.PrefixFilterSet
@ -653,6 +693,7 @@ class PrefixContactsView(ObjectContactsView):
# IP Ranges # IP Ranges
# #
@register_model_view(IPRange, 'list', path='', detail=False)
class IPRangeListView(generic.ObjectListView): class IPRangeListView(generic.ObjectListView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
filterset = filtersets.IPRangeFilterSet filterset = filtersets.IPRangeFilterSet
@ -704,6 +745,7 @@ class IPRangeIPAddressesView(generic.ObjectChildrenView):
return parent.get_child_ips().restrict(request.user, 'view') return parent.get_child_ips().restrict(request.user, 'view')
@register_model_view(IPRange, 'add', detail=False)
@register_model_view(IPRange, 'edit') @register_model_view(IPRange, 'edit')
class IPRangeEditView(generic.ObjectEditView): class IPRangeEditView(generic.ObjectEditView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
@ -715,11 +757,13 @@ class IPRangeDeleteView(generic.ObjectDeleteView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
@register_model_view(IPRange, 'import', detail=False)
class IPRangeBulkImportView(generic.BulkImportView): class IPRangeBulkImportView(generic.BulkImportView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
model_form = forms.IPRangeImportForm model_form = forms.IPRangeImportForm
@register_model_view(IPRange, 'bulk_edit', path='edit', detail=False)
class IPRangeBulkEditView(generic.BulkEditView): class IPRangeBulkEditView(generic.BulkEditView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
filterset = filtersets.IPRangeFilterSet filterset = filtersets.IPRangeFilterSet
@ -727,6 +771,7 @@ class IPRangeBulkEditView(generic.BulkEditView):
form = forms.IPRangeBulkEditForm form = forms.IPRangeBulkEditForm
@register_model_view(IPRange, 'bulk_delete', path='delete', detail=False)
class IPRangeBulkDeleteView(generic.BulkDeleteView): class IPRangeBulkDeleteView(generic.BulkDeleteView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
filterset = filtersets.IPRangeFilterSet filterset = filtersets.IPRangeFilterSet
@ -742,6 +787,7 @@ class IPRangeContactsView(ObjectContactsView):
# IP addresses # IP addresses
# #
@register_model_view(IPAddress, 'list', path='', detail=False)
class IPAddressListView(generic.ObjectListView): class IPAddressListView(generic.ObjectListView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
filterset = filtersets.IPAddressFilterSet filterset = filtersets.IPAddressFilterSet
@ -788,6 +834,7 @@ class IPAddressView(generic.ObjectView):
} }
@register_model_view(IPAddress, 'add', detail=False)
@register_model_view(IPAddress, 'edit') @register_model_view(IPAddress, 'edit')
class IPAddressEditView(generic.ObjectEditView): class IPAddressEditView(generic.ObjectEditView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
@ -818,6 +865,7 @@ class IPAddressEditView(generic.ObjectEditView):
# TODO: Standardize or remove this view # TODO: Standardize or remove this view
@register_model_view(IPAddress, 'assign', path='assign', detail=False)
class IPAddressAssignView(generic.ObjectView): class IPAddressAssignView(generic.ObjectView):
""" """
Search for IPAddresses to be assigned to an Interface. Search for IPAddresses to be assigned to an Interface.
@ -862,6 +910,7 @@ class IPAddressDeleteView(generic.ObjectDeleteView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
@register_model_view(IPAddress, 'bulk_add', path='bulk-add', detail=False)
class IPAddressBulkCreateView(generic.BulkCreateView): class IPAddressBulkCreateView(generic.BulkCreateView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
form = forms.IPAddressBulkCreateForm form = forms.IPAddressBulkCreateForm
@ -870,11 +919,13 @@ class IPAddressBulkCreateView(generic.BulkCreateView):
template_name = 'ipam/ipaddress_bulk_add.html' template_name = 'ipam/ipaddress_bulk_add.html'
@register_model_view(IPAddress, 'import', detail=False)
class IPAddressBulkImportView(generic.BulkImportView): class IPAddressBulkImportView(generic.BulkImportView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
model_form = forms.IPAddressImportForm model_form = forms.IPAddressImportForm
@register_model_view(IPAddress, 'bulk_edit', path='edit', detail=False)
class IPAddressBulkEditView(generic.BulkEditView): class IPAddressBulkEditView(generic.BulkEditView):
queryset = IPAddress.objects.prefetch_related('vrf__tenant') queryset = IPAddress.objects.prefetch_related('vrf__tenant')
filterset = filtersets.IPAddressFilterSet filterset = filtersets.IPAddressFilterSet
@ -882,6 +933,7 @@ class IPAddressBulkEditView(generic.BulkEditView):
form = forms.IPAddressBulkEditForm form = forms.IPAddressBulkEditForm
@register_model_view(IPAddress, 'bulk_delete', path='delete', detail=False)
class IPAddressBulkDeleteView(generic.BulkDeleteView): class IPAddressBulkDeleteView(generic.BulkDeleteView):
queryset = IPAddress.objects.prefetch_related('vrf__tenant') queryset = IPAddress.objects.prefetch_related('vrf__tenant')
filterset = filtersets.IPAddressFilterSet filterset = filtersets.IPAddressFilterSet
@ -915,6 +967,7 @@ class IPAddressContactsView(ObjectContactsView):
# VLAN groups # VLAN groups
# #
@register_model_view(VLANGroup, 'list', path='', detail=False)
class VLANGroupListView(generic.ObjectListView): class VLANGroupListView(generic.ObjectListView):
queryset = VLANGroup.objects.annotate_utilization() queryset = VLANGroup.objects.annotate_utilization()
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
@ -932,6 +985,7 @@ class VLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(VLANGroup, 'add', detail=False)
@register_model_view(VLANGroup, 'edit') @register_model_view(VLANGroup, 'edit')
class VLANGroupEditView(generic.ObjectEditView): class VLANGroupEditView(generic.ObjectEditView):
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
@ -943,11 +997,13 @@ class VLANGroupDeleteView(generic.ObjectDeleteView):
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
@register_model_view(VLANGroup, 'import', detail=False)
class VLANGroupBulkImportView(generic.BulkImportView): class VLANGroupBulkImportView(generic.BulkImportView):
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
model_form = forms.VLANGroupImportForm model_form = forms.VLANGroupImportForm
@register_model_view(VLANGroup, 'bulk_edit', path='edit', detail=False)
class VLANGroupBulkEditView(generic.BulkEditView): class VLANGroupBulkEditView(generic.BulkEditView):
queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags')
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
@ -955,6 +1011,7 @@ class VLANGroupBulkEditView(generic.BulkEditView):
form = forms.VLANGroupBulkEditForm form = forms.VLANGroupBulkEditForm
@register_model_view(VLANGroup, 'bulk_delete', path='delete', detail=False)
class VLANGroupBulkDeleteView(generic.BulkDeleteView): class VLANGroupBulkDeleteView(generic.BulkDeleteView):
queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags')
filterset = filtersets.VLANGroupFilterSet filterset = filtersets.VLANGroupFilterSet
@ -991,6 +1048,7 @@ class VLANGroupVLANsView(generic.ObjectChildrenView):
# VLAN Translation Policies # VLAN Translation Policies
# #
@register_model_view(VLANTranslationPolicy, 'list', path='', detail=False)
class VLANTranslationPolicyListView(generic.ObjectListView): class VLANTranslationPolicyListView(generic.ObjectListView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
filterset = filtersets.VLANTranslationPolicyFilterSet filterset = filtersets.VLANTranslationPolicyFilterSet
@ -1012,6 +1070,7 @@ class VLANTranslationPolicyView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(VLANTranslationPolicy, 'add', detail=False)
@register_model_view(VLANTranslationPolicy, 'edit') @register_model_view(VLANTranslationPolicy, 'edit')
class VLANTranslationPolicyEditView(generic.ObjectEditView): class VLANTranslationPolicyEditView(generic.ObjectEditView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
@ -1023,11 +1082,13 @@ class VLANTranslationPolicyDeleteView(generic.ObjectDeleteView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
@register_model_view(VLANTranslationPolicy, 'import', detail=False)
class VLANTranslationPolicyBulkImportView(generic.BulkImportView): class VLANTranslationPolicyBulkImportView(generic.BulkImportView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
model_form = forms.VLANTranslationPolicyImportForm model_form = forms.VLANTranslationPolicyImportForm
@register_model_view(VLANTranslationPolicy, 'bulk_edit', path='edit', detail=False)
class VLANTranslationPolicyBulkEditView(generic.BulkEditView): class VLANTranslationPolicyBulkEditView(generic.BulkEditView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
filterset = filtersets.VLANTranslationPolicyFilterSet filterset = filtersets.VLANTranslationPolicyFilterSet
@ -1035,6 +1096,7 @@ class VLANTranslationPolicyBulkEditView(generic.BulkEditView):
form = forms.VLANTranslationPolicyBulkEditForm form = forms.VLANTranslationPolicyBulkEditForm
@register_model_view(VLANTranslationPolicy, 'bulk_delete', path='delete', detail=False)
class VLANTranslationPolicyBulkDeleteView(generic.BulkDeleteView): class VLANTranslationPolicyBulkDeleteView(generic.BulkDeleteView):
queryset = VLANTranslationPolicy.objects.all() queryset = VLANTranslationPolicy.objects.all()
filterset = filtersets.VLANTranslationPolicyFilterSet filterset = filtersets.VLANTranslationPolicyFilterSet
@ -1045,6 +1107,7 @@ class VLANTranslationPolicyBulkDeleteView(generic.BulkDeleteView):
# VLAN Translation Rules # VLAN Translation Rules
# #
@register_model_view(VLANTranslationRule, 'list', path='', detail=False)
class VLANTranslationRuleListView(generic.ObjectListView): class VLANTranslationRuleListView(generic.ObjectListView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
filterset = filtersets.VLANTranslationRuleFilterSet filterset = filtersets.VLANTranslationRuleFilterSet
@ -1062,6 +1125,7 @@ class VLANTranslationRuleView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(VLANTranslationRule, 'add', detail=False)
@register_model_view(VLANTranslationRule, 'edit') @register_model_view(VLANTranslationRule, 'edit')
class VLANTranslationRuleEditView(generic.ObjectEditView): class VLANTranslationRuleEditView(generic.ObjectEditView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
@ -1073,11 +1137,13 @@ class VLANTranslationRuleDeleteView(generic.ObjectDeleteView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
@register_model_view(VLANTranslationRule, 'import', detail=False)
class VLANTranslationRuleBulkImportView(generic.BulkImportView): class VLANTranslationRuleBulkImportView(generic.BulkImportView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
model_form = forms.VLANTranslationRuleImportForm model_form = forms.VLANTranslationRuleImportForm
@register_model_view(VLANTranslationRule, 'bulk_edit', path='edit', detail=False)
class VLANTranslationRuleBulkEditView(generic.BulkEditView): class VLANTranslationRuleBulkEditView(generic.BulkEditView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
filterset = filtersets.VLANTranslationRuleFilterSet filterset = filtersets.VLANTranslationRuleFilterSet
@ -1085,6 +1151,7 @@ class VLANTranslationRuleBulkEditView(generic.BulkEditView):
form = forms.VLANTranslationRuleBulkEditForm form = forms.VLANTranslationRuleBulkEditForm
@register_model_view(VLANTranslationRule, 'bulk_delete', path='delete', detail=False)
class VLANTranslationRuleBulkDeleteView(generic.BulkDeleteView): class VLANTranslationRuleBulkDeleteView(generic.BulkDeleteView):
queryset = VLANTranslationRule.objects.all() queryset = VLANTranslationRule.objects.all()
filterset = filtersets.VLANTranslationRuleFilterSet filterset = filtersets.VLANTranslationRuleFilterSet
@ -1095,6 +1162,7 @@ class VLANTranslationRuleBulkDeleteView(generic.BulkDeleteView):
# FHRP groups # FHRP groups
# #
@register_model_view(FHRPGroup, 'list', path='', detail=False)
class FHRPGroupListView(generic.ObjectListView): class FHRPGroupListView(generic.ObjectListView):
queryset = FHRPGroup.objects.annotate( queryset = FHRPGroup.objects.annotate(
member_count=count_related(FHRPGroupAssignment, 'group') member_count=count_related(FHRPGroupAssignment, 'group')
@ -1122,6 +1190,7 @@ class FHRPGroupView(generic.ObjectView):
} }
@register_model_view(FHRPGroup, 'add', detail=False)
@register_model_view(FHRPGroup, 'edit') @register_model_view(FHRPGroup, 'edit')
class FHRPGroupEditView(generic.ObjectEditView): class FHRPGroupEditView(generic.ObjectEditView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
@ -1149,11 +1218,13 @@ class FHRPGroupDeleteView(generic.ObjectDeleteView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
@register_model_view(FHRPGroup, 'import', detail=False)
class FHRPGroupBulkImportView(generic.BulkImportView): class FHRPGroupBulkImportView(generic.BulkImportView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
model_form = forms.FHRPGroupImportForm model_form = forms.FHRPGroupImportForm
@register_model_view(FHRPGroup, 'bulk_edit', path='edit', detail=False)
class FHRPGroupBulkEditView(generic.BulkEditView): class FHRPGroupBulkEditView(generic.BulkEditView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
filterset = filtersets.FHRPGroupFilterSet filterset = filtersets.FHRPGroupFilterSet
@ -1161,6 +1232,7 @@ class FHRPGroupBulkEditView(generic.BulkEditView):
form = forms.FHRPGroupBulkEditForm form = forms.FHRPGroupBulkEditForm
@register_model_view(FHRPGroup, 'bulk_delete', path='delete', detail=False)
class FHRPGroupBulkDeleteView(generic.BulkDeleteView): class FHRPGroupBulkDeleteView(generic.BulkDeleteView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
filterset = filtersets.FHRPGroupFilterSet filterset = filtersets.FHRPGroupFilterSet
@ -1171,6 +1243,7 @@ class FHRPGroupBulkDeleteView(generic.BulkDeleteView):
# FHRP group assignments # FHRP group assignments
# #
@register_model_view(FHRPGroupAssignment, 'add', detail=False)
@register_model_view(FHRPGroupAssignment, 'edit') @register_model_view(FHRPGroupAssignment, 'edit')
class FHRPGroupAssignmentEditView(generic.ObjectEditView): class FHRPGroupAssignmentEditView(generic.ObjectEditView):
queryset = FHRPGroupAssignment.objects.all() queryset = FHRPGroupAssignment.objects.all()
@ -1199,6 +1272,7 @@ class FHRPGroupAssignmentDeleteView(generic.ObjectDeleteView):
# VLANs # VLANs
# #
@register_model_view(VLAN, 'list', path='', detail=False)
class VLANListView(generic.ObjectListView): class VLANListView(generic.ObjectListView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
filterset = filtersets.VLANFilterSet filterset = filtersets.VLANFilterSet
@ -1257,6 +1331,7 @@ class VLANVMInterfacesView(generic.ObjectChildrenView):
return parent.get_vminterfaces().restrict(request.user, 'view') return parent.get_vminterfaces().restrict(request.user, 'view')
@register_model_view(VLAN, 'add', detail=False)
@register_model_view(VLAN, 'edit') @register_model_view(VLAN, 'edit')
class VLANEditView(generic.ObjectEditView): class VLANEditView(generic.ObjectEditView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
@ -1269,11 +1344,13 @@ class VLANDeleteView(generic.ObjectDeleteView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
@register_model_view(VLAN, 'import', detail=False)
class VLANBulkImportView(generic.BulkImportView): class VLANBulkImportView(generic.BulkImportView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
model_form = forms.VLANImportForm model_form = forms.VLANImportForm
@register_model_view(VLAN, 'bulk_edit', path='edit', detail=False)
class VLANBulkEditView(generic.BulkEditView): class VLANBulkEditView(generic.BulkEditView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
filterset = filtersets.VLANFilterSet filterset = filtersets.VLANFilterSet
@ -1281,6 +1358,7 @@ class VLANBulkEditView(generic.BulkEditView):
form = forms.VLANBulkEditForm form = forms.VLANBulkEditForm
@register_model_view(VLAN, 'bulk_delete', path='delete', detail=False)
class VLANBulkDeleteView(generic.BulkDeleteView): class VLANBulkDeleteView(generic.BulkDeleteView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
filterset = filtersets.VLANFilterSet filterset = filtersets.VLANFilterSet
@ -1291,6 +1369,7 @@ class VLANBulkDeleteView(generic.BulkDeleteView):
# Service templates # Service templates
# #
@register_model_view(ServiceTemplate, 'list', path='', detail=False)
class ServiceTemplateListView(generic.ObjectListView): class ServiceTemplateListView(generic.ObjectListView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
filterset = filtersets.ServiceTemplateFilterSet filterset = filtersets.ServiceTemplateFilterSet
@ -1303,6 +1382,7 @@ class ServiceTemplateView(generic.ObjectView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
@register_model_view(ServiceTemplate, 'add', detail=False)
@register_model_view(ServiceTemplate, 'edit') @register_model_view(ServiceTemplate, 'edit')
class ServiceTemplateEditView(generic.ObjectEditView): class ServiceTemplateEditView(generic.ObjectEditView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
@ -1314,11 +1394,13 @@ class ServiceTemplateDeleteView(generic.ObjectDeleteView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
@register_model_view(ServiceTemplate, 'import', detail=False)
class ServiceTemplateBulkImportView(generic.BulkImportView): class ServiceTemplateBulkImportView(generic.BulkImportView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
model_form = forms.ServiceTemplateImportForm model_form = forms.ServiceTemplateImportForm
@register_model_view(ServiceTemplate, 'bulk_edit', path='edit', detail=False)
class ServiceTemplateBulkEditView(generic.BulkEditView): class ServiceTemplateBulkEditView(generic.BulkEditView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
filterset = filtersets.ServiceTemplateFilterSet filterset = filtersets.ServiceTemplateFilterSet
@ -1326,6 +1408,7 @@ class ServiceTemplateBulkEditView(generic.BulkEditView):
form = forms.ServiceTemplateBulkEditForm form = forms.ServiceTemplateBulkEditForm
@register_model_view(ServiceTemplate, 'bulk_delete', path='delete', detail=False)
class ServiceTemplateBulkDeleteView(generic.BulkDeleteView): class ServiceTemplateBulkDeleteView(generic.BulkDeleteView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
filterset = filtersets.ServiceTemplateFilterSet filterset = filtersets.ServiceTemplateFilterSet
@ -1336,6 +1419,7 @@ class ServiceTemplateBulkDeleteView(generic.BulkDeleteView):
# Services # Services
# #
@register_model_view(Service, 'list', path='', detail=False)
class ServiceListView(generic.ObjectListView): class ServiceListView(generic.ObjectListView):
queryset = Service.objects.prefetch_related('device', 'virtual_machine') queryset = Service.objects.prefetch_related('device', 'virtual_machine')
filterset = filtersets.ServiceFilterSet filterset = filtersets.ServiceFilterSet
@ -1348,6 +1432,7 @@ class ServiceView(generic.ObjectView):
queryset = Service.objects.all() queryset = Service.objects.all()
@register_model_view(Service, 'add', detail=False)
class ServiceCreateView(generic.ObjectEditView): class ServiceCreateView(generic.ObjectEditView):
queryset = Service.objects.all() queryset = Service.objects.all()
form = forms.ServiceCreateForm form = forms.ServiceCreateForm
@ -1364,11 +1449,13 @@ class ServiceDeleteView(generic.ObjectDeleteView):
queryset = Service.objects.all() queryset = Service.objects.all()
@register_model_view(Service, 'import', detail=False)
class ServiceBulkImportView(generic.BulkImportView): class ServiceBulkImportView(generic.BulkImportView):
queryset = Service.objects.all() queryset = Service.objects.all()
model_form = forms.ServiceImportForm model_form = forms.ServiceImportForm
@register_model_view(Service, 'bulk_edit', path='edit', detail=False)
class ServiceBulkEditView(generic.BulkEditView): class ServiceBulkEditView(generic.BulkEditView):
queryset = Service.objects.prefetch_related('device', 'virtual_machine') queryset = Service.objects.prefetch_related('device', 'virtual_machine')
filterset = filtersets.ServiceFilterSet filterset = filtersets.ServiceFilterSet
@ -1376,6 +1463,7 @@ class ServiceBulkEditView(generic.BulkEditView):
form = forms.ServiceBulkEditForm form = forms.ServiceBulkEditForm
@register_model_view(Service, 'bulk_delete', path='delete', detail=False)
class ServiceBulkDeleteView(generic.BulkDeleteView): class ServiceBulkDeleteView(generic.BulkDeleteView):
queryset = Service.objects.prefetch_related('device', 'virtual_machine') queryset = Service.objects.prefetch_related('device', 'virtual_machine')
filterset = filtersets.ServiceFilterSet filterset = filtersets.ServiceFilterSet

View File

@ -1,57 +1,27 @@
from django.urls import include, path from django.urls import include, path
from utilities.urls import get_model_urls from utilities.urls import get_model_urls
from . import views from . import views # noqa F401
app_name = 'tenancy' app_name = 'tenancy'
urlpatterns = [ urlpatterns = [
# Tenant groups path('tenant-groups/', include(get_model_urls('tenancy', 'tenantgroup', detail=False))),
path('tenant-groups/', views.TenantGroupListView.as_view(), name='tenantgroup_list'),
path('tenant-groups/add/', views.TenantGroupEditView.as_view(), name='tenantgroup_add'),
path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'),
path('tenant-groups/edit/', views.TenantGroupBulkEditView.as_view(), name='tenantgroup_bulk_edit'),
path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'),
path('tenant-groups/<int:pk>/', include(get_model_urls('tenancy', 'tenantgroup'))), path('tenant-groups/<int:pk>/', include(get_model_urls('tenancy', 'tenantgroup'))),
# Tenants path('tenants/', include(get_model_urls('tenancy', 'tenant', detail=False))),
path('tenants/', views.TenantListView.as_view(), name='tenant_list'),
path('tenants/add/', views.TenantEditView.as_view(), name='tenant_add'),
path('tenants/import/', views.TenantBulkImportView.as_view(), name='tenant_import'),
path('tenants/edit/', views.TenantBulkEditView.as_view(), name='tenant_bulk_edit'),
path('tenants/delete/', views.TenantBulkDeleteView.as_view(), name='tenant_bulk_delete'),
path('tenants/<int:pk>/', include(get_model_urls('tenancy', 'tenant'))), path('tenants/<int:pk>/', include(get_model_urls('tenancy', 'tenant'))),
# Contact groups path('contact-groups/', include(get_model_urls('tenancy', 'contactgroup', detail=False))),
path('contact-groups/', views.ContactGroupListView.as_view(), name='contactgroup_list'),
path('contact-groups/add/', views.ContactGroupEditView.as_view(), name='contactgroup_add'),
path('contact-groups/import/', views.ContactGroupBulkImportView.as_view(), name='contactgroup_import'),
path('contact-groups/edit/', views.ContactGroupBulkEditView.as_view(), name='contactgroup_bulk_edit'),
path('contact-groups/delete/', views.ContactGroupBulkDeleteView.as_view(), name='contactgroup_bulk_delete'),
path('contact-groups/<int:pk>/', include(get_model_urls('tenancy', 'contactgroup'))), path('contact-groups/<int:pk>/', include(get_model_urls('tenancy', 'contactgroup'))),
# Contact roles path('contact-roles/', include(get_model_urls('tenancy', 'contactrole', detail=False))),
path('contact-roles/', views.ContactRoleListView.as_view(), name='contactrole_list'),
path('contact-roles/add/', views.ContactRoleEditView.as_view(), name='contactrole_add'),
path('contact-roles/import/', views.ContactRoleBulkImportView.as_view(), name='contactrole_import'),
path('contact-roles/edit/', views.ContactRoleBulkEditView.as_view(), name='contactrole_bulk_edit'),
path('contact-roles/delete/', views.ContactRoleBulkDeleteView.as_view(), name='contactrole_bulk_delete'),
path('contact-roles/<int:pk>/', include(get_model_urls('tenancy', 'contactrole'))), path('contact-roles/<int:pk>/', include(get_model_urls('tenancy', 'contactrole'))),
# Contacts path('contacts/', include(get_model_urls('tenancy', 'contact', detail=False))),
path('contacts/', views.ContactListView.as_view(), name='contact_list'),
path('contacts/add/', views.ContactEditView.as_view(), name='contact_add'),
path('contacts/import/', views.ContactBulkImportView.as_view(), name='contact_import'),
path('contacts/edit/', views.ContactBulkEditView.as_view(), name='contact_bulk_edit'),
path('contacts/delete/', views.ContactBulkDeleteView.as_view(), name='contact_bulk_delete'),
path('contacts/<int:pk>/', include(get_model_urls('tenancy', 'contact'))), path('contacts/<int:pk>/', include(get_model_urls('tenancy', 'contact'))),
# Contact assignments path('contact-assignments/', include(get_model_urls('tenancy', 'contactassignment', detail=False))),
path('contact-assignments/', views.ContactAssignmentListView.as_view(), name='contactassignment_list'),
path('contact-assignments/add/', views.ContactAssignmentEditView.as_view(), name='contactassignment_add'),
path('contact-assignments/import/', views.ContactAssignmentBulkImportView.as_view(), name='contactassignment_import'),
path('contact-assignments/edit/', views.ContactAssignmentBulkEditView.as_view(), name='contactassignment_bulk_edit'),
path('contact-assignments/delete/', views.ContactAssignmentBulkDeleteView.as_view(), name='contactassignment_bulk_delete'),
path('contact-assignments/<int:pk>/', include(get_model_urls('tenancy', 'contactassignment'))), path('contact-assignments/<int:pk>/', include(get_model_urls('tenancy', 'contactassignment'))),
] ]

View File

@ -37,11 +37,12 @@ class ObjectContactsView(generic.ObjectChildrenView):
return table return table
# #
# Tenant groups # Tenant groups
# #
@register_model_view(TenantGroup, 'list', path='', detail=False)
class TenantGroupListView(generic.ObjectListView): class TenantGroupListView(generic.ObjectListView):
queryset = TenantGroup.objects.add_related_count( queryset = TenantGroup.objects.add_related_count(
TenantGroup.objects.all(), TenantGroup.objects.all(),
@ -67,6 +68,7 @@ class TenantGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(TenantGroup, 'add', detail=False)
@register_model_view(TenantGroup, 'edit') @register_model_view(TenantGroup, 'edit')
class TenantGroupEditView(generic.ObjectEditView): class TenantGroupEditView(generic.ObjectEditView):
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
@ -78,11 +80,13 @@ class TenantGroupDeleteView(generic.ObjectDeleteView):
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
@register_model_view(TenantGroup, 'import', detail=False)
class TenantGroupBulkImportView(generic.BulkImportView): class TenantGroupBulkImportView(generic.BulkImportView):
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
model_form = forms.TenantGroupImportForm model_form = forms.TenantGroupImportForm
@register_model_view(TenantGroup, 'bulk_edit', path='edit', detail=False)
class TenantGroupBulkEditView(generic.BulkEditView): class TenantGroupBulkEditView(generic.BulkEditView):
queryset = TenantGroup.objects.add_related_count( queryset = TenantGroup.objects.add_related_count(
TenantGroup.objects.all(), TenantGroup.objects.all(),
@ -96,6 +100,7 @@ class TenantGroupBulkEditView(generic.BulkEditView):
form = forms.TenantGroupBulkEditForm form = forms.TenantGroupBulkEditForm
@register_model_view(TenantGroup, 'bulk_delete', path='delete', detail=False)
class TenantGroupBulkDeleteView(generic.BulkDeleteView): class TenantGroupBulkDeleteView(generic.BulkDeleteView):
queryset = TenantGroup.objects.add_related_count( queryset = TenantGroup.objects.add_related_count(
TenantGroup.objects.all(), TenantGroup.objects.all(),
@ -112,6 +117,7 @@ class TenantGroupBulkDeleteView(generic.BulkDeleteView):
# Tenants # Tenants
# #
@register_model_view(Tenant, 'list', path='', detail=False)
class TenantListView(generic.ObjectListView): class TenantListView(generic.ObjectListView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
filterset = filtersets.TenantFilterSet filterset = filtersets.TenantFilterSet
@ -129,6 +135,7 @@ class TenantView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(Tenant, 'add', detail=False)
@register_model_view(Tenant, 'edit') @register_model_view(Tenant, 'edit')
class TenantEditView(generic.ObjectEditView): class TenantEditView(generic.ObjectEditView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
@ -140,11 +147,13 @@ class TenantDeleteView(generic.ObjectDeleteView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
@register_model_view(Tenant, 'import', detail=False)
class TenantBulkImportView(generic.BulkImportView): class TenantBulkImportView(generic.BulkImportView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
model_form = forms.TenantImportForm model_form = forms.TenantImportForm
@register_model_view(Tenant, 'bulk_edit', path='edit', detail=False)
class TenantBulkEditView(generic.BulkEditView): class TenantBulkEditView(generic.BulkEditView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
filterset = filtersets.TenantFilterSet filterset = filtersets.TenantFilterSet
@ -152,6 +161,7 @@ class TenantBulkEditView(generic.BulkEditView):
form = forms.TenantBulkEditForm form = forms.TenantBulkEditForm
@register_model_view(Tenant, 'bulk_delete', path='delete', detail=False)
class TenantBulkDeleteView(generic.BulkDeleteView): class TenantBulkDeleteView(generic.BulkDeleteView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
filterset = filtersets.TenantFilterSet filterset = filtersets.TenantFilterSet
@ -167,6 +177,7 @@ class TenantContactsView(ObjectContactsView):
# Contact groups # Contact groups
# #
@register_model_view(ContactGroup, 'list', path='', detail=False)
class ContactGroupListView(generic.ObjectListView): class ContactGroupListView(generic.ObjectListView):
queryset = ContactGroup.objects.add_related_count( queryset = ContactGroup.objects.add_related_count(
ContactGroup.objects.all(), ContactGroup.objects.all(),
@ -192,6 +203,7 @@ class ContactGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ContactGroup, 'add', detail=False)
@register_model_view(ContactGroup, 'edit') @register_model_view(ContactGroup, 'edit')
class ContactGroupEditView(generic.ObjectEditView): class ContactGroupEditView(generic.ObjectEditView):
queryset = ContactGroup.objects.all() queryset = ContactGroup.objects.all()
@ -203,11 +215,13 @@ class ContactGroupDeleteView(generic.ObjectDeleteView):
queryset = ContactGroup.objects.all() queryset = ContactGroup.objects.all()
@register_model_view(ContactGroup, 'import', detail=False)
class ContactGroupBulkImportView(generic.BulkImportView): class ContactGroupBulkImportView(generic.BulkImportView):
queryset = ContactGroup.objects.all() queryset = ContactGroup.objects.all()
model_form = forms.ContactGroupImportForm model_form = forms.ContactGroupImportForm
@register_model_view(ContactGroup, 'bulk_edit', path='edit', detail=False)
class ContactGroupBulkEditView(generic.BulkEditView): class ContactGroupBulkEditView(generic.BulkEditView):
queryset = ContactGroup.objects.add_related_count( queryset = ContactGroup.objects.add_related_count(
ContactGroup.objects.all(), ContactGroup.objects.all(),
@ -221,6 +235,7 @@ class ContactGroupBulkEditView(generic.BulkEditView):
form = forms.ContactGroupBulkEditForm form = forms.ContactGroupBulkEditForm
@register_model_view(ContactGroup, 'bulk_delete', path='delete', detail=False)
class ContactGroupBulkDeleteView(generic.BulkDeleteView): class ContactGroupBulkDeleteView(generic.BulkDeleteView):
queryset = ContactGroup.objects.add_related_count( queryset = ContactGroup.objects.add_related_count(
ContactGroup.objects.all(), ContactGroup.objects.all(),
@ -237,6 +252,7 @@ class ContactGroupBulkDeleteView(generic.BulkDeleteView):
# Contact roles # Contact roles
# #
@register_model_view(ContactRole, 'list', path='', detail=False)
class ContactRoleListView(generic.ObjectListView): class ContactRoleListView(generic.ObjectListView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
filterset = filtersets.ContactRoleFilterSet filterset = filtersets.ContactRoleFilterSet
@ -254,6 +270,7 @@ class ContactRoleView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ContactRole, 'add', detail=False)
@register_model_view(ContactRole, 'edit') @register_model_view(ContactRole, 'edit')
class ContactRoleEditView(generic.ObjectEditView): class ContactRoleEditView(generic.ObjectEditView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
@ -265,11 +282,13 @@ class ContactRoleDeleteView(generic.ObjectDeleteView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
@register_model_view(ContactRole, 'import', detail=False)
class ContactRoleBulkImportView(generic.BulkImportView): class ContactRoleBulkImportView(generic.BulkImportView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
model_form = forms.ContactRoleImportForm model_form = forms.ContactRoleImportForm
@register_model_view(ContactRole, 'bulk_edit', path='edit', detail=False)
class ContactRoleBulkEditView(generic.BulkEditView): class ContactRoleBulkEditView(generic.BulkEditView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
filterset = filtersets.ContactRoleFilterSet filterset = filtersets.ContactRoleFilterSet
@ -277,6 +296,7 @@ class ContactRoleBulkEditView(generic.BulkEditView):
form = forms.ContactRoleBulkEditForm form = forms.ContactRoleBulkEditForm
@register_model_view(ContactRole, 'bulk_delete', path='delete', detail=False)
class ContactRoleBulkDeleteView(generic.BulkDeleteView): class ContactRoleBulkDeleteView(generic.BulkDeleteView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
filterset = filtersets.ContactRoleFilterSet filterset = filtersets.ContactRoleFilterSet
@ -287,6 +307,7 @@ class ContactRoleBulkDeleteView(generic.BulkDeleteView):
# Contacts # Contacts
# #
@register_model_view(Contact, 'list', path='', detail=False)
class ContactListView(generic.ObjectListView): class ContactListView(generic.ObjectListView):
queryset = Contact.objects.annotate( queryset = Contact.objects.annotate(
assignment_count=count_related(ContactAssignment, 'contact') assignment_count=count_related(ContactAssignment, 'contact')
@ -301,6 +322,7 @@ class ContactView(generic.ObjectView):
queryset = Contact.objects.all() queryset = Contact.objects.all()
@register_model_view(Contact, 'add', detail=False)
@register_model_view(Contact, 'edit') @register_model_view(Contact, 'edit')
class ContactEditView(generic.ObjectEditView): class ContactEditView(generic.ObjectEditView):
queryset = Contact.objects.all() queryset = Contact.objects.all()
@ -312,11 +334,13 @@ class ContactDeleteView(generic.ObjectDeleteView):
queryset = Contact.objects.all() queryset = Contact.objects.all()
@register_model_view(Contact, 'import', detail=False)
class ContactBulkImportView(generic.BulkImportView): class ContactBulkImportView(generic.BulkImportView):
queryset = Contact.objects.all() queryset = Contact.objects.all()
model_form = forms.ContactImportForm model_form = forms.ContactImportForm
@register_model_view(Contact, 'bulk_edit', path='edit', detail=False)
class ContactBulkEditView(generic.BulkEditView): class ContactBulkEditView(generic.BulkEditView):
queryset = Contact.objects.annotate( queryset = Contact.objects.annotate(
assignment_count=count_related(ContactAssignment, 'contact') assignment_count=count_related(ContactAssignment, 'contact')
@ -326,6 +350,7 @@ class ContactBulkEditView(generic.BulkEditView):
form = forms.ContactBulkEditForm form = forms.ContactBulkEditForm
@register_model_view(Contact, 'bulk_delete', path='delete', detail=False)
class ContactBulkDeleteView(generic.BulkDeleteView): class ContactBulkDeleteView(generic.BulkDeleteView):
queryset = Contact.objects.annotate( queryset = Contact.objects.annotate(
assignment_count=count_related(ContactAssignment, 'contact') assignment_count=count_related(ContactAssignment, 'contact')
@ -333,11 +358,12 @@ class ContactBulkDeleteView(generic.BulkDeleteView):
filterset = filtersets.ContactFilterSet filterset = filtersets.ContactFilterSet
table = tables.ContactTable table = tables.ContactTable
# #
# Contact assignments # Contact assignments
# #
@register_model_view(ContactAssignment, 'list', path='', detail=False)
class ContactAssignmentListView(generic.ObjectListView): class ContactAssignmentListView(generic.ObjectListView):
queryset = ContactAssignment.objects.all() queryset = ContactAssignment.objects.all()
filterset = filtersets.ContactAssignmentFilterSet filterset = filtersets.ContactAssignmentFilterSet
@ -351,6 +377,7 @@ class ContactAssignmentListView(generic.ObjectListView):
} }
@register_model_view(ContactAssignment, 'add', detail=False)
@register_model_view(ContactAssignment, 'edit') @register_model_view(ContactAssignment, 'edit')
class ContactAssignmentEditView(generic.ObjectEditView): class ContactAssignmentEditView(generic.ObjectEditView):
queryset = ContactAssignment.objects.all() queryset = ContactAssignment.objects.all()
@ -370,6 +397,13 @@ class ContactAssignmentEditView(generic.ObjectEditView):
} }
@register_model_view(ContactAssignment, 'import', detail=False)
class ContactAssignmentBulkImportView(generic.BulkImportView):
queryset = ContactAssignment.objects.all()
model_form = forms.ContactAssignmentImportForm
@register_model_view(ContactAssignment, 'bulk_edit', path='edit', detail=False)
class ContactAssignmentBulkEditView(generic.BulkEditView): class ContactAssignmentBulkEditView(generic.BulkEditView):
queryset = ContactAssignment.objects.all() queryset = ContactAssignment.objects.all()
filterset = filtersets.ContactAssignmentFilterSet filterset = filtersets.ContactAssignmentFilterSet
@ -377,11 +411,7 @@ class ContactAssignmentBulkEditView(generic.BulkEditView):
form = forms.ContactAssignmentBulkEditForm form = forms.ContactAssignmentBulkEditForm
class ContactAssignmentBulkImportView(generic.BulkImportView): @register_model_view(ContactAssignment, 'bulk_delete', path='delete', detail=False)
queryset = ContactAssignment.objects.all()
model_form = forms.ContactAssignmentImportForm
class ContactAssignmentBulkDeleteView(generic.BulkDeleteView): class ContactAssignmentBulkDeleteView(generic.BulkDeleteView):
queryset = ContactAssignment.objects.all() queryset = ContactAssignment.objects.all()
filterset = filtersets.ContactAssignmentFilterSet filterset = filtersets.ContactAssignmentFilterSet

View File

@ -1,40 +1,21 @@
from django.urls import include, path from django.urls import include, path
from utilities.urls import get_model_urls from utilities.urls import get_model_urls
from . import views from . import views # noqa F401
app_name = 'users' app_name = 'users'
urlpatterns = [ urlpatterns = [
# Tokens path('tokens/', include(get_model_urls('users', 'token', detail=False))),
path('tokens/', views.TokenListView.as_view(), name='token_list'),
path('tokens/add/', views.TokenEditView.as_view(), name='token_add'),
path('tokens/import/', views.TokenBulkImportView.as_view(), name='token_import'),
path('tokens/edit/', views.TokenBulkEditView.as_view(), name='token_bulk_edit'),
path('tokens/delete/', views.TokenBulkDeleteView.as_view(), name='token_bulk_delete'),
path('tokens/<int:pk>/', include(get_model_urls('users', 'token'))), path('tokens/<int:pk>/', include(get_model_urls('users', 'token'))),
# Users path('users/', include(get_model_urls('users', 'user', detail=False))),
path('users/', views.UserListView.as_view(), name='user_list'),
path('users/add/', views.UserEditView.as_view(), name='user_add'),
path('users/edit/', views.UserBulkEditView.as_view(), name='user_bulk_edit'),
path('users/import/', views.UserBulkImportView.as_view(), name='user_import'),
path('users/delete/', views.UserBulkDeleteView.as_view(), name='user_bulk_delete'),
path('users/<int:pk>/', include(get_model_urls('users', 'user'))), path('users/<int:pk>/', include(get_model_urls('users', 'user'))),
# Groups path('groups/', include(get_model_urls('users', 'group', detail=False))),
path('groups/', views.GroupListView.as_view(), name='group_list'),
path('groups/add/', views.GroupEditView.as_view(), name='group_add'),
path('groups/edit/', views.GroupBulkEditView.as_view(), name='group_bulk_edit'),
path('groups/import/', views.GroupBulkImportView.as_view(), name='group_import'),
path('groups/delete/', views.GroupBulkDeleteView.as_view(), name='group_bulk_delete'),
path('groups/<int:pk>/', include(get_model_urls('users', 'group'))), path('groups/<int:pk>/', include(get_model_urls('users', 'group'))),
# Permissions path('permissions/', include(get_model_urls('users', 'objectpermission', detail=False))),
path('permissions/', views.ObjectPermissionListView.as_view(), name='objectpermission_list'),
path('permissions/add/', views.ObjectPermissionEditView.as_view(), name='objectpermission_add'),
path('permissions/edit/', views.ObjectPermissionBulkEditView.as_view(), name='objectpermission_bulk_edit'),
path('permissions/delete/', views.ObjectPermissionBulkDeleteView.as_view(), name='objectpermission_bulk_delete'),
path('permissions/<int:pk>/', include(get_model_urls('users', 'objectpermission'))), path('permissions/<int:pk>/', include(get_model_urls('users', 'objectpermission'))),
] ]

View File

@ -12,6 +12,7 @@ from .models import Group, User, ObjectPermission, Token
# Tokens # Tokens
# #
@register_model_view(Token, 'list', path='', detail=False)
class TokenListView(generic.ObjectListView): class TokenListView(generic.ObjectListView):
queryset = Token.objects.all() queryset = Token.objects.all()
filterset = filtersets.TokenFilterSet filterset = filtersets.TokenFilterSet
@ -24,6 +25,7 @@ class TokenView(generic.ObjectView):
queryset = Token.objects.all() queryset = Token.objects.all()
@register_model_view(Token, 'add', detail=False)
@register_model_view(Token, 'edit') @register_model_view(Token, 'edit')
class TokenEditView(generic.ObjectEditView): class TokenEditView(generic.ObjectEditView):
queryset = Token.objects.all() queryset = Token.objects.all()
@ -36,17 +38,20 @@ class TokenDeleteView(generic.ObjectDeleteView):
queryset = Token.objects.all() queryset = Token.objects.all()
@register_model_view(Token, 'import', detail=False)
class TokenBulkImportView(generic.BulkImportView): class TokenBulkImportView(generic.BulkImportView):
queryset = Token.objects.all() queryset = Token.objects.all()
model_form = forms.TokenImportForm model_form = forms.TokenImportForm
@register_model_view(Token, 'bulk_edit', path='edit', detail=False)
class TokenBulkEditView(generic.BulkEditView): class TokenBulkEditView(generic.BulkEditView):
queryset = Token.objects.all() queryset = Token.objects.all()
table = tables.TokenTable table = tables.TokenTable
form = forms.TokenBulkEditForm form = forms.TokenBulkEditForm
@register_model_view(Token, 'bulk_delete', path='delete', detail=False)
class TokenBulkDeleteView(generic.BulkDeleteView): class TokenBulkDeleteView(generic.BulkDeleteView):
queryset = Token.objects.all() queryset = Token.objects.all()
table = tables.TokenTable table = tables.TokenTable
@ -56,6 +61,7 @@ class TokenBulkDeleteView(generic.BulkDeleteView):
# Users # Users
# #
@register_model_view(User, 'list', path='', detail=False)
class UserListView(generic.ObjectListView): class UserListView(generic.ObjectListView):
queryset = User.objects.all() queryset = User.objects.all()
filterset = filtersets.UserFilterSet filterset = filtersets.UserFilterSet
@ -77,6 +83,7 @@ class UserView(generic.ObjectView):
} }
@register_model_view(User, 'add', detail=False)
@register_model_view(User, 'edit') @register_model_view(User, 'edit')
class UserEditView(generic.ObjectEditView): class UserEditView(generic.ObjectEditView):
queryset = User.objects.all() queryset = User.objects.all()
@ -88,6 +95,13 @@ class UserDeleteView(generic.ObjectDeleteView):
queryset = User.objects.all() queryset = User.objects.all()
@register_model_view(User, 'import', detail=False)
class UserBulkImportView(generic.BulkImportView):
queryset = User.objects.all()
model_form = forms.UserImportForm
@register_model_view(User, 'bulk_edit', path='edit', detail=False)
class UserBulkEditView(generic.BulkEditView): class UserBulkEditView(generic.BulkEditView):
queryset = User.objects.all() queryset = User.objects.all()
filterset = filtersets.UserFilterSet filterset = filtersets.UserFilterSet
@ -95,11 +109,7 @@ class UserBulkEditView(generic.BulkEditView):
form = forms.UserBulkEditForm form = forms.UserBulkEditForm
class UserBulkImportView(generic.BulkImportView): @register_model_view(User, 'bulk_delete', path='delete', detail=False)
queryset = User.objects.all()
model_form = forms.UserImportForm
class UserBulkDeleteView(generic.BulkDeleteView): class UserBulkDeleteView(generic.BulkDeleteView):
queryset = User.objects.all() queryset = User.objects.all()
filterset = filtersets.UserFilterSet filterset = filtersets.UserFilterSet
@ -110,6 +120,7 @@ class UserBulkDeleteView(generic.BulkDeleteView):
# Groups # Groups
# #
@register_model_view(Group, 'list', path='', detail=False)
class GroupListView(generic.ObjectListView): class GroupListView(generic.ObjectListView):
queryset = Group.objects.annotate(users_count=Count('user')).order_by('name') queryset = Group.objects.annotate(users_count=Count('user')).order_by('name')
filterset = filtersets.GroupFilterSet filterset = filtersets.GroupFilterSet
@ -123,6 +134,7 @@ class GroupView(generic.ObjectView):
template_name = 'users/group.html' template_name = 'users/group.html'
@register_model_view(Group, 'add', detail=False)
@register_model_view(Group, 'edit') @register_model_view(Group, 'edit')
class GroupEditView(generic.ObjectEditView): class GroupEditView(generic.ObjectEditView):
queryset = Group.objects.all() queryset = Group.objects.all()
@ -134,11 +146,13 @@ class GroupDeleteView(generic.ObjectDeleteView):
queryset = Group.objects.all() queryset = Group.objects.all()
@register_model_view(Group, 'import', detail=False)
class GroupBulkImportView(generic.BulkImportView): class GroupBulkImportView(generic.BulkImportView):
queryset = Group.objects.all() queryset = Group.objects.all()
model_form = forms.GroupImportForm model_form = forms.GroupImportForm
@register_model_view(Group, 'bulk_edit', path='edit', detail=False)
class GroupBulkEditView(generic.BulkEditView): class GroupBulkEditView(generic.BulkEditView):
queryset = Group.objects.all() queryset = Group.objects.all()
filterset = filtersets.GroupFilterSet filterset = filtersets.GroupFilterSet
@ -146,6 +160,7 @@ class GroupBulkEditView(generic.BulkEditView):
form = forms.GroupBulkEditForm form = forms.GroupBulkEditForm
@register_model_view(Group, 'bulk_delete', path='delete', detail=False)
class GroupBulkDeleteView(generic.BulkDeleteView): class GroupBulkDeleteView(generic.BulkDeleteView):
queryset = Group.objects.annotate(users_count=Count('user')).order_by('name') queryset = Group.objects.annotate(users_count=Count('user')).order_by('name')
filterset = filtersets.GroupFilterSet filterset = filtersets.GroupFilterSet
@ -156,6 +171,7 @@ class GroupBulkDeleteView(generic.BulkDeleteView):
# ObjectPermissions # ObjectPermissions
# #
@register_model_view(ObjectPermission, 'list', path='', detail=False)
class ObjectPermissionListView(generic.ObjectListView): class ObjectPermissionListView(generic.ObjectListView):
queryset = ObjectPermission.objects.all() queryset = ObjectPermission.objects.all()
filterset = filtersets.ObjectPermissionFilterSet filterset = filtersets.ObjectPermissionFilterSet
@ -169,6 +185,7 @@ class ObjectPermissionView(generic.ObjectView):
template_name = 'users/objectpermission.html' template_name = 'users/objectpermission.html'
@register_model_view(ObjectPermission, 'add', detail=False)
@register_model_view(ObjectPermission, 'edit') @register_model_view(ObjectPermission, 'edit')
class ObjectPermissionEditView(generic.ObjectEditView): class ObjectPermissionEditView(generic.ObjectEditView):
queryset = ObjectPermission.objects.all() queryset = ObjectPermission.objects.all()
@ -180,6 +197,7 @@ class ObjectPermissionDeleteView(generic.ObjectDeleteView):
queryset = ObjectPermission.objects.all() queryset = ObjectPermission.objects.all()
@register_model_view(ObjectPermission, 'bulk_edit', path='edit', detail=False)
class ObjectPermissionBulkEditView(generic.BulkEditView): class ObjectPermissionBulkEditView(generic.BulkEditView):
queryset = ObjectPermission.objects.all() queryset = ObjectPermission.objects.all()
filterset = filtersets.ObjectPermissionFilterSet filterset = filtersets.ObjectPermissionFilterSet
@ -187,6 +205,7 @@ class ObjectPermissionBulkEditView(generic.BulkEditView):
form = forms.ObjectPermissionBulkEditForm form = forms.ObjectPermissionBulkEditForm
@register_model_view(ObjectPermission, 'bulk_delete', path='delete', detail=False)
class ObjectPermissionBulkDeleteView(generic.BulkDeleteView): class ObjectPermissionBulkDeleteView(generic.BulkDeleteView):
queryset = ObjectPermission.objects.all() queryset = ObjectPermission.objects.all()
filterset = filtersets.ObjectPermissionFilterSet filterset = filtersets.ObjectPermissionFilterSet

View File

@ -9,22 +9,27 @@ __all__ = (
) )
def get_model_urls(app_label, model_name): def get_model_urls(app_label, model_name, detail=True):
""" """
Return a list of URL paths for detail views registered to the given model. Return a list of URL paths for detail views registered to the given model.
Args: Args:
app_label: App/plugin name app_label: App/plugin name
model_name: Model name model_name: Model name
detail: If True (default), return only URL views for an individual object.
Otherwise, return only list views.
""" """
paths = [] paths = []
# Retrieve registered views for this model # Retrieve registered views for this model
try: try:
views = registry['views'][app_label][model_name] views = [
view for view in registry['views'][app_label][model_name]
if view['detail'] == detail
]
except KeyError: except KeyError:
# No views have been registered for this model # No views have been registered for this model
views = [] return []
for config in views: for config in views:
# Import the view class or function # Import the view class or function

View File

@ -272,7 +272,7 @@ def get_viewname(model, action=None, rest_api=False):
return viewname return viewname
def register_model_view(model, name='', path=None, kwargs=None): def register_model_view(model, name='', path=None, detail=True, kwargs=None):
""" """
This decorator can be used to "attach" a view to any model in NetBox. This is typically used to inject This decorator can be used to "attach" a view to any model in NetBox. This is typically used to inject
additional tabs within a model's detail view. For example, to add a custom tab to NetBox's dcim.Site model: additional tabs within a model's detail view. For example, to add a custom tab to NetBox's dcim.Site model:
@ -289,6 +289,7 @@ def register_model_view(model, name='', path=None, kwargs=None):
name: The string used to form the view's name for URL resolution (e.g. via `reverse()`). This will be appended name: The string used to form the view's name for URL resolution (e.g. via `reverse()`). This will be appended
to the name of the base view for the model using an underscore. If blank, the model name will be used. to the name of the base view for the model using an underscore. If blank, the model name will be used.
path: The URL path by which the view can be reached (optional). If not provided, `name` will be used. path: The URL path by which the view can be reached (optional). If not provided, `name` will be used.
detail: True if the path applied to an individual object; False if it attaches to the base (list) path.
kwargs: A dictionary of keyword arguments for the view to include when registering its URL path (optional). kwargs: A dictionary of keyword arguments for the view to include when registering its URL path (optional).
""" """
def _wrapper(cls): def _wrapper(cls):
@ -301,7 +302,8 @@ def register_model_view(model, name='', path=None, kwargs=None):
registry['views'][app_label][model_name].append({ registry['views'][app_label][model_name].append({
'name': name, 'name': name,
'view': cls, 'view': cls,
'path': path or name, 'path': path if path is not None else name,
'detail': detail,
'kwargs': kwargs or {}, 'kwargs': kwargs or {},
}) })

View File

@ -6,57 +6,33 @@ from . import views
app_name = 'virtualization' app_name = 'virtualization'
urlpatterns = [ urlpatterns = [
# Cluster types path('cluster-types/', include(get_model_urls('virtualization', 'clustertype', detail=False))),
path('cluster-types/', views.ClusterTypeListView.as_view(), name='clustertype_list'),
path('cluster-types/add/', views.ClusterTypeEditView.as_view(), name='clustertype_add'),
path('cluster-types/import/', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'),
path('cluster-types/edit/', views.ClusterTypeBulkEditView.as_view(), name='clustertype_bulk_edit'),
path('cluster-types/delete/', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'),
path('cluster-types/<int:pk>/', include(get_model_urls('virtualization', 'clustertype'))), path('cluster-types/<int:pk>/', include(get_model_urls('virtualization', 'clustertype'))),
# Cluster groups path('cluster-groups/', include(get_model_urls('virtualization', 'clustergroup', detail=False))),
path('cluster-groups/', views.ClusterGroupListView.as_view(), name='clustergroup_list'),
path('cluster-groups/add/', views.ClusterGroupEditView.as_view(), name='clustergroup_add'),
path('cluster-groups/import/', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'),
path('cluster-groups/edit/', views.ClusterGroupBulkEditView.as_view(), name='clustergroup_bulk_edit'),
path('cluster-groups/delete/', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'),
path('cluster-groups/<int:pk>/', include(get_model_urls('virtualization', 'clustergroup'))), path('cluster-groups/<int:pk>/', include(get_model_urls('virtualization', 'clustergroup'))),
# Clusters path('clusters/', include(get_model_urls('virtualization', 'cluster', detail=False))),
path('clusters/', views.ClusterListView.as_view(), name='cluster_list'),
path('clusters/add/', views.ClusterEditView.as_view(), name='cluster_add'),
path('clusters/import/', views.ClusterBulkImportView.as_view(), name='cluster_import'),
path('clusters/edit/', views.ClusterBulkEditView.as_view(), name='cluster_bulk_edit'),
path('clusters/delete/', views.ClusterBulkDeleteView.as_view(), name='cluster_bulk_delete'),
path('clusters/<int:pk>/', include(get_model_urls('virtualization', 'cluster'))), path('clusters/<int:pk>/', include(get_model_urls('virtualization', 'cluster'))),
# Virtual machines path('virtual-machines/', include(get_model_urls('virtualization', 'virtualmachine', detail=False))),
path('virtual-machines/', views.VirtualMachineListView.as_view(), name='virtualmachine_list'),
path('virtual-machines/add/', views.VirtualMachineEditView.as_view(), name='virtualmachine_add'),
path('virtual-machines/import/', views.VirtualMachineBulkImportView.as_view(), name='virtualmachine_import'),
path('virtual-machines/edit/', views.VirtualMachineBulkEditView.as_view(), name='virtualmachine_bulk_edit'),
path('virtual-machines/delete/', views.VirtualMachineBulkDeleteView.as_view(), name='virtualmachine_bulk_delete'),
path('virtual-machines/<int:pk>/', include(get_model_urls('virtualization', 'virtualmachine'))), path('virtual-machines/<int:pk>/', include(get_model_urls('virtualization', 'virtualmachine'))),
# VM interfaces path('interfaces/', include(get_model_urls('virtualization', 'vminterface', detail=False))),
path('interfaces/', views.VMInterfaceListView.as_view(), name='vminterface_list'),
path('interfaces/add/', views.VMInterfaceCreateView.as_view(), name='vminterface_add'),
path('interfaces/import/', views.VMInterfaceBulkImportView.as_view(), name='vminterface_import'),
path('interfaces/edit/', views.VMInterfaceBulkEditView.as_view(), name='vminterface_bulk_edit'),
path('interfaces/rename/', views.VMInterfaceBulkRenameView.as_view(), name='vminterface_bulk_rename'),
path('interfaces/delete/', views.VMInterfaceBulkDeleteView.as_view(), name='vminterface_bulk_delete'),
path('interfaces/<int:pk>/', include(get_model_urls('virtualization', 'vminterface'))), path('interfaces/<int:pk>/', include(get_model_urls('virtualization', 'vminterface'))),
path('virtual-machines/interfaces/add/', views.VirtualMachineBulkAddInterfaceView.as_view(), name='virtualmachine_bulk_add_vminterface'), path(
'virtual-machines/interfaces/add/',
views.VirtualMachineBulkAddInterfaceView.as_view(),
name='virtualmachine_bulk_add_vminterface'
),
# Virtual disks path('virtual-disks/', include(get_model_urls('virtualization', 'virtualdisk', detail=False))),
path('virtual-disks/', views.VirtualDiskListView.as_view(), name='virtualdisk_list'),
path('virtual-disks/add/', views.VirtualDiskCreateView.as_view(), name='virtualdisk_add'),
path('virtual-disks/import/', views.VirtualDiskBulkImportView.as_view(), name='virtualdisk_import'),
path('virtual-disks/edit/', views.VirtualDiskBulkEditView.as_view(), name='virtualdisk_bulk_edit'),
path('virtual-disks/rename/', views.VirtualDiskBulkRenameView.as_view(), name='virtualdisk_bulk_rename'),
path('virtual-disks/delete/', views.VirtualDiskBulkDeleteView.as_view(), name='virtualdisk_bulk_delete'),
path('virtual-disks/<int:pk>/', include(get_model_urls('virtualization', 'virtualdisk'))), path('virtual-disks/<int:pk>/', include(get_model_urls('virtualization', 'virtualdisk'))),
path('virtual-machines/disks/add/', views.VirtualMachineBulkAddVirtualDiskView.as_view(), name='virtualmachine_bulk_add_virtualdisk'), path(
'virtual-machines/disks/add/',
views.VirtualMachineBulkAddVirtualDiskView.as_view(),
name='virtualmachine_bulk_add_virtualdisk'
),
# TODO: Remove in v4.2 # TODO: Remove in v4.2
# Redirect old (pre-v4.1) URLs for VirtualDisk views # Redirect old (pre-v4.1) URLs for VirtualDisk views

View File

@ -31,6 +31,7 @@ from .models import *
# Cluster types # Cluster types
# #
@register_model_view(ClusterType, 'list', path='', detail=False)
class ClusterTypeListView(generic.ObjectListView): class ClusterTypeListView(generic.ObjectListView):
queryset = ClusterType.objects.annotate( queryset = ClusterType.objects.annotate(
cluster_count=count_related(Cluster, 'type') cluster_count=count_related(Cluster, 'type')
@ -50,6 +51,7 @@ class ClusterTypeView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ClusterType, 'add', detail=False)
@register_model_view(ClusterType, 'edit') @register_model_view(ClusterType, 'edit')
class ClusterTypeEditView(generic.ObjectEditView): class ClusterTypeEditView(generic.ObjectEditView):
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
@ -61,11 +63,13 @@ class ClusterTypeDeleteView(generic.ObjectDeleteView):
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
@register_model_view(ClusterType, 'import', detail=False)
class ClusterTypeBulkImportView(generic.BulkImportView): class ClusterTypeBulkImportView(generic.BulkImportView):
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
model_form = forms.ClusterTypeImportForm model_form = forms.ClusterTypeImportForm
@register_model_view(ClusterType, 'bulk_edit', path='edit', detail=False)
class ClusterTypeBulkEditView(generic.BulkEditView): class ClusterTypeBulkEditView(generic.BulkEditView):
queryset = ClusterType.objects.annotate( queryset = ClusterType.objects.annotate(
cluster_count=count_related(Cluster, 'type') cluster_count=count_related(Cluster, 'type')
@ -75,6 +79,7 @@ class ClusterTypeBulkEditView(generic.BulkEditView):
form = forms.ClusterTypeBulkEditForm form = forms.ClusterTypeBulkEditForm
@register_model_view(ClusterType, 'bulk_delete', path='delete', detail=False)
class ClusterTypeBulkDeleteView(generic.BulkDeleteView): class ClusterTypeBulkDeleteView(generic.BulkDeleteView):
queryset = ClusterType.objects.annotate( queryset = ClusterType.objects.annotate(
cluster_count=count_related(Cluster, 'type') cluster_count=count_related(Cluster, 'type')
@ -87,6 +92,7 @@ class ClusterTypeBulkDeleteView(generic.BulkDeleteView):
# Cluster groups # Cluster groups
# #
@register_model_view(ClusterGroup, 'list', path='', detail=False)
class ClusterGroupListView(generic.ObjectListView): class ClusterGroupListView(generic.ObjectListView):
queryset = ClusterGroup.objects.annotate( queryset = ClusterGroup.objects.annotate(
cluster_count=count_related(Cluster, 'group') cluster_count=count_related(Cluster, 'group')
@ -106,6 +112,7 @@ class ClusterGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(ClusterGroup, 'add', detail=False)
@register_model_view(ClusterGroup, 'edit') @register_model_view(ClusterGroup, 'edit')
class ClusterGroupEditView(generic.ObjectEditView): class ClusterGroupEditView(generic.ObjectEditView):
queryset = ClusterGroup.objects.all() queryset = ClusterGroup.objects.all()
@ -117,6 +124,7 @@ class ClusterGroupDeleteView(generic.ObjectDeleteView):
queryset = ClusterGroup.objects.all() queryset = ClusterGroup.objects.all()
@register_model_view(ClusterGroup, 'import', detail=False)
class ClusterGroupBulkImportView(generic.BulkImportView): class ClusterGroupBulkImportView(generic.BulkImportView):
queryset = ClusterGroup.objects.annotate( queryset = ClusterGroup.objects.annotate(
cluster_count=count_related(Cluster, 'group') cluster_count=count_related(Cluster, 'group')
@ -124,6 +132,7 @@ class ClusterGroupBulkImportView(generic.BulkImportView):
model_form = forms.ClusterGroupImportForm model_form = forms.ClusterGroupImportForm
@register_model_view(ClusterGroup, 'bulk_edit', path='edit', detail=False)
class ClusterGroupBulkEditView(generic.BulkEditView): class ClusterGroupBulkEditView(generic.BulkEditView):
queryset = ClusterGroup.objects.annotate( queryset = ClusterGroup.objects.annotate(
cluster_count=count_related(Cluster, 'group') cluster_count=count_related(Cluster, 'group')
@ -133,6 +142,7 @@ class ClusterGroupBulkEditView(generic.BulkEditView):
form = forms.ClusterGroupBulkEditForm form = forms.ClusterGroupBulkEditForm
@register_model_view(ClusterGroup, 'bulk_delete', path='delete', detail=False)
class ClusterGroupBulkDeleteView(generic.BulkDeleteView): class ClusterGroupBulkDeleteView(generic.BulkDeleteView):
queryset = ClusterGroup.objects.annotate( queryset = ClusterGroup.objects.annotate(
cluster_count=count_related(Cluster, 'group') cluster_count=count_related(Cluster, 'group')
@ -150,6 +160,7 @@ class ClusterGroupContactsView(ObjectContactsView):
# Clusters # Clusters
# #
@register_model_view(Cluster, 'list', path='', detail=False)
class ClusterListView(generic.ObjectListView): class ClusterListView(generic.ObjectListView):
permission_required = 'virtualization.view_cluster' permission_required = 'virtualization.view_cluster'
queryset = Cluster.objects.annotate( queryset = Cluster.objects.annotate(
@ -213,6 +224,7 @@ class ClusterDevicesView(generic.ObjectChildrenView):
return Device.objects.restrict(request.user, 'view').filter(cluster=parent) return Device.objects.restrict(request.user, 'view').filter(cluster=parent)
@register_model_view(Cluster, 'add', detail=False)
@register_model_view(Cluster, 'edit') @register_model_view(Cluster, 'edit')
class ClusterEditView(generic.ObjectEditView): class ClusterEditView(generic.ObjectEditView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
@ -224,11 +236,13 @@ class ClusterDeleteView(generic.ObjectDeleteView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
@register_model_view(Cluster, 'import', detail=False)
class ClusterBulkImportView(generic.BulkImportView): class ClusterBulkImportView(generic.BulkImportView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
model_form = forms.ClusterImportForm model_form = forms.ClusterImportForm
@register_model_view(Cluster, 'bulk_edit', path='edit', detail=False)
class ClusterBulkEditView(generic.BulkEditView): class ClusterBulkEditView(generic.BulkEditView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
filterset = filtersets.ClusterFilterSet filterset = filtersets.ClusterFilterSet
@ -236,6 +250,7 @@ class ClusterBulkEditView(generic.BulkEditView):
form = forms.ClusterBulkEditForm form = forms.ClusterBulkEditForm
@register_model_view(Cluster, 'bulk_delete', path='delete', detail=False)
class ClusterBulkDeleteView(generic.BulkDeleteView): class ClusterBulkDeleteView(generic.BulkDeleteView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
filterset = filtersets.ClusterFilterSet filterset = filtersets.ClusterFilterSet
@ -337,6 +352,7 @@ class ClusterContactsView(ObjectContactsView):
# Virtual machines # Virtual machines
# #
@register_model_view(VirtualMachine, 'list', path='', detail=False)
class VirtualMachineListView(generic.ObjectListView): class VirtualMachineListView(generic.ObjectListView):
queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6') queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6')
filterset = filtersets.VirtualMachineFilterSet filterset = filtersets.VirtualMachineFilterSet
@ -457,6 +473,7 @@ class VirtualMachineRenderConfigView(generic.ObjectView):
} }
@register_model_view(VirtualMachine, 'add', detail=False)
@register_model_view(VirtualMachine, 'edit') @register_model_view(VirtualMachine, 'edit')
class VirtualMachineEditView(generic.ObjectEditView): class VirtualMachineEditView(generic.ObjectEditView):
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
@ -468,11 +485,13 @@ class VirtualMachineDeleteView(generic.ObjectDeleteView):
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
@register_model_view(VirtualMachine, 'import', detail=False)
class VirtualMachineBulkImportView(generic.BulkImportView): class VirtualMachineBulkImportView(generic.BulkImportView):
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
model_form = forms.VirtualMachineImportForm model_form = forms.VirtualMachineImportForm
@register_model_view(VirtualMachine, 'bulk_edit', path='edit', detail=False)
class VirtualMachineBulkEditView(generic.BulkEditView): class VirtualMachineBulkEditView(generic.BulkEditView):
queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6') queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6')
filterset = filtersets.VirtualMachineFilterSet filterset = filtersets.VirtualMachineFilterSet
@ -480,6 +499,7 @@ class VirtualMachineBulkEditView(generic.BulkEditView):
form = forms.VirtualMachineBulkEditForm form = forms.VirtualMachineBulkEditForm
@register_model_view(VirtualMachine, 'bulk_delete', path='delete', detail=False)
class VirtualMachineBulkDeleteView(generic.BulkDeleteView): class VirtualMachineBulkDeleteView(generic.BulkDeleteView):
queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6') queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6')
filterset = filtersets.VirtualMachineFilterSet filterset = filtersets.VirtualMachineFilterSet
@ -495,6 +515,7 @@ class VirtualMachineContactsView(ObjectContactsView):
# VM interfaces # VM interfaces
# #
@register_model_view(VMInterface, 'list', path='', detail=False)
class VMInterfaceListView(generic.ObjectListView): class VMInterfaceListView(generic.ObjectListView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
filterset = filtersets.VMInterfaceFilterSet filterset = filtersets.VMInterfaceFilterSet
@ -545,6 +566,7 @@ class VMInterfaceView(generic.ObjectView):
} }
@register_model_view(VMInterface, 'add', detail=False)
class VMInterfaceCreateView(generic.ComponentCreateView): class VMInterfaceCreateView(generic.ComponentCreateView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
form = forms.VMInterfaceCreateForm form = forms.VMInterfaceCreateForm
@ -562,11 +584,13 @@ class VMInterfaceDeleteView(generic.ObjectDeleteView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
@register_model_view(VMInterface, 'import', detail=False)
class VMInterfaceBulkImportView(generic.BulkImportView): class VMInterfaceBulkImportView(generic.BulkImportView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
model_form = forms.VMInterfaceImportForm model_form = forms.VMInterfaceImportForm
@register_model_view(VMInterface, 'bulk_edit', path='edit', detail=False)
class VMInterfaceBulkEditView(generic.BulkEditView): class VMInterfaceBulkEditView(generic.BulkEditView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
filterset = filtersets.VMInterfaceFilterSet filterset = filtersets.VMInterfaceFilterSet
@ -574,11 +598,13 @@ class VMInterfaceBulkEditView(generic.BulkEditView):
form = forms.VMInterfaceBulkEditForm form = forms.VMInterfaceBulkEditForm
@register_model_view(VMInterface, 'bulk_rename', path='rename', detail=False)
class VMInterfaceBulkRenameView(generic.BulkRenameView): class VMInterfaceBulkRenameView(generic.BulkRenameView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
form = forms.VMInterfaceBulkRenameForm form = forms.VMInterfaceBulkRenameForm
@register_model_view(VMInterface, 'bulk_delete', path='delete', detail=False)
class VMInterfaceBulkDeleteView(generic.BulkDeleteView): class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
# Ensure child interfaces are deleted prior to their parents # Ensure child interfaces are deleted prior to their parents
queryset = VMInterface.objects.order_by('virtual_machine', 'parent', CollateAsChar('_name')) queryset = VMInterface.objects.order_by('virtual_machine', 'parent', CollateAsChar('_name'))
@ -590,6 +616,7 @@ class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
# Virtual disks # Virtual disks
# #
@register_model_view(VirtualDisk, 'list', path='', detail=False)
class VirtualDiskListView(generic.ObjectListView): class VirtualDiskListView(generic.ObjectListView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
filterset = filtersets.VirtualDiskFilterSet filterset = filtersets.VirtualDiskFilterSet
@ -602,6 +629,7 @@ class VirtualDiskView(generic.ObjectView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
@register_model_view(VirtualDisk, 'add', detail=False)
class VirtualDiskCreateView(generic.ComponentCreateView): class VirtualDiskCreateView(generic.ComponentCreateView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
form = forms.VirtualDiskCreateForm form = forms.VirtualDiskCreateForm
@ -619,11 +647,13 @@ class VirtualDiskDeleteView(generic.ObjectDeleteView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
@register_model_view(VirtualDisk, 'import', detail=False)
class VirtualDiskBulkImportView(generic.BulkImportView): class VirtualDiskBulkImportView(generic.BulkImportView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
model_form = forms.VirtualDiskImportForm model_form = forms.VirtualDiskImportForm
@register_model_view(VirtualDisk, 'bulk_edit', path='edit', detail=False)
class VirtualDiskBulkEditView(generic.BulkEditView): class VirtualDiskBulkEditView(generic.BulkEditView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
filterset = filtersets.VirtualDiskFilterSet filterset = filtersets.VirtualDiskFilterSet
@ -631,11 +661,13 @@ class VirtualDiskBulkEditView(generic.BulkEditView):
form = forms.VirtualDiskBulkEditForm form = forms.VirtualDiskBulkEditForm
@register_model_view(VirtualDisk, 'bulk_rename', path='rename', detail=False)
class VirtualDiskBulkRenameView(generic.BulkRenameView): class VirtualDiskBulkRenameView(generic.BulkRenameView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
form = forms.VirtualDiskBulkRenameForm form = forms.VirtualDiskBulkRenameForm
@register_model_view(VirtualDisk, 'bulk_delete', path='delete', detail=False)
class VirtualDiskBulkDeleteView(generic.BulkDeleteView): class VirtualDiskBulkDeleteView(generic.BulkDeleteView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
filterset = filtersets.VirtualDiskFilterSet filterset = filtersets.VirtualDiskFilterSet

View File

@ -1,89 +1,39 @@
from django.urls import include, path from django.urls import include, path
from utilities.urls import get_model_urls from utilities.urls import get_model_urls
from . import views from . import views # noqa F401
app_name = 'vpn' app_name = 'vpn'
urlpatterns = [ urlpatterns = [
# Tunnel groups path('tunnel-groups/', include(get_model_urls('vpn', 'tunnelgroup', detail=False))),
path('tunnel-groups/', views.TunnelGroupListView.as_view(), name='tunnelgroup_list'),
path('tunnel-groups/add/', views.TunnelGroupEditView.as_view(), name='tunnelgroup_add'),
path('tunnel-groups/import/', views.TunnelGroupBulkImportView.as_view(), name='tunnelgroup_import'),
path('tunnel-groups/edit/', views.TunnelGroupBulkEditView.as_view(), name='tunnelgroup_bulk_edit'),
path('tunnel-groups/delete/', views.TunnelGroupBulkDeleteView.as_view(), name='tunnelgroup_bulk_delete'),
path('tunnel-groups/<int:pk>/', include(get_model_urls('vpn', 'tunnelgroup'))), path('tunnel-groups/<int:pk>/', include(get_model_urls('vpn', 'tunnelgroup'))),
# Tunnels path('tunnels/', include(get_model_urls('vpn', 'tunnel', detail=False))),
path('tunnels/', views.TunnelListView.as_view(), name='tunnel_list'),
path('tunnels/add/', views.TunnelEditView.as_view(), name='tunnel_add'),
path('tunnels/import/', views.TunnelBulkImportView.as_view(), name='tunnel_import'),
path('tunnels/edit/', views.TunnelBulkEditView.as_view(), name='tunnel_bulk_edit'),
path('tunnels/delete/', views.TunnelBulkDeleteView.as_view(), name='tunnel_bulk_delete'),
path('tunnels/<int:pk>/', include(get_model_urls('vpn', 'tunnel'))), path('tunnels/<int:pk>/', include(get_model_urls('vpn', 'tunnel'))),
# Tunnel terminations path('tunnel-terminations/', include(get_model_urls('vpn', 'tunneltermination', detail=False))),
path('tunnel-terminations/', views.TunnelTerminationListView.as_view(), name='tunneltermination_list'),
path('tunnel-terminations/add/', views.TunnelTerminationEditView.as_view(), name='tunneltermination_add'),
path('tunnel-terminations/import/', views.TunnelTerminationBulkImportView.as_view(), name='tunneltermination_import'),
path('tunnel-terminations/edit/', views.TunnelTerminationBulkEditView.as_view(), name='tunneltermination_bulk_edit'),
path('tunnel-terminations/delete/', views.TunnelTerminationBulkDeleteView.as_view(), name='tunneltermination_bulk_delete'),
path('tunnel-terminations/<int:pk>/', include(get_model_urls('vpn', 'tunneltermination'))), path('tunnel-terminations/<int:pk>/', include(get_model_urls('vpn', 'tunneltermination'))),
# IKE proposals path('ike-proposals/', include(get_model_urls('vpn', 'ikeproposal', detail=False))),
path('ike-proposals/', views.IKEProposalListView.as_view(), name='ikeproposal_list'),
path('ike-proposals/add/', views.IKEProposalEditView.as_view(), name='ikeproposal_add'),
path('ike-proposals/import/', views.IKEProposalBulkImportView.as_view(), name='ikeproposal_import'),
path('ike-proposals/edit/', views.IKEProposalBulkEditView.as_view(), name='ikeproposal_bulk_edit'),
path('ike-proposals/delete/', views.IKEProposalBulkDeleteView.as_view(), name='ikeproposal_bulk_delete'),
path('ike-proposals/<int:pk>/', include(get_model_urls('vpn', 'ikeproposal'))), path('ike-proposals/<int:pk>/', include(get_model_urls('vpn', 'ikeproposal'))),
# IKE policies path('ike-policies/', include(get_model_urls('vpn', 'ikepolicy', detail=False))),
path('ike-policies/', views.IKEPolicyListView.as_view(), name='ikepolicy_list'),
path('ike-policies/add/', views.IKEPolicyEditView.as_view(), name='ikepolicy_add'),
path('ike-policies/import/', views.IKEPolicyBulkImportView.as_view(), name='ikepolicy_import'),
path('ike-policies/edit/', views.IKEPolicyBulkEditView.as_view(), name='ikepolicy_bulk_edit'),
path('ike-policies/delete/', views.IKEPolicyBulkDeleteView.as_view(), name='ikepolicy_bulk_delete'),
path('ike-policies/<int:pk>/', include(get_model_urls('vpn', 'ikepolicy'))), path('ike-policies/<int:pk>/', include(get_model_urls('vpn', 'ikepolicy'))),
# IPSec proposals path('ipsec-proposals/', include(get_model_urls('vpn', 'ipsecproposal', detail=False))),
path('ipsec-proposals/', views.IPSecProposalListView.as_view(), name='ipsecproposal_list'),
path('ipsec-proposals/add/', views.IPSecProposalEditView.as_view(), name='ipsecproposal_add'),
path('ipsec-proposals/import/', views.IPSecProposalBulkImportView.as_view(), name='ipsecproposal_import'),
path('ipsec-proposals/edit/', views.IPSecProposalBulkEditView.as_view(), name='ipsecproposal_bulk_edit'),
path('ipsec-proposals/delete/', views.IPSecProposalBulkDeleteView.as_view(), name='ipsecproposal_bulk_delete'),
path('ipsec-proposals/<int:pk>/', include(get_model_urls('vpn', 'ipsecproposal'))), path('ipsec-proposals/<int:pk>/', include(get_model_urls('vpn', 'ipsecproposal'))),
# IPSec policies path('ipsec-policies/', include(get_model_urls('vpn', 'ipsecpolicy', detail=False))),
path('ipsec-policies/', views.IPSecPolicyListView.as_view(), name='ipsecpolicy_list'),
path('ipsec-policies/add/', views.IPSecPolicyEditView.as_view(), name='ipsecpolicy_add'),
path('ipsec-policies/import/', views.IPSecPolicyBulkImportView.as_view(), name='ipsecpolicy_import'),
path('ipsec-policies/edit/', views.IPSecPolicyBulkEditView.as_view(), name='ipsecpolicy_bulk_edit'),
path('ipsec-policies/delete/', views.IPSecPolicyBulkDeleteView.as_view(), name='ipsecpolicy_bulk_delete'),
path('ipsec-policies/<int:pk>/', include(get_model_urls('vpn', 'ipsecpolicy'))), path('ipsec-policies/<int:pk>/', include(get_model_urls('vpn', 'ipsecpolicy'))),
# IPSec profiles path('ipsec-profiles/', include(get_model_urls('vpn', 'ipsecprofile', detail=False))),
path('ipsec-profiles/', views.IPSecProfileListView.as_view(), name='ipsecprofile_list'),
path('ipsec-profiles/add/', views.IPSecProfileEditView.as_view(), name='ipsecprofile_add'),
path('ipsec-profiles/import/', views.IPSecProfileBulkImportView.as_view(), name='ipsecprofile_import'),
path('ipsec-profiles/edit/', views.IPSecProfileBulkEditView.as_view(), name='ipsecprofile_bulk_edit'),
path('ipsec-profiles/delete/', views.IPSecProfileBulkDeleteView.as_view(), name='ipsecprofile_bulk_delete'),
path('ipsec-profiles/<int:pk>/', include(get_model_urls('vpn', 'ipsecprofile'))), path('ipsec-profiles/<int:pk>/', include(get_model_urls('vpn', 'ipsecprofile'))),
# L2VPN path('l2vpns/', include(get_model_urls('vpn', 'l2vpn', detail=False))),
path('l2vpns/', views.L2VPNListView.as_view(), name='l2vpn_list'),
path('l2vpns/add/', views.L2VPNEditView.as_view(), name='l2vpn_add'),
path('l2vpns/import/', views.L2VPNBulkImportView.as_view(), name='l2vpn_import'),
path('l2vpns/edit/', views.L2VPNBulkEditView.as_view(), name='l2vpn_bulk_edit'),
path('l2vpns/delete/', views.L2VPNBulkDeleteView.as_view(), name='l2vpn_bulk_delete'),
path('l2vpns/<int:pk>/', include(get_model_urls('vpn', 'l2vpn'))), path('l2vpns/<int:pk>/', include(get_model_urls('vpn', 'l2vpn'))),
# L2VPN terminations path('l2vpn-terminations/', include(get_model_urls('vpn', 'l2vpntermination', detail=False))),
path('l2vpn-terminations/', views.L2VPNTerminationListView.as_view(), name='l2vpntermination_list'),
path('l2vpn-terminations/add/', views.L2VPNTerminationEditView.as_view(), name='l2vpntermination_add'),
path('l2vpn-terminations/import/', views.L2VPNTerminationBulkImportView.as_view(), name='l2vpntermination_import'),
path('l2vpn-terminations/edit/', views.L2VPNTerminationBulkEditView.as_view(), name='l2vpntermination_bulk_edit'),
path('l2vpn-terminations/delete/', views.L2VPNTerminationBulkDeleteView.as_view(), name='l2vpntermination_bulk_delete'),
path('l2vpn-terminations/<int:pk>/', include(get_model_urls('vpn', 'l2vpntermination'))), path('l2vpn-terminations/<int:pk>/', include(get_model_urls('vpn', 'l2vpntermination'))),
] ]

View File

@ -11,6 +11,7 @@ from .models import *
# Tunnel groups # Tunnel groups
# #
@register_model_view(TunnelGroup, 'list', path='', detail=False)
class TunnelGroupListView(generic.ObjectListView): class TunnelGroupListView(generic.ObjectListView):
queryset = TunnelGroup.objects.annotate( queryset = TunnelGroup.objects.annotate(
tunnel_count=count_related(Tunnel, 'group') tunnel_count=count_related(Tunnel, 'group')
@ -30,6 +31,7 @@ class TunnelGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(TunnelGroup, 'add', detail=False)
@register_model_view(TunnelGroup, 'edit') @register_model_view(TunnelGroup, 'edit')
class TunnelGroupEditView(generic.ObjectEditView): class TunnelGroupEditView(generic.ObjectEditView):
queryset = TunnelGroup.objects.all() queryset = TunnelGroup.objects.all()
@ -41,11 +43,13 @@ class TunnelGroupDeleteView(generic.ObjectDeleteView):
queryset = TunnelGroup.objects.all() queryset = TunnelGroup.objects.all()
@register_model_view(TunnelGroup, 'import', detail=False)
class TunnelGroupBulkImportView(generic.BulkImportView): class TunnelGroupBulkImportView(generic.BulkImportView):
queryset = TunnelGroup.objects.all() queryset = TunnelGroup.objects.all()
model_form = forms.TunnelGroupImportForm model_form = forms.TunnelGroupImportForm
@register_model_view(TunnelGroup, 'bulk_edit', path='edit', detail=False)
class TunnelGroupBulkEditView(generic.BulkEditView): class TunnelGroupBulkEditView(generic.BulkEditView):
queryset = TunnelGroup.objects.annotate( queryset = TunnelGroup.objects.annotate(
tunnel_count=count_related(Tunnel, 'group') tunnel_count=count_related(Tunnel, 'group')
@ -55,6 +59,7 @@ class TunnelGroupBulkEditView(generic.BulkEditView):
form = forms.TunnelGroupBulkEditForm form = forms.TunnelGroupBulkEditForm
@register_model_view(TunnelGroup, 'bulk_delete', path='delete', detail=False)
class TunnelGroupBulkDeleteView(generic.BulkDeleteView): class TunnelGroupBulkDeleteView(generic.BulkDeleteView):
queryset = TunnelGroup.objects.annotate( queryset = TunnelGroup.objects.annotate(
tunnel_count=count_related(Tunnel, 'group') tunnel_count=count_related(Tunnel, 'group')
@ -67,6 +72,7 @@ class TunnelGroupBulkDeleteView(generic.BulkDeleteView):
# Tunnels # Tunnels
# #
@register_model_view(Tunnel, 'list', path='', detail=False)
class TunnelListView(generic.ObjectListView): class TunnelListView(generic.ObjectListView):
queryset = Tunnel.objects.annotate( queryset = Tunnel.objects.annotate(
count_terminations=count_related(TunnelTermination, 'tunnel') count_terminations=count_related(TunnelTermination, 'tunnel')
@ -81,6 +87,7 @@ class TunnelView(generic.ObjectView):
queryset = Tunnel.objects.all() queryset = Tunnel.objects.all()
@register_model_view(Tunnel, 'add', detail=False)
@register_model_view(Tunnel, 'edit') @register_model_view(Tunnel, 'edit')
class TunnelEditView(generic.ObjectEditView): class TunnelEditView(generic.ObjectEditView):
queryset = Tunnel.objects.all() queryset = Tunnel.objects.all()
@ -100,11 +107,13 @@ class TunnelDeleteView(generic.ObjectDeleteView):
queryset = Tunnel.objects.all() queryset = Tunnel.objects.all()
@register_model_view(Tunnel, 'import', detail=False)
class TunnelBulkImportView(generic.BulkImportView): class TunnelBulkImportView(generic.BulkImportView):
queryset = Tunnel.objects.all() queryset = Tunnel.objects.all()
model_form = forms.TunnelImportForm model_form = forms.TunnelImportForm
@register_model_view(Tunnel, 'bulk_edit', path='edit', detail=False)
class TunnelBulkEditView(generic.BulkEditView): class TunnelBulkEditView(generic.BulkEditView):
queryset = Tunnel.objects.annotate( queryset = Tunnel.objects.annotate(
count_terminations=count_related(TunnelTermination, 'tunnel') count_terminations=count_related(TunnelTermination, 'tunnel')
@ -114,6 +123,7 @@ class TunnelBulkEditView(generic.BulkEditView):
form = forms.TunnelBulkEditForm form = forms.TunnelBulkEditForm
@register_model_view(Tunnel, 'bulk_delete', path='delete', detail=False)
class TunnelBulkDeleteView(generic.BulkDeleteView): class TunnelBulkDeleteView(generic.BulkDeleteView):
queryset = Tunnel.objects.annotate( queryset = Tunnel.objects.annotate(
count_terminations=count_related(TunnelTermination, 'tunnel') count_terminations=count_related(TunnelTermination, 'tunnel')
@ -126,6 +136,7 @@ class TunnelBulkDeleteView(generic.BulkDeleteView):
# Tunnel terminations # Tunnel terminations
# #
@register_model_view(TunnelTermination, 'list', path='', detail=False)
class TunnelTerminationListView(generic.ObjectListView): class TunnelTerminationListView(generic.ObjectListView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
filterset = filtersets.TunnelTerminationFilterSet filterset = filtersets.TunnelTerminationFilterSet
@ -138,6 +149,7 @@ class TunnelTerminationView(generic.ObjectView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
@register_model_view(TunnelTermination, 'add', detail=False)
@register_model_view(TunnelTermination, 'edit') @register_model_view(TunnelTermination, 'edit')
class TunnelTerminationEditView(generic.ObjectEditView): class TunnelTerminationEditView(generic.ObjectEditView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
@ -149,11 +161,13 @@ class TunnelTerminationDeleteView(generic.ObjectDeleteView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
@register_model_view(TunnelTermination, 'import', detail=False)
class TunnelTerminationBulkImportView(generic.BulkImportView): class TunnelTerminationBulkImportView(generic.BulkImportView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
model_form = forms.TunnelTerminationImportForm model_form = forms.TunnelTerminationImportForm
@register_model_view(TunnelTermination, 'bulk_edit', path='edit', detail=False)
class TunnelTerminationBulkEditView(generic.BulkEditView): class TunnelTerminationBulkEditView(generic.BulkEditView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
filterset = filtersets.TunnelTerminationFilterSet filterset = filtersets.TunnelTerminationFilterSet
@ -161,6 +175,7 @@ class TunnelTerminationBulkEditView(generic.BulkEditView):
form = forms.TunnelTerminationBulkEditForm form = forms.TunnelTerminationBulkEditForm
@register_model_view(TunnelTermination, 'bulk_delete', path='delete', detail=False)
class TunnelTerminationBulkDeleteView(generic.BulkDeleteView): class TunnelTerminationBulkDeleteView(generic.BulkDeleteView):
queryset = TunnelTermination.objects.all() queryset = TunnelTermination.objects.all()
filterset = filtersets.TunnelTerminationFilterSet filterset = filtersets.TunnelTerminationFilterSet
@ -171,6 +186,7 @@ class TunnelTerminationBulkDeleteView(generic.BulkDeleteView):
# IKE proposals # IKE proposals
# #
@register_model_view(IKEProposal, 'list', path='', detail=False)
class IKEProposalListView(generic.ObjectListView): class IKEProposalListView(generic.ObjectListView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
filterset = filtersets.IKEProposalFilterSet filterset = filtersets.IKEProposalFilterSet
@ -183,6 +199,7 @@ class IKEProposalView(generic.ObjectView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
@register_model_view(IKEProposal, 'add', detail=False)
@register_model_view(IKEProposal, 'edit') @register_model_view(IKEProposal, 'edit')
class IKEProposalEditView(generic.ObjectEditView): class IKEProposalEditView(generic.ObjectEditView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
@ -194,11 +211,13 @@ class IKEProposalDeleteView(generic.ObjectDeleteView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
@register_model_view(IKEProposal, 'import', detail=False)
class IKEProposalBulkImportView(generic.BulkImportView): class IKEProposalBulkImportView(generic.BulkImportView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
model_form = forms.IKEProposalImportForm model_form = forms.IKEProposalImportForm
@register_model_view(IKEProposal, 'bulk_edit', path='edit', detail=False)
class IKEProposalBulkEditView(generic.BulkEditView): class IKEProposalBulkEditView(generic.BulkEditView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
filterset = filtersets.IKEProposalFilterSet filterset = filtersets.IKEProposalFilterSet
@ -206,6 +225,7 @@ class IKEProposalBulkEditView(generic.BulkEditView):
form = forms.IKEProposalBulkEditForm form = forms.IKEProposalBulkEditForm
@register_model_view(IKEProposal, 'bulk_delete', path='delete', detail=False)
class IKEProposalBulkDeleteView(generic.BulkDeleteView): class IKEProposalBulkDeleteView(generic.BulkDeleteView):
queryset = IKEProposal.objects.all() queryset = IKEProposal.objects.all()
filterset = filtersets.IKEProposalFilterSet filterset = filtersets.IKEProposalFilterSet
@ -216,6 +236,7 @@ class IKEProposalBulkDeleteView(generic.BulkDeleteView):
# IKE policies # IKE policies
# #
@register_model_view(IKEPolicy, 'list', path='', detail=False)
class IKEPolicyListView(generic.ObjectListView): class IKEPolicyListView(generic.ObjectListView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
filterset = filtersets.IKEPolicyFilterSet filterset = filtersets.IKEPolicyFilterSet
@ -228,6 +249,7 @@ class IKEPolicyView(generic.ObjectView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
@register_model_view(IKEPolicy, 'add', detail=False)
@register_model_view(IKEPolicy, 'edit') @register_model_view(IKEPolicy, 'edit')
class IKEPolicyEditView(generic.ObjectEditView): class IKEPolicyEditView(generic.ObjectEditView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
@ -239,11 +261,13 @@ class IKEPolicyDeleteView(generic.ObjectDeleteView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
@register_model_view(IKEPolicy, 'import', detail=False)
class IKEPolicyBulkImportView(generic.BulkImportView): class IKEPolicyBulkImportView(generic.BulkImportView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
model_form = forms.IKEPolicyImportForm model_form = forms.IKEPolicyImportForm
@register_model_view(IKEPolicy, 'bulk_edit', path='edit', detail=False)
class IKEPolicyBulkEditView(generic.BulkEditView): class IKEPolicyBulkEditView(generic.BulkEditView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
filterset = filtersets.IKEPolicyFilterSet filterset = filtersets.IKEPolicyFilterSet
@ -251,6 +275,7 @@ class IKEPolicyBulkEditView(generic.BulkEditView):
form = forms.IKEPolicyBulkEditForm form = forms.IKEPolicyBulkEditForm
@register_model_view(IKEPolicy, 'bulk_delete', path='delete', detail=False)
class IKEPolicyBulkDeleteView(generic.BulkDeleteView): class IKEPolicyBulkDeleteView(generic.BulkDeleteView):
queryset = IKEPolicy.objects.all() queryset = IKEPolicy.objects.all()
filterset = filtersets.IKEPolicyFilterSet filterset = filtersets.IKEPolicyFilterSet
@ -261,6 +286,7 @@ class IKEPolicyBulkDeleteView(generic.BulkDeleteView):
# IPSec proposals # IPSec proposals
# #
@register_model_view(IPSecProposal, 'list', path='', detail=False)
class IPSecProposalListView(generic.ObjectListView): class IPSecProposalListView(generic.ObjectListView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
filterset = filtersets.IPSecProposalFilterSet filterset = filtersets.IPSecProposalFilterSet
@ -273,6 +299,7 @@ class IPSecProposalView(generic.ObjectView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
@register_model_view(IPSecProposal, 'add', detail=False)
@register_model_view(IPSecProposal, 'edit') @register_model_view(IPSecProposal, 'edit')
class IPSecProposalEditView(generic.ObjectEditView): class IPSecProposalEditView(generic.ObjectEditView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
@ -284,11 +311,13 @@ class IPSecProposalDeleteView(generic.ObjectDeleteView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
@register_model_view(IPSecProposal, 'import', detail=False)
class IPSecProposalBulkImportView(generic.BulkImportView): class IPSecProposalBulkImportView(generic.BulkImportView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
model_form = forms.IPSecProposalImportForm model_form = forms.IPSecProposalImportForm
@register_model_view(IPSecProposal, 'bulk_edit', path='edit', detail=False)
class IPSecProposalBulkEditView(generic.BulkEditView): class IPSecProposalBulkEditView(generic.BulkEditView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
filterset = filtersets.IPSecProposalFilterSet filterset = filtersets.IPSecProposalFilterSet
@ -296,6 +325,7 @@ class IPSecProposalBulkEditView(generic.BulkEditView):
form = forms.IPSecProposalBulkEditForm form = forms.IPSecProposalBulkEditForm
@register_model_view(IPSecProposal, 'bulk_delete', path='delete', detail=False)
class IPSecProposalBulkDeleteView(generic.BulkDeleteView): class IPSecProposalBulkDeleteView(generic.BulkDeleteView):
queryset = IPSecProposal.objects.all() queryset = IPSecProposal.objects.all()
filterset = filtersets.IPSecProposalFilterSet filterset = filtersets.IPSecProposalFilterSet
@ -306,6 +336,7 @@ class IPSecProposalBulkDeleteView(generic.BulkDeleteView):
# IPSec policies # IPSec policies
# #
@register_model_view(IPSecPolicy, 'list', path='', detail=False)
class IPSecPolicyListView(generic.ObjectListView): class IPSecPolicyListView(generic.ObjectListView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
filterset = filtersets.IPSecPolicyFilterSet filterset = filtersets.IPSecPolicyFilterSet
@ -318,6 +349,7 @@ class IPSecPolicyView(generic.ObjectView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
@register_model_view(IPSecPolicy, 'add', detail=False)
@register_model_view(IPSecPolicy, 'edit') @register_model_view(IPSecPolicy, 'edit')
class IPSecPolicyEditView(generic.ObjectEditView): class IPSecPolicyEditView(generic.ObjectEditView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
@ -329,11 +361,13 @@ class IPSecPolicyDeleteView(generic.ObjectDeleteView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
@register_model_view(IPSecPolicy, 'import', detail=False)
class IPSecPolicyBulkImportView(generic.BulkImportView): class IPSecPolicyBulkImportView(generic.BulkImportView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
model_form = forms.IPSecPolicyImportForm model_form = forms.IPSecPolicyImportForm
@register_model_view(IPSecPolicy, 'bulk_edit', path='edit', detail=False)
class IPSecPolicyBulkEditView(generic.BulkEditView): class IPSecPolicyBulkEditView(generic.BulkEditView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
filterset = filtersets.IPSecPolicyFilterSet filterset = filtersets.IPSecPolicyFilterSet
@ -341,6 +375,7 @@ class IPSecPolicyBulkEditView(generic.BulkEditView):
form = forms.IPSecPolicyBulkEditForm form = forms.IPSecPolicyBulkEditForm
@register_model_view(IPSecPolicy, 'bulk_delete', path='delete', detail=False)
class IPSecPolicyBulkDeleteView(generic.BulkDeleteView): class IPSecPolicyBulkDeleteView(generic.BulkDeleteView):
queryset = IPSecPolicy.objects.all() queryset = IPSecPolicy.objects.all()
filterset = filtersets.IPSecPolicyFilterSet filterset = filtersets.IPSecPolicyFilterSet
@ -351,6 +386,7 @@ class IPSecPolicyBulkDeleteView(generic.BulkDeleteView):
# IPSec profiles # IPSec profiles
# #
@register_model_view(IPSecProfile, 'list', path='', detail=False)
class IPSecProfileListView(generic.ObjectListView): class IPSecProfileListView(generic.ObjectListView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
filterset = filtersets.IPSecProfileFilterSet filterset = filtersets.IPSecProfileFilterSet
@ -363,6 +399,7 @@ class IPSecProfileView(generic.ObjectView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
@register_model_view(IPSecProfile, 'add', detail=False)
@register_model_view(IPSecProfile, 'edit') @register_model_view(IPSecProfile, 'edit')
class IPSecProfileEditView(generic.ObjectEditView): class IPSecProfileEditView(generic.ObjectEditView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
@ -374,11 +411,13 @@ class IPSecProfileDeleteView(generic.ObjectDeleteView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
@register_model_view(IPSecProfile, 'import', detail=False)
class IPSecProfileBulkImportView(generic.BulkImportView): class IPSecProfileBulkImportView(generic.BulkImportView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
model_form = forms.IPSecProfileImportForm model_form = forms.IPSecProfileImportForm
@register_model_view(IPSecProfile, 'bulk_edit', path='edit', detail=False)
class IPSecProfileBulkEditView(generic.BulkEditView): class IPSecProfileBulkEditView(generic.BulkEditView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
filterset = filtersets.IPSecProfileFilterSet filterset = filtersets.IPSecProfileFilterSet
@ -386,14 +425,18 @@ class IPSecProfileBulkEditView(generic.BulkEditView):
form = forms.IPSecProfileBulkEditForm form = forms.IPSecProfileBulkEditForm
@register_model_view(IPSecProfile, 'bulk_delete', path='delete', detail=False)
class IPSecProfileBulkDeleteView(generic.BulkDeleteView): class IPSecProfileBulkDeleteView(generic.BulkDeleteView):
queryset = IPSecProfile.objects.all() queryset = IPSecProfile.objects.all()
filterset = filtersets.IPSecProfileFilterSet filterset = filtersets.IPSecProfileFilterSet
table = tables.IPSecProfileTable table = tables.IPSecProfileTable
#
# L2VPN # L2VPN
#
@register_model_view(L2VPN, 'list', path='', detail=False)
class L2VPNListView(generic.ObjectListView): class L2VPNListView(generic.ObjectListView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
table = tables.L2VPNTable table = tables.L2VPNTable
@ -421,6 +464,7 @@ class L2VPNView(generic.ObjectView):
} }
@register_model_view(L2VPN, 'add', detail=False)
@register_model_view(L2VPN, 'edit') @register_model_view(L2VPN, 'edit')
class L2VPNEditView(generic.ObjectEditView): class L2VPNEditView(generic.ObjectEditView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
@ -432,11 +476,13 @@ class L2VPNDeleteView(generic.ObjectDeleteView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
@register_model_view(L2VPN, 'import', detail=False)
class L2VPNBulkImportView(generic.BulkImportView): class L2VPNBulkImportView(generic.BulkImportView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
model_form = forms.L2VPNImportForm model_form = forms.L2VPNImportForm
@register_model_view(L2VPN, 'bulk_edit', path='edit', detail=False)
class L2VPNBulkEditView(generic.BulkEditView): class L2VPNBulkEditView(generic.BulkEditView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
filterset = filtersets.L2VPNFilterSet filterset = filtersets.L2VPNFilterSet
@ -444,6 +490,7 @@ class L2VPNBulkEditView(generic.BulkEditView):
form = forms.L2VPNBulkEditForm form = forms.L2VPNBulkEditForm
@register_model_view(L2VPN, 'bulk_delete', path='delete', detail=False)
class L2VPNBulkDeleteView(generic.BulkDeleteView): class L2VPNBulkDeleteView(generic.BulkDeleteView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
filterset = filtersets.L2VPNFilterSet filterset = filtersets.L2VPNFilterSet
@ -459,6 +506,7 @@ class L2VPNContactsView(ObjectContactsView):
# L2VPN terminations # L2VPN terminations
# #
@register_model_view(L2VPNTermination, 'list', path='', detail=False)
class L2VPNTerminationListView(generic.ObjectListView): class L2VPNTerminationListView(generic.ObjectListView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
table = tables.L2VPNTerminationTable table = tables.L2VPNTerminationTable
@ -471,6 +519,7 @@ class L2VPNTerminationView(generic.ObjectView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
@register_model_view(L2VPNTermination, 'add', detail=False)
@register_model_view(L2VPNTermination, 'edit') @register_model_view(L2VPNTermination, 'edit')
class L2VPNTerminationEditView(generic.ObjectEditView): class L2VPNTerminationEditView(generic.ObjectEditView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
@ -482,11 +531,13 @@ class L2VPNTerminationDeleteView(generic.ObjectDeleteView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
@register_model_view(L2VPNTermination, 'import', detail=False)
class L2VPNTerminationBulkImportView(generic.BulkImportView): class L2VPNTerminationBulkImportView(generic.BulkImportView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
model_form = forms.L2VPNTerminationImportForm model_form = forms.L2VPNTerminationImportForm
@register_model_view(L2VPNTermination, 'bulk_edit', path='edit', detail=False)
class L2VPNTerminationBulkEditView(generic.BulkEditView): class L2VPNTerminationBulkEditView(generic.BulkEditView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
filterset = filtersets.L2VPNTerminationFilterSet filterset = filtersets.L2VPNTerminationFilterSet
@ -494,6 +545,7 @@ class L2VPNTerminationBulkEditView(generic.BulkEditView):
form = forms.L2VPNTerminationBulkEditForm form = forms.L2VPNTerminationBulkEditForm
@register_model_view(L2VPNTermination, 'bulk_delete', path='delete', detail=False)
class L2VPNTerminationBulkDeleteView(generic.BulkDeleteView): class L2VPNTerminationBulkDeleteView(generic.BulkDeleteView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
filterset = filtersets.L2VPNTerminationFilterSet filterset = filtersets.L2VPNTerminationFilterSet

View File

@ -1,33 +1,18 @@
from django.urls import include, path from django.urls import include, path
from utilities.urls import get_model_urls from utilities.urls import get_model_urls
from . import views from . import views # noqa F401
app_name = 'wireless' app_name = 'wireless'
urlpatterns = ( urlpatterns = (
# Wireless LAN groups path('wireless-lan-groups/', include(get_model_urls('wireless', 'wirelesslangroup', detail=False))),
path('wireless-lan-groups/', views.WirelessLANGroupListView.as_view(), name='wirelesslangroup_list'),
path('wireless-lan-groups/add/', views.WirelessLANGroupEditView.as_view(), name='wirelesslangroup_add'),
path('wireless-lan-groups/import/', views.WirelessLANGroupBulkImportView.as_view(), name='wirelesslangroup_import'),
path('wireless-lan-groups/edit/', views.WirelessLANGroupBulkEditView.as_view(), name='wirelesslangroup_bulk_edit'),
path('wireless-lan-groups/delete/', views.WirelessLANGroupBulkDeleteView.as_view(), name='wirelesslangroup_bulk_delete'),
path('wireless-lan-groups/<int:pk>/', include(get_model_urls('wireless', 'wirelesslangroup'))), path('wireless-lan-groups/<int:pk>/', include(get_model_urls('wireless', 'wirelesslangroup'))),
# Wireless LANs path('wireless-lans/', include(get_model_urls('wireless', 'wirelesslan', detail=False))),
path('wireless-lans/', views.WirelessLANListView.as_view(), name='wirelesslan_list'),
path('wireless-lans/add/', views.WirelessLANEditView.as_view(), name='wirelesslan_add'),
path('wireless-lans/import/', views.WirelessLANBulkImportView.as_view(), name='wirelesslan_import'),
path('wireless-lans/edit/', views.WirelessLANBulkEditView.as_view(), name='wirelesslan_bulk_edit'),
path('wireless-lans/delete/', views.WirelessLANBulkDeleteView.as_view(), name='wirelesslan_bulk_delete'),
path('wireless-lans/<int:pk>/', include(get_model_urls('wireless', 'wirelesslan'))), path('wireless-lans/<int:pk>/', include(get_model_urls('wireless', 'wirelesslan'))),
# Wireless links path('wireless-links/', include(get_model_urls('wireless', 'wirelesslink', detail=False))),
path('wireless-links/', views.WirelessLinkListView.as_view(), name='wirelesslink_list'),
path('wireless-links/add/', views.WirelessLinkEditView.as_view(), name='wirelesslink_add'),
path('wireless-links/import/', views.WirelessLinkBulkImportView.as_view(), name='wirelesslink_import'),
path('wireless-links/edit/', views.WirelessLinkBulkEditView.as_view(), name='wirelesslink_bulk_edit'),
path('wireless-links/delete/', views.WirelessLinkBulkDeleteView.as_view(), name='wirelesslink_bulk_delete'),
path('wireless-links/<int:pk>/', include(get_model_urls('wireless', 'wirelesslink'))), path('wireless-links/<int:pk>/', include(get_model_urls('wireless', 'wirelesslink'))),
) )

View File

@ -10,6 +10,7 @@ from .models import *
# Wireless LAN groups # Wireless LAN groups
# #
@register_model_view(WirelessLANGroup, 'list', path='', detail=False)
class WirelessLANGroupListView(generic.ObjectListView): class WirelessLANGroupListView(generic.ObjectListView):
queryset = WirelessLANGroup.objects.add_related_count( queryset = WirelessLANGroup.objects.add_related_count(
WirelessLANGroup.objects.all(), WirelessLANGroup.objects.all(),
@ -35,6 +36,7 @@ class WirelessLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
} }
@register_model_view(WirelessLANGroup, 'add', detail=False)
@register_model_view(WirelessLANGroup, 'edit') @register_model_view(WirelessLANGroup, 'edit')
class WirelessLANGroupEditView(generic.ObjectEditView): class WirelessLANGroupEditView(generic.ObjectEditView):
queryset = WirelessLANGroup.objects.all() queryset = WirelessLANGroup.objects.all()
@ -46,11 +48,13 @@ class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
queryset = WirelessLANGroup.objects.all() queryset = WirelessLANGroup.objects.all()
@register_model_view(WirelessLANGroup, 'import', detail=False)
class WirelessLANGroupBulkImportView(generic.BulkImportView): class WirelessLANGroupBulkImportView(generic.BulkImportView):
queryset = WirelessLANGroup.objects.all() queryset = WirelessLANGroup.objects.all()
model_form = forms.WirelessLANGroupImportForm model_form = forms.WirelessLANGroupImportForm
@register_model_view(WirelessLANGroup, 'bulk_edit', path='edit', detail=False)
class WirelessLANGroupBulkEditView(generic.BulkEditView): class WirelessLANGroupBulkEditView(generic.BulkEditView):
queryset = WirelessLANGroup.objects.add_related_count( queryset = WirelessLANGroup.objects.add_related_count(
WirelessLANGroup.objects.all(), WirelessLANGroup.objects.all(),
@ -64,6 +68,7 @@ class WirelessLANGroupBulkEditView(generic.BulkEditView):
form = forms.WirelessLANGroupBulkEditForm form = forms.WirelessLANGroupBulkEditForm
@register_model_view(WirelessLANGroup, 'bulk_delete', path='delete', detail=False)
class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView): class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
queryset = WirelessLANGroup.objects.add_related_count( queryset = WirelessLANGroup.objects.add_related_count(
WirelessLANGroup.objects.all(), WirelessLANGroup.objects.all(),
@ -80,6 +85,7 @@ class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
# Wireless LANs # Wireless LANs
# #
@register_model_view(WirelessLAN, 'list', path='', detail=False)
class WirelessLANListView(generic.ObjectListView): class WirelessLANListView(generic.ObjectListView):
queryset = WirelessLAN.objects.annotate( queryset = WirelessLAN.objects.annotate(
interface_count=count_related(Interface, 'wireless_lans') interface_count=count_related(Interface, 'wireless_lans')
@ -105,6 +111,7 @@ class WirelessLANView(generic.ObjectView):
} }
@register_model_view(WirelessLAN, 'add', detail=False)
@register_model_view(WirelessLAN, 'edit') @register_model_view(WirelessLAN, 'edit')
class WirelessLANEditView(generic.ObjectEditView): class WirelessLANEditView(generic.ObjectEditView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
@ -116,11 +123,13 @@ class WirelessLANDeleteView(generic.ObjectDeleteView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
@register_model_view(WirelessLAN, 'import', detail=False)
class WirelessLANBulkImportView(generic.BulkImportView): class WirelessLANBulkImportView(generic.BulkImportView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
model_form = forms.WirelessLANImportForm model_form = forms.WirelessLANImportForm
@register_model_view(WirelessLAN, 'bulk_edit', path='edit', detail=False)
class WirelessLANBulkEditView(generic.BulkEditView): class WirelessLANBulkEditView(generic.BulkEditView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
filterset = filtersets.WirelessLANFilterSet filterset = filtersets.WirelessLANFilterSet
@ -128,6 +137,7 @@ class WirelessLANBulkEditView(generic.BulkEditView):
form = forms.WirelessLANBulkEditForm form = forms.WirelessLANBulkEditForm
@register_model_view(WirelessLAN, 'bulk_delete', path='delete', detail=False)
class WirelessLANBulkDeleteView(generic.BulkDeleteView): class WirelessLANBulkDeleteView(generic.BulkDeleteView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
filterset = filtersets.WirelessLANFilterSet filterset = filtersets.WirelessLANFilterSet
@ -138,6 +148,7 @@ class WirelessLANBulkDeleteView(generic.BulkDeleteView):
# Wireless Links # Wireless Links
# #
@register_model_view(WirelessLink, 'list', path='', detail=False)
class WirelessLinkListView(generic.ObjectListView): class WirelessLinkListView(generic.ObjectListView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
filterset = filtersets.WirelessLinkFilterSet filterset = filtersets.WirelessLinkFilterSet
@ -150,6 +161,7 @@ class WirelessLinkView(generic.ObjectView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
@register_model_view(WirelessLink, 'add', detail=False)
@register_model_view(WirelessLink, 'edit') @register_model_view(WirelessLink, 'edit')
class WirelessLinkEditView(generic.ObjectEditView): class WirelessLinkEditView(generic.ObjectEditView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
@ -161,11 +173,13 @@ class WirelessLinkDeleteView(generic.ObjectDeleteView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
@register_model_view(WirelessLink, 'import', detail=False)
class WirelessLinkBulkImportView(generic.BulkImportView): class WirelessLinkBulkImportView(generic.BulkImportView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
model_form = forms.WirelessLinkImportForm model_form = forms.WirelessLinkImportForm
@register_model_view(WirelessLink, 'bulk_edit', path='edit', detail=False)
class WirelessLinkBulkEditView(generic.BulkEditView): class WirelessLinkBulkEditView(generic.BulkEditView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
filterset = filtersets.WirelessLinkFilterSet filterset = filtersets.WirelessLinkFilterSet
@ -173,6 +187,7 @@ class WirelessLinkBulkEditView(generic.BulkEditView):
form = forms.WirelessLinkBulkEditForm form = forms.WirelessLinkBulkEditForm
@register_model_view(WirelessLink, 'bulk_delete', path='delete', detail=False)
class WirelessLinkBulkDeleteView(generic.BulkDeleteView): class WirelessLinkBulkDeleteView(generic.BulkDeleteView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
filterset = filtersets.WirelessLinkFilterSet filterset = filtersets.WirelessLinkFilterSet