Skip to content

Commit fd76be0

Browse files
committed
Added custom serialize_object method to ScriptExecution to omit the data field
* Black formatting
1 parent 3b930a2 commit fd76be0

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

netbox_script_manager/api/serializers.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,29 @@ class Meta:
5050
)
5151

5252

53+
class NestedScriptInstanceSerializer(NetBoxModelSerializer):
54+
url = serializers.HyperlinkedIdentityField(view_name="plugins-api:netbox_script_manager-api:scriptinstance-detail")
55+
name = serializers.CharField(required=True)
56+
57+
class Meta:
58+
read_only_fields = ["module_path", "class_name"]
59+
model = ScriptInstance
60+
fields = (
61+
"id",
62+
"url",
63+
"name",
64+
"group",
65+
"weight",
66+
"module_path",
67+
"class_name",
68+
"display",
69+
"task_queues",
70+
"tags",
71+
"created",
72+
"last_updated",
73+
)
74+
75+
5376
class ScriptExecutionSerializer(NetBoxModelSerializer):
5477
url = serializers.HyperlinkedIdentityField(view_name="plugins-api:netbox_script_manager-api:scriptexecution-detail")
5578
script_instance = ScriptInstanceSerializer(read_only=True)

netbox_script_manager/api/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class ScriptInstanceViewSet(NetBoxModelViewSet):
3535
queryset = ScriptInstance.objects.all()
3636
serializer_class = ScriptInstanceSerializer
3737
filterset_class = ScriptInstanceFilterSet
38-
http_method_names = ['get', 'patch', 'delete']
38+
http_method_names = ["get", "patch", "delete"]
3939

4040
@action(detail=True, methods=["post"])
4141
def run(self, request, pk):

netbox_script_manager/models.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import importlib
2+
import json
23
import threading
34
from functools import cached_property
45

56
import django_rq
67
from django.conf import settings
78
from django.contrib.auth.models import User
89
from django.contrib.postgres.fields import ArrayField
10+
from django.core import serializers
911
from django.core.validators import MinValueValidator
1012
from django.db import models
1113
from django.urls import reverse
@@ -151,6 +153,18 @@ def delete(self, *args, **kwargs):
151153
if task:
152154
task.cancel()
153155

156+
def serialize_object(obj, resolve_tags=True, extra=None):
157+
"""
158+
While the netbox serialize_object claims to support excluding fields, it doesn't in reality.
159+
"""
160+
json_str = serializers.serialize("json", [obj])
161+
data = json.loads(json_str)[0]["fields"]
162+
163+
# Don't serialize the data field as it can be quite large
164+
data.pop("data")
165+
166+
return data
167+
154168
@property
155169
def duration(self):
156170
start_time = self.started or self.created

netbox_script_manager/views.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,20 @@ class ScriptExecutionObjectChangeView(generic.ObjectChildrenView):
202202
template_name = "netbox_script_manager/script_execution_objectchange_list.html"
203203
tab = ViewTab(
204204
label="Changes",
205-
badge=lambda obj: ObjectChange.objects.filter(request_id=str(obj.request_id)).exclude(changed_object_type=ContentType.objects.get_for_model(ScriptExecution)).count(),
205+
badge=lambda obj: ObjectChange.objects.filter(request_id=str(obj.request_id))
206+
.exclude(changed_object_type=ContentType.objects.get_for_model(ScriptExecution))
207+
.count(),
206208
permission="netbox_script_manager.view_scriptexecution",
207209
weight=500,
208210
hide_if_empty=False,
209211
)
210212

211213
def get_children(self, request, parent):
212-
return ObjectChange.objects.restrict(request.user, "view").filter(request_id=str(parent.request_id)).exclude(changed_object_type=ContentType.objects.get_for_model(ScriptExecution))
214+
return (
215+
ObjectChange.objects.restrict(request.user, "view")
216+
.filter(request_id=str(parent.request_id))
217+
.exclude(changed_object_type=ContentType.objects.get_for_model(ScriptExecution))
218+
)
213219

214220

215221
@register_model_view(models.ScriptExecution, "data")

0 commit comments

Comments
 (0)