Skip to content

Commit

Permalink
refactor: better View class use and fix typo
Browse files Browse the repository at this point in the history
  • Loading branch information
kpetremann committed Aug 22, 2024
1 parent af271b2 commit a1267ef
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 56 deletions.
10 changes: 5 additions & 5 deletions netbox_cmdb/netbox_cmdb/template_content.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
from extras.plugins import PluginTemplateExtension


class DecommisioningBase(PluginTemplateExtension):
class DecommissioningBase(PluginTemplateExtension):
def buttons(self):
return (
f'<a href="/plugins/cmdb/decommisioning/{self.obj}/{self.context["object"].id}/delete" '
f'<a href="/plugins/cmdb/decommissioning/{self.obj}/{self.context["object"].id}/delete" '
'class="btn btn-sm btn-danger">Decommission</a>'
)


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]
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
</p>
<form
hx-target="#_content"
hx-post="/plugins/cmdb/decommisioning/{{ object_type }}/{{ object.id }}/delete"
hx-post="/plugins/cmdb/decommissioning/{{ object_type }}/{{ object.id }}/delete"
>
{% csrf_token %}
<button class="btn btn-sm btn-danger">Confirm</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
<input type="hidden" name="chunks" value="{{ chunks }}" />
Expand Down
8 changes: 4 additions & 4 deletions netbox_cmdb/netbox_cmdb/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@

urlpatterns = [
path(
"decommisioning/device/<int:pk>/delete",
"decommissioning/device/<int:pk>/delete",
DeviceDecommissioningView.as_view(),
name="device_decommisioning_delete",
name="device_decommissioning_delete",
),
path(
"decommisioning/site/<int:pk>/delete",
"decommissioning/site/<int:pk>/delete",
SiteDecommissioningView.as_view(),
name="site_decommisioning_delete",
name="site_decommissioning_delete",
),
# ASN
path("asn/", ASNListView.as_view(), name="asn_list"),
Expand Down
80 changes: 35 additions & 45 deletions netbox_cmdb/netbox_cmdb/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand All @@ -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
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit a1267ef

Please sign in to comment.