From d9ea44e4e5044e16d10a9b88f83928f5adaef18d Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Sun, 15 Sep 2024 09:35:45 +0000 Subject: [PATCH 1/8] Add dates to device and devicetype pages --- netbox_lifecycle/template_content.py | 42 +++++++++++++++++++ .../inc/device_lifecycle_info.html | 36 ++++++++++++++++ .../inc/support_contract_info.html | 32 ++++++++++++++ netbox_lifecycle/templatetags/__init__.py | 0 netbox_lifecycle/templatetags/filters.py | 27 ++++++++++++ 5 files changed, 137 insertions(+) create mode 100644 netbox_lifecycle/template_content.py create mode 100644 netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html create mode 100644 netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html create mode 100644 netbox_lifecycle/templatetags/__init__.py create mode 100644 netbox_lifecycle/templatetags/filters.py diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py new file mode 100644 index 0000000..78a5df8 --- /dev/null +++ b/netbox_lifecycle/template_content.py @@ -0,0 +1,42 @@ + +from datetime import datetime + +from django.core.exceptions import ObjectDoesNotExist +from django.template import Template +from netbox.plugins import PluginTemplateExtension + +from .models import hardware, contract + +class DeviceHardwareInfoExtension(PluginTemplateExtension): + model = 'dcim.device' + + def right_page(self): + object = self.context.get('object') + support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() + hardware_lifecycle = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type.id).first() + context = {'support_contract': support_contract, 'hardware_lifecycle': hardware_lifecycle} + return self.render('netbox_lifecycle/inc/support_contract_info.html', extra_context=context) + +class DeviceHardwareLifecycleInfo(DeviceHardwareInfoExtension): + model = 'dcim.device' + kind = 'device' + + +class DeviceTypeInfoExtension(PluginTemplateExtension): + model = 'dcim.devicetype' + + def right_page(self): + object = self.context.get('object') + hardware_lifecycle = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() + context = {'hardware_lifecycle': hardware_lifecycle} + return self.render('netbox_lifecycle/inc/device_lifecycle_info.html', extra_context=context) + +class DeviceTypeHardwareLifecycleInfo(DeviceTypeInfoExtension): + model = 'dcim.devicetype' + kind = 'devicetype' + + +template_extensions = ( + DeviceHardwareLifecycleInfo, + DeviceTypeHardwareLifecycleInfo, +) \ No newline at end of file diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html new file mode 100644 index 0000000..57bca38 --- /dev/null +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html @@ -0,0 +1,36 @@ + +{% load filters %} +{% load helpers %} +{# renders panel on object (device) with hardware lifecycle info assigned to it #} + +
+
Lifecycle Dates
+ {% if hardware_lifecycle %} + + + + + + + + + + + + + + + + + + + + + +
End of Sale{{ hardware_lifecycle.end_of_sale }}
End of Maintenance Updates{{ hardware_lifecycle.end_of_maintenance }}
End of Security Updates{{ hardware_lifecycle.end_of_security }}
Last Support Contract Purchase Date{{ hardware_lifecycle.last_contract_date }}
End of Support{{ hardware_lifecycle.end_of_support }}
+ {% else %} +
No Lifecycle Dates Defined
+ {% endif %} +
+ + diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html new file mode 100644 index 0000000..1adbcb0 --- /dev/null +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html @@ -0,0 +1,32 @@ + +{% load filters %} +{% load helpers %} +{# renders panel on object (device) with support contract info assigned to it #} + +
+
Support Contract
+ {% if support_contract %} + + + + + + + + + + + + + + + + + +
Contract Number{{ support_contract.contract.contract_id|linkify|placeholder }}
Support SKU{{ support_contract.sku }}
Start Date{{ support_contract.contract.start }}
End Date{{ support_contract.contract.end }}
+ {% else %} +
No Support Contract Assigned
+ {% endif %} +
+ +{% include "netbox_lifecycle/inc/device_lifecycle_info.html" %} \ No newline at end of file diff --git a/netbox_lifecycle/templatetags/__init__.py b/netbox_lifecycle/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/netbox_lifecycle/templatetags/filters.py b/netbox_lifecycle/templatetags/filters.py new file mode 100644 index 0000000..5bba34a --- /dev/null +++ b/netbox_lifecycle/templatetags/filters.py @@ -0,0 +1,27 @@ +from datetime import datetime, date +from dateutil.relativedelta import relativedelta +from django import template +from django.utils.safestring import mark_safe + +register = template.Library() + + +def is_expired(value): + return value < datetime.now().date() + + +def expires_within_six_months(value): + return value < (date.today() + relativedelta(months=+6)) + + +@register.filter(is_safe=True) +def date_badge_class(value): + if not value: + return + + if is_expired(value): + return mark_safe('class="badge text-bg-danger"') + elif expires_within_six_months(value): + return mark_safe('class="badge text-bg-warning"') + else: + return mark_safe('class="badge text-bg-success"') \ No newline at end of file From 9e83fbfc8c8afc1b0c2e14740ac1ce8fd4792b71 Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Sun, 15 Sep 2024 14:52:21 +0000 Subject: [PATCH 2/8] Fixed custom date on device vs contract --- .../templates/netbox_lifecycle/inc/support_contract_info.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html index 1adbcb0..7b03f61 100644 --- a/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html @@ -21,7 +21,11 @@
Support Contract
End Date + {% if support_contract.end == None %} {{ support_contract.contract.end }} + {% else %} + {{ support_contract.end }} + {% endif %} {% else %} From 250e3243636cb6c28de8aaf7f5295c8add6be5e3 Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Sun, 22 Sep 2024 05:25:48 +0000 Subject: [PATCH 3/8] Comments incorporated to fix up differences between module and devices --- netbox_lifecycle/template_content.py | 49 ++++++++++++++----- .../netbox_lifecycle/hardwarelifecycle.html | 19 ++++--- .../inc/device_lifecycle_info.html | 36 -------------- .../inc/hardware_lifecycle_info.html | 34 +++++++++++++ .../inc/support_contract_info.html | 2 +- netbox_lifecycle/templatetags/filters.py | 2 +- 6 files changed, 84 insertions(+), 58 deletions(-) delete mode 100644 netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html create mode 100644 netbox_lifecycle/templates/netbox_lifecycle/inc/hardware_lifecycle_info.html diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index 78a5df8..6650ea9 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -8,35 +8,58 @@ from .models import hardware, contract class DeviceHardwareInfoExtension(PluginTemplateExtension): - model = 'dcim.device' - def right_page(self): object = self.context.get('object') support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() - hardware_lifecycle = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type.id).first() - context = {'support_contract': support_contract, 'hardware_lifecycle': hardware_lifecycle} + match self.kind: + case "device": + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() + case "module": + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() + case _: + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() + context = {'support_contract': support_contract, 'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/support_contract_info.html', extra_context=context) - + + +class TypeInfoExtension(PluginTemplateExtension): + def right_page(self): + object = self.context.get('object') + match self.kind: + case "device": + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() + case "module": + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() + case _: + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() + + context = {'lifecycle_info': lifecycle_info} + return self.render('netbox_lifecycle/inc/hardware_lifecycle_info.html', extra_context=context) + + class DeviceHardwareLifecycleInfo(DeviceHardwareInfoExtension): model = 'dcim.device' kind = 'device' -class DeviceTypeInfoExtension(PluginTemplateExtension): - model = 'dcim.devicetype' +class ModuleHardwareLifecycleInfo(TypeInfoExtension): + model = 'dcim.module' + kind = 'module' - def right_page(self): - object = self.context.get('object') - hardware_lifecycle = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() - context = {'hardware_lifecycle': hardware_lifecycle} - return self.render('netbox_lifecycle/inc/device_lifecycle_info.html', extra_context=context) -class DeviceTypeHardwareLifecycleInfo(DeviceTypeInfoExtension): +class DeviceTypeHardwareLifecycleInfo(TypeInfoExtension): model = 'dcim.devicetype' kind = 'devicetype' +class ModuleTypeHardwareLifecycleInfo(TypeInfoExtension): + model = 'dcim.moduletype' + kind = 'moduletype' + + template_extensions = ( DeviceHardwareLifecycleInfo, + ModuleHardwareLifecycleInfo, DeviceTypeHardwareLifecycleInfo, + ModuleTypeHardwareLifecycleInfo, ) \ No newline at end of file diff --git a/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html b/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html index f77d69d..7911217 100644 --- a/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html +++ b/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html @@ -2,6 +2,7 @@ {% load buttons %} {% load custom_links %} {% load helpers %} +{% load filters %} {% load perms %} {% load plugins %} {% load tabs %} @@ -14,13 +15,17 @@
{{ object.assigned_object_type.name|capfirst}}
- + - + + + + +
ManufacturerManufacturer {{ object.assigned_object.manufacturer|linkify }}
ObjectObject {{ object.assigned_object|linkify }}
Description{{ object.assigned_object.description }}
@@ -30,23 +35,23 @@
Dates
- + - + - + - + - +
End of Sale{{ object.end_of_sale }}{{ object.end_of_sale }}
End of Maintenance Updates{{ object.end_of_maintenance }}{{ object.end_of_maintenance }}
End of Security Updates{{ object.end_of_security }}{{ object.end_of_security }}
Last Support Contract Purchase Date{{ object.last_contract_date }}{{ object.last_contract_date }}
End of Support{{ object.end_of_support }}{{ object.end_of_support }}
diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html deleted file mode 100644 index 57bca38..0000000 --- a/netbox_lifecycle/templates/netbox_lifecycle/inc/device_lifecycle_info.html +++ /dev/null @@ -1,36 +0,0 @@ - -{% load filters %} -{% load helpers %} -{# renders panel on object (device) with hardware lifecycle info assigned to it #} - -
-
Lifecycle Dates
- {% if hardware_lifecycle %} - - - - - - - - - - - - - - - - - - - - - -
End of Sale{{ hardware_lifecycle.end_of_sale }}
End of Maintenance Updates{{ hardware_lifecycle.end_of_maintenance }}
End of Security Updates{{ hardware_lifecycle.end_of_security }}
Last Support Contract Purchase Date{{ hardware_lifecycle.last_contract_date }}
End of Support{{ hardware_lifecycle.end_of_support }}
- {% else %} -
No Lifecycle Dates Defined
- {% endif %} -
- - diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/hardware_lifecycle_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/hardware_lifecycle_info.html new file mode 100644 index 0000000..a639d88 --- /dev/null +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/hardware_lifecycle_info.html @@ -0,0 +1,34 @@ + +{% load filters %} +{% load helpers %} +{# renders panel on object with lifecycle info assigned to it #} + +
+
Lifecycle Dates
+ {% if lifecycle_info %} + + + + + + + + + + + + + + + + + + + + + +
End of Sale{{ lifecycle_info.end_of_sale }}
End of Maintenance Updates{{ lifecycle_info.end_of_maintenance }}
End of Security Updates{{ lifecycle_info.end_of_security }}
Last Support Contract Purchase Date{{ lifecycle_info.last_contract_date }}
End of Support{{ lifecycle_info.end_of_support }}
+ {% else %} +
No Lifecycle Dates Defined
+ {% endif %} +
diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html index 7b03f61..3919229 100644 --- a/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/support_contract_info.html @@ -33,4 +33,4 @@
Support Contract
{% endif %} -{% include "netbox_lifecycle/inc/device_lifecycle_info.html" %} \ No newline at end of file +{% include "netbox_lifecycle/inc/hardware_lifecycle_info.html" %} diff --git a/netbox_lifecycle/templatetags/filters.py b/netbox_lifecycle/templatetags/filters.py index 5bba34a..7efb587 100644 --- a/netbox_lifecycle/templatetags/filters.py +++ b/netbox_lifecycle/templatetags/filters.py @@ -24,4 +24,4 @@ def date_badge_class(value): elif expires_within_six_months(value): return mark_safe('class="badge text-bg-warning"') else: - return mark_safe('class="badge text-bg-success"') \ No newline at end of file + return mark_safe('class="badge text-bg-success"') From 0029d2d47947038a950237070caaf5c2513e62ce Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Sun, 22 Sep 2024 05:45:48 +0000 Subject: [PATCH 4/8] Fixup PEP8 Compliance Issues --- netbox_lifecycle/template_content.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index 6650ea9..2ac020f 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -7,16 +7,17 @@ from .models import hardware, contract + class DeviceHardwareInfoExtension(PluginTemplateExtension): def right_page(self): object = self.context.get('object') support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() match self.kind: - case "device": + case "device": lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() - case "module": + case "module": lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() - case _: + case _: lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() context = {'support_contract': support_contract, 'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/support_contract_info.html', extra_context=context) @@ -26,13 +27,13 @@ class TypeInfoExtension(PluginTemplateExtension): def right_page(self): object = self.context.get('object') match self.kind: - case "device": + case "device": lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() - case "module": + case "module": lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() - case _: + case _: lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() - + context = {'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/hardware_lifecycle_info.html', extra_context=context) @@ -62,4 +63,4 @@ class ModuleTypeHardwareLifecycleInfo(TypeInfoExtension): ModuleHardwareLifecycleInfo, DeviceTypeHardwareLifecycleInfo, ModuleTypeHardwareLifecycleInfo, -) \ No newline at end of file +) From 5758a868723ea54902b0da94be4b456824103d29 Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Mon, 23 Sep 2024 00:55:03 +0000 Subject: [PATCH 5/8] Reverted description change --- .../templates/netbox_lifecycle/hardwarelifecycle.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html b/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html index 7911217..197ea46 100644 --- a/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html +++ b/netbox_lifecycle/templates/netbox_lifecycle/hardwarelifecycle.html @@ -24,7 +24,7 @@
{{ object.assigned_object_type.name|capfirst}}
Description - {{ object.assigned_object.description }} + {{ object.description }} From 7f4d1b08c66b64debbd62d4e05452c7685dc8cbd Mon Sep 17 00:00:00 2001 From: Nate Reeves Date: Tue, 24 Sep 2024 13:32:56 +0000 Subject: [PATCH 6/8] Fixes up incorrect selection of lifecycle record on moduletype and devicetype pages. --- netbox_lifecycle/template_content.py | 34 ++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index 2ac020f..24c5f75 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -1,7 +1,5 @@ -from datetime import datetime - -from django.core.exceptions import ObjectDoesNotExist +from django.contrib.contenttypes.models import ContentType from django.template import Template from netbox.plugins import PluginTemplateExtension @@ -14,11 +12,20 @@ def right_page(self): support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() match self.kind: case "device": - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() + content_type = ContentType.objects.get(app_label="dcim", model="devicetype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id, + assigned_object_type_id=content_type.id).first() case "module": - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() + content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id, + assigned_object_type_id=content_type.id).first() case _: - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() + if (self.kind == "devicetype"): + content_type = ContentType.objects.get(app_label="dcim", model="devicetype") + else: + content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, + assigned_object_type_id=content_type.id).first() context = {'support_contract': support_contract, 'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/support_contract_info.html', extra_context=context) @@ -28,11 +35,20 @@ def right_page(self): object = self.context.get('object') match self.kind: case "device": - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id).first() + content_type = ContentType.objects.get(app_label="dcim", model="devicetype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].device_type_id, + assigned_object_type_id=content_type.id).first() case "module": - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id).first() + content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id, + assigned_object_type_id=content_type.id).first() case _: - lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id).first() + if (self.kind == "devicetype"): + content_type = ContentType.objects.get(app_label="dcim", model="devicetype") + else: + content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, + assigned_object_type_id=content_type.id).first() context = {'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/hardware_lifecycle_info.html', extra_context=context) From 21833114ccf894177421110981ad11a7f44858b0 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Fri, 4 Oct 2024 09:35:55 -0500 Subject: [PATCH 7/8] Make minor changes to case statement --- netbox_lifecycle/template_content.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index 24c5f75..a320380 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -19,11 +19,8 @@ def right_page(self): content_type = ContentType.objects.get(app_label="dcim", model="moduletype") lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id, assigned_object_type_id=content_type.id).first() - case _: - if (self.kind == "devicetype"): - content_type = ContentType.objects.get(app_label="dcim", model="devicetype") - else: - content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + case "devicetype"|"moduletype": + content_type = ContentType.objects.get(app_label="dcim", model=self.kind) lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, assigned_object_type_id=content_type.id).first() context = {'support_contract': support_contract, 'lifecycle_info': lifecycle_info} @@ -42,11 +39,8 @@ def right_page(self): content_type = ContentType.objects.get(app_label="dcim", model="moduletype") lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id, assigned_object_type_id=content_type.id).first() - case _: - if (self.kind == "devicetype"): - content_type = ContentType.objects.get(app_label="dcim", model="devicetype") - else: - content_type = ContentType.objects.get(app_label="dcim", model="moduletype") + case "devicetype" | "moduletype": + content_type = ContentType.objects.get(app_label="dcim", model=self.kind) lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, assigned_object_type_id=content_type.id).first() From f3cfc657689457e7d850ff7194fd9cee4a83804d Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Fri, 4 Oct 2024 11:55:12 -0500 Subject: [PATCH 8/8] Add missing whitespace --- netbox_lifecycle/template_content.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index a320380..44837c7 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -19,7 +19,7 @@ def right_page(self): content_type = ContentType.objects.get(app_label="dcim", model="moduletype") lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].module_type_id, assigned_object_type_id=content_type.id).first() - case "devicetype"|"moduletype": + case "devicetype" | "moduletype": content_type = ContentType.objects.get(app_label="dcim", model=self.kind) lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, assigned_object_type_id=content_type.id).first()