From a1267ef262e59758399fe608f42b05d9fecccada Mon Sep 17 00:00:00 2001 From: Kevin Petremann Date: Thu, 22 Aug 2024 10:42:22 +0200 Subject: [PATCH] refactor: better View class use and fix typo --- netbox_cmdb/netbox_cmdb/template_content.py | 10 +-- .../netbox_cmdb/decommissioning/base.html | 2 +- .../decommissioning/site_progressive.html | 2 +- netbox_cmdb/netbox_cmdb/urls.py | 8 +- netbox_cmdb/netbox_cmdb/views.py | 80 ++++++++----------- 5 files changed, 46 insertions(+), 56 deletions(-) diff --git a/netbox_cmdb/netbox_cmdb/template_content.py b/netbox_cmdb/netbox_cmdb/template_content.py index b988644..b869993 100644 --- a/netbox_cmdb/netbox_cmdb/template_content.py +++ b/netbox_cmdb/netbox_cmdb/template_content.py @@ -1,22 +1,22 @@ from extras.plugins import PluginTemplateExtension -class DecommisioningBase(PluginTemplateExtension): +class DecommissioningBase(PluginTemplateExtension): def buttons(self): return ( - f'Decommission' ) -class DeviceDecommisioning(DecommisioningBase): +class DeviceDecommissioning(DecommissioningBase): model = "dcim.device" obj = "device" -class SiteDecommisioning(DecommisioningBase): +class SiteDecommissioning(DecommissioningBase): model = "dcim.site" obj = "site" -template_extensions = [DeviceDecommisioning, SiteDecommisioning] +template_extensions = [DeviceDecommissioning, SiteDecommissioning] diff --git a/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/base.html b/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/base.html index 3e5310d..55093e1 100644 --- a/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/base.html +++ b/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/base.html @@ -20,7 +20,7 @@

{% csrf_token %} diff --git a/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/site_progressive.html b/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/site_progressive.html index 77d25ee..41a03c8 100644 --- a/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/site_progressive.html +++ b/netbox_cmdb/netbox_cmdb/templates/netbox_cmdb/decommissioning/site_progressive.html @@ -3,7 +3,7 @@ hx-target="#_content" hx-trigger="load" hx-include="*" - hx-post="/plugins/cmdb/decommisioning/{{ object_type }}/{{ object.id }}/delete" + hx-post="/plugins/cmdb/decommissioning/{{ object_type }}/{{ object.id }}/delete" > {% csrf_token %} diff --git a/netbox_cmdb/netbox_cmdb/urls.py b/netbox_cmdb/netbox_cmdb/urls.py index 748980d..6943f3b 100644 --- a/netbox_cmdb/netbox_cmdb/urls.py +++ b/netbox_cmdb/netbox_cmdb/urls.py @@ -40,14 +40,14 @@ urlpatterns = [ path( - "decommisioning/device//delete", + "decommissioning/device//delete", DeviceDecommissioningView.as_view(), - name="device_decommisioning_delete", + name="device_decommissioning_delete", ), path( - "decommisioning/site//delete", + "decommissioning/site//delete", SiteDecommissioningView.as_view(), - name="site_decommisioning_delete", + name="site_decommissioning_delete", ), # ASN path("asn/", ASNListView.as_view(), name="asn_list"), diff --git a/netbox_cmdb/netbox_cmdb/views.py b/netbox_cmdb/netbox_cmdb/views.py index b4e508e..7af3e40 100644 --- a/netbox_cmdb/netbox_cmdb/views.py +++ b/netbox_cmdb/netbox_cmdb/views.py @@ -62,54 +62,31 @@ class DecommissioningBaseView(ObjectDeleteView): device_template_name = "netbox_cmdb/decommissioning/device_summary.html" base_form_url = "" - def get(self, request, *args, **kwargs): - """ - GET request handler. - Args: - request: The current request - """ - object = self.get_object(**kwargs) +class DeviceDecommissioningView(DecommissioningBaseView): + base_form_url = "/plugins/cmdb/decommissioning/device" + queryset = Device.objects.all() + + def get(self, request, *args, **kwargs): + device = self.get_object(**kwargs) form = ConfirmationForm(initial=request.GET) - devices = [] - - if isinstance(object, Device): - devices.append(object) - object_type = "device" - elif isinstance(object, Site): - devices = Device.objects.filter(site=object.id) - object_type = "site" - else: - error = f"{type(object)} decommissioning is not supported" - return render(request, self.template_name, context={"error": error}) return render( request, self.template_name, { - "object": object, - "object_type": object_type, + "object": device, + "object_type": "device", "form": form, - "return_url": self.get_return_url(request, object), - **self.get_extra_context(request, object), + "return_url": self.get_return_url(request, device), + **self.get_extra_context(request, device), }, ) def post(self, request, *args, **kwargs): # Fetch the device to delete - object = self.get_object(**kwargs) + device = self.get_object(**kwargs) - if isinstance(object, Device): - return self._device_cleaning(request, object, *args, **kwargs) - - elif isinstance(object, Site): - return self._site_cleaning(request, object, *args, **kwargs) - - else: - error = f"{type(object)} decommissioning is not supported" - return render(request, self.template_name, context={"error": error}) - - def _device_cleaning(self, request, device, *args, **kwargs): try: with transaction.atomic(): deleted = cleaning.clean_cmdb_for_devices([device.id]) @@ -127,7 +104,30 @@ def _device_cleaning(self, request, device, *args, **kwargs): context={"deleted_device": device.name, "deleted_objects": deleted}, ) - def _site_cleaning(self, request, site, *args, **kwargs): + +class SiteDecommissioningView(DecommissioningBaseView): + base_form_url = "/plugins/cmdb/decommissioning/site" + queryset = Site.objects.all() + + def get(self, request, *args, **kwargs): + site = self.get_object(**kwargs) + form = ConfirmationForm(initial=request.GET) + + return render( + request, + self.template_name, + { + "object": site, + "object_type": "site", + "form": form, + "return_url": self.get_return_url(request, site), + **self.get_extra_context(request, site), + }, + ) + + def post(self, request, *args, **kwargs): + # Fetch the device to delete + site = self.get_object(**kwargs) devices = Device.objects.filter(site=site.id) # Get list of devices to delete @@ -224,16 +224,6 @@ def _site_cleaning(self, request, site, *args, **kwargs): ) -class DeviceDecommissioningView(DecommissioningBaseView): - base_form_url = "/plugins/cmdb/decommisioning/device" - queryset = Device.objects.all() - - -class SiteDecommissioningView(DecommissioningBaseView): - base_form_url = "/plugins/cmdb/decommisioning/site" - queryset = Site.objects.all() - - ## ASN views class ASNListView(ObjectListView): queryset = ASN.objects.all()