From 8959d2e0a70d7e5063ceb14121e8d871977f2034 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 1 Jul 2020 12:08:26 -0400 Subject: [PATCH] #4416: Add individual delete views for organizational objects --- netbox/circuits/urls.py | 1 + netbox/circuits/views.py | 4 ++++ netbox/dcim/urls.py | 6 ++++++ netbox/dcim/views.py | 24 ++++++++++++++++++++++++ netbox/ipam/urls.py | 3 +++ netbox/ipam/views.py | 12 ++++++++++++ netbox/secrets/urls.py | 1 + netbox/secrets/views.py | 4 ++++ netbox/tenancy/urls.py | 1 + netbox/tenancy/views.py | 4 ++++ netbox/utilities/testing/views.py | 1 + netbox/virtualization/urls.py | 2 ++ netbox/virtualization/views.py | 8 ++++++++ 13 files changed, 71 insertions(+) diff --git a/netbox/circuits/urls.py b/netbox/circuits/urls.py index 1c0f0715b..86ea55fa8 100644 --- a/netbox/circuits/urls.py +++ b/netbox/circuits/urls.py @@ -25,6 +25,7 @@ urlpatterns = [ path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'), path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'), path('circuit-types//edit/', views.CircuitTypeEditView.as_view(), name='circuittype_edit'), + path('circuit-types//delete/', views.CircuitTypeDeleteView.as_view(), name='circuittype_delete'), path('circuit-types//changelog/', ObjectChangeLogView.as_view(), name='circuittype_changelog', kwargs={'model': CircuitType}), # Circuits diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 83b6fcd81..e2dc80816 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -99,6 +99,10 @@ class CircuitTypeEditView(ObjectEditView): model_form = forms.CircuitTypeForm +class CircuitTypeDeleteView(ObjectDeleteView): + queryset = CircuitType.objects.all() + + class CircuitTypeBulkImportView(BulkImportView): queryset = CircuitType.objects.all() model_form = forms.CircuitTypeCSVForm diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index 087f9db62..4d5964ee1 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -18,6 +18,7 @@ urlpatterns = [ path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'), path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'), path('regions//edit/', views.RegionEditView.as_view(), name='region_edit'), + path('regions//delete/', views.RegionDeleteView.as_view(), name='region_delete'), path('regions//changelog/', ObjectChangeLogView.as_view(), name='region_changelog', kwargs={'model': Region}), # Sites @@ -38,6 +39,7 @@ urlpatterns = [ path('rack-groups/import/', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'), path('rack-groups/delete/', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'), path('rack-groups//edit/', views.RackGroupEditView.as_view(), name='rackgroup_edit'), + path('rack-groups//delete/', views.RackGroupDeleteView.as_view(), name='rackgroup_delete'), path('rack-groups//changelog/', ObjectChangeLogView.as_view(), name='rackgroup_changelog', kwargs={'model': RackGroup}), # Rack roles @@ -46,6 +48,7 @@ urlpatterns = [ path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'), path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'), path('rack-roles//edit/', views.RackRoleEditView.as_view(), name='rackrole_edit'), + path('rack-roles//delete/', views.RackRoleDeleteView.as_view(), name='rackrole_delete'), path('rack-roles//changelog/', ObjectChangeLogView.as_view(), name='rackrole_changelog', kwargs={'model': RackRole}), # Rack reservations @@ -78,6 +81,7 @@ urlpatterns = [ path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'), path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'), path('manufacturers//edit/', views.ManufacturerEditView.as_view(), name='manufacturer_edit'), + path('manufacturers//delete/', views.ManufacturerDeleteView.as_view(), name='manufacturer_delete'), path('manufacturers//changelog/', ObjectChangeLogView.as_view(), name='manufacturer_changelog', kwargs={'model': Manufacturer}), # Device types @@ -153,6 +157,7 @@ urlpatterns = [ path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'), path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'), path('device-roles//edit/', views.DeviceRoleEditView.as_view(), name='devicerole_edit'), + path('device-roles//delete/', views.DeviceRoleDeleteView.as_view(), name='devicerole_delete'), path('device-roles//changelog/', ObjectChangeLogView.as_view(), name='devicerole_changelog', kwargs={'model': DeviceRole}), # Platforms @@ -161,6 +166,7 @@ urlpatterns = [ path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'), path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'), path('platforms//edit/', views.PlatformEditView.as_view(), name='platform_edit'), + path('platforms//delete/', views.PlatformDeleteView.as_view(), name='platform_delete'), path('platforms//changelog/', ObjectChangeLogView.as_view(), name='platform_changelog', kwargs={'model': Platform}), # Devices diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 3edc9b061..3eebbabae 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -122,6 +122,10 @@ class RegionEditView(ObjectEditView): model_form = forms.RegionForm +class RegionDeleteView(ObjectDeleteView): + queryset = Region.objects.all() + + class RegionBulkImportView(BulkImportView): queryset = Region.objects.all() model_form = forms.RegionCSVForm @@ -223,6 +227,10 @@ class RackGroupEditView(ObjectEditView): model_form = forms.RackGroupForm +class RackGroupDeleteView(ObjectDeleteView): + queryset = RackGroup.objects.all() + + class RackGroupBulkImportView(BulkImportView): queryset = RackGroup.objects.all() model_form = forms.RackGroupCSVForm @@ -249,6 +257,10 @@ class RackRoleEditView(ObjectEditView): model_form = forms.RackRoleForm +class RackRoleDeleteView(ObjectDeleteView): + queryset = RackRole.objects.all() + + class RackRoleBulkImportView(BulkImportView): queryset = RackRole.objects.all() model_form = forms.RackRoleCSVForm @@ -462,6 +474,10 @@ class ManufacturerEditView(ObjectEditView): model_form = forms.ManufacturerForm +class ManufacturerDeleteView(ObjectDeleteView): + queryset = Manufacturer.objects.all() + + class ManufacturerBulkImportView(BulkImportView): queryset = Manufacturer.objects.all() model_form = forms.ManufacturerCSVForm @@ -860,6 +876,10 @@ class DeviceRoleEditView(ObjectEditView): model_form = forms.DeviceRoleForm +class DeviceRoleDeleteView(ObjectDeleteView): + queryset = DeviceRole.objects.all() + + class DeviceRoleBulkImportView(BulkImportView): queryset = DeviceRole.objects.all() model_form = forms.DeviceRoleCSVForm @@ -885,6 +905,10 @@ class PlatformEditView(ObjectEditView): model_form = forms.PlatformForm +class PlatformDeleteView(ObjectDeleteView): + queryset = Platform.objects.all() + + class PlatformBulkImportView(BulkImportView): queryset = Platform.objects.all() model_form = forms.PlatformCSVForm diff --git a/netbox/ipam/urls.py b/netbox/ipam/urls.py index de8fc86eb..b2080c0a8 100644 --- a/netbox/ipam/urls.py +++ b/netbox/ipam/urls.py @@ -24,6 +24,7 @@ urlpatterns = [ path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'), path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'), path('rirs//edit/', views.RIREditView.as_view(), name='rir_edit'), + path('rirs//delete/', views.RIRDeleteView.as_view(), name='rir_delete'), path('vrfs//changelog/', ObjectChangeLogView.as_view(), name='rir_changelog', kwargs={'model': RIR}), # Aggregates @@ -43,6 +44,7 @@ urlpatterns = [ path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'), path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'), path('roles//edit/', views.RoleEditView.as_view(), name='role_edit'), + path('roles//delete/', views.RoleDeleteView.as_view(), name='role_delete'), path('roles//changelog/', ObjectChangeLogView.as_view(), name='role_changelog', kwargs={'model': Role}), # Prefixes @@ -77,6 +79,7 @@ urlpatterns = [ path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'), path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'), path('vlan-groups//edit/', views.VLANGroupEditView.as_view(), name='vlangroup_edit'), + path('vlan-groups//delete/', views.VLANGroupDeleteView.as_view(), name='vlangroup_delete'), path('vlan-groups//vlans/', views.VLANGroupVLANsView.as_view(), name='vlangroup_vlans'), path('vlan-groups//changelog/', ObjectChangeLogView.as_view(), name='vlangroup_changelog', kwargs={'model': VLANGroup}), diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 81e210958..5c0df3a16 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -160,6 +160,10 @@ class RIREditView(ObjectEditView): model_form = forms.RIRForm +class RIRDeleteView(ObjectDeleteView): + queryset = RIR.objects.all() + + class RIRBulkImportView(BulkImportView): queryset = RIR.objects.all() model_form = forms.RIRCSVForm @@ -290,6 +294,10 @@ class RoleEditView(ObjectEditView): model_form = forms.RoleForm +class RoleDeleteView(ObjectDeleteView): + queryset = Role.objects.all() + + class RoleBulkImportView(BulkImportView): queryset = Role.objects.all() model_form = forms.RoleCSVForm @@ -653,6 +661,10 @@ class VLANGroupEditView(ObjectEditView): model_form = forms.VLANGroupForm +class VLANGroupDeleteView(ObjectDeleteView): + queryset = VLANGroup.objects.all() + + class VLANGroupBulkImportView(BulkImportView): queryset = VLANGroup.objects.all() model_form = forms.VLANGroupCSVForm diff --git a/netbox/secrets/urls.py b/netbox/secrets/urls.py index 84c2da398..9dbb5d044 100644 --- a/netbox/secrets/urls.py +++ b/netbox/secrets/urls.py @@ -13,6 +13,7 @@ urlpatterns = [ path('secret-roles/import/', views.SecretRoleBulkImportView.as_view(), name='secretrole_import'), path('secret-roles/delete/', views.SecretRoleBulkDeleteView.as_view(), name='secretrole_bulk_delete'), path('secret-roles//edit/', views.SecretRoleEditView.as_view(), name='secretrole_edit'), + path('secret-roles//delete/', views.SecretRoleDeleteView.as_view(), name='secretrole_delete'), path('secret-roles//changelog/', ObjectChangeLogView.as_view(), name='secretrole_changelog', kwargs={'model': SecretRole}), # Secrets diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index fec7c65d1..e9ea1835f 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -38,6 +38,10 @@ class SecretRoleEditView(ObjectEditView): model_form = forms.SecretRoleForm +class SecretRoleDeleteView(ObjectDeleteView): + queryset = SecretRole.objects.all() + + class SecretRoleBulkImportView(BulkImportView): queryset = SecretRole.objects.all() model_form = forms.SecretRoleCSVForm diff --git a/netbox/tenancy/urls.py b/netbox/tenancy/urls.py index 4c65ce4e8..372308bb8 100644 --- a/netbox/tenancy/urls.py +++ b/netbox/tenancy/urls.py @@ -13,6 +13,7 @@ urlpatterns = [ path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'), path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'), path('tenant-groups//edit/', views.TenantGroupEditView.as_view(), name='tenantgroup_edit'), + path('tenant-groups//delete/', views.TenantGroupDeleteView.as_view(), name='tenantgroup_delete'), path('tenant-groups//changelog/', ObjectChangeLogView.as_view(), name='tenantgroup_changelog', kwargs={'model': TenantGroup}), # Tenants diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 26b1ce027..9ef44206c 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -32,6 +32,10 @@ class TenantGroupEditView(ObjectEditView): model_form = forms.TenantGroupForm +class TenantGroupDeleteView(ObjectDeleteView): + queryset = TenantGroup.objects.all() + + class TenantGroupBulkImportView(BulkImportView): queryset = TenantGroup.objects.all() model_form = forms.TenantGroupCSVForm diff --git a/netbox/utilities/testing/views.py b/netbox/utilities/testing/views.py index 12c811396..b4ca52246 100644 --- a/netbox/utilities/testing/views.py +++ b/netbox/utilities/testing/views.py @@ -905,6 +905,7 @@ class ViewTestCases: GetObjectChangelogViewTestCase, CreateObjectViewTestCase, EditObjectViewTestCase, + DeleteObjectViewTestCase, ListObjectsViewTestCase, BulkImportObjectsViewTestCase, BulkDeleteObjectsViewTestCase, diff --git a/netbox/virtualization/urls.py b/netbox/virtualization/urls.py index 34172ee88..3d6f07566 100644 --- a/netbox/virtualization/urls.py +++ b/netbox/virtualization/urls.py @@ -14,6 +14,7 @@ urlpatterns = [ path('cluster-types/import/', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'), path('cluster-types/delete/', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'), path('cluster-types//edit/', views.ClusterTypeEditView.as_view(), name='clustertype_edit'), + path('cluster-types//delete/', views.ClusterTypeDeleteView.as_view(), name='clustertype_delete'), path('cluster-types//changelog/', ObjectChangeLogView.as_view(), name='clustertype_changelog', kwargs={'model': ClusterType}), # Cluster groups @@ -22,6 +23,7 @@ urlpatterns = [ path('cluster-groups/import/', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'), path('cluster-groups/delete/', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'), path('cluster-groups//edit/', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'), + path('cluster-groups//delete/', views.ClusterGroupDeleteView.as_view(), name='clustergroup_delete'), path('cluster-groups//changelog/', ObjectChangeLogView.as_view(), name='clustergroup_changelog', kwargs={'model': ClusterGroup}), # Clusters diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 478fead94..176c89f2e 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -31,6 +31,10 @@ class ClusterTypeEditView(ObjectEditView): model_form = forms.ClusterTypeForm +class ClusterTypeDeleteView(ObjectDeleteView): + queryset = ClusterType.objects.all() + + class ClusterTypeBulkImportView(BulkImportView): queryset = ClusterType.objects.all() model_form = forms.ClusterTypeCSVForm @@ -56,6 +60,10 @@ class ClusterGroupEditView(ObjectEditView): model_form = forms.ClusterGroupForm +class ClusterGroupDeleteView(ObjectDeleteView): + queryset = ClusterGroup.objects.all() + + class ClusterGroupBulkImportView(BulkImportView): queryset = ClusterGroup.objects.all() model_form = forms.ClusterGroupCSVForm