Misc cleanup

This commit is contained in:
Jeremy Stretch 2024-02-22 09:33:24 -05:00
parent a2b2a1d57f
commit 2d206fbe8b
2 changed files with 8 additions and 16 deletions

View File

@ -1,5 +1,4 @@
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.http import Http404
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django_rq.queues import get_connection from django_rq.queues import get_connection
from rest_framework import status from rest_framework import status
@ -15,7 +14,7 @@ from rq import Worker
from core.models import Job from core.models import Job
from extras import filtersets from extras import filtersets
from extras.models import * from extras.models import *
from extras.scripts import get_module_and_script, run_script from extras.scripts import run_script
from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired
from netbox.api.features import SyncedDataMixin from netbox.api.features import SyncedDataMixin
from netbox.api.metadata import ContentTypeMetadata from netbox.api.metadata import ContentTypeMetadata
@ -217,15 +216,8 @@ class ScriptViewSet(ModelViewSet):
_ignore_model_permissions = True _ignore_model_permissions = True
lookup_value_regex = '[^/]+' # Allow dots lookup_value_regex = '[^/]+' # Allow dots
def _get_script(self, pk):
pk = int(pk)
script = get_object_or_404(self.queryset, pk=pk)
module = script.module
return module, script
def retrieve(self, request, pk): def retrieve(self, request, pk):
module, script = self._get_script(pk) script = get_object_or_404(self.queryset, pk=pk)
serializer = serializers.ScriptDetailSerializer(script, context={'request': request}) serializer = serializers.ScriptDetailSerializer(script, context={'request': request})
return Response(serializer.data) return Response(serializer.data)
@ -238,7 +230,7 @@ class ScriptViewSet(ModelViewSet):
if not request.user.has_perm('extras.run_script'): if not request.user.has_perm('extras.run_script'):
raise PermissionDenied("This user does not have permission to run scripts.") raise PermissionDenied("This user does not have permission to run scripts.")
module, script = self._get_script(pk) script = get_object_or_404(self.queryset, pk=pk)
input_serializer = serializers.ScriptInputSerializer( input_serializer = serializers.ScriptInputSerializer(
data=request.data, data=request.data,
context={'script': script} context={'script': script}
@ -251,7 +243,7 @@ class ScriptViewSet(ModelViewSet):
if input_serializer.is_valid(): if input_serializer.is_valid():
script.result = Job.enqueue( script.result = Job.enqueue(
run_script, run_script,
instance=module, instance=script.module,
name=script.python_class.class_name, name=script.python_class.class_name,
user=request.user, user=request.user,
data=input_serializer.data['data'], data=input_serializer.data['data'],

View File

@ -75,12 +75,12 @@ class Script(EventRulesMixin, JobsMixin):
def python_class(self): def python_class(self):
return self.module.module_scripts.get(self.name) return self.module.module_scripts.get(self.name)
def delete(self, soft_delete=False): def delete(self, soft_delete=False, **kwargs):
if soft_delete and self.jobs.exists(): if soft_delete and self.jobs.exists():
self.is_executable = False self.is_executable = False
self.save() self.save()
else: else:
super().delete() super().delete(**kwargs)
self.id = None self.id = None
@ -134,8 +134,8 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile):
def sync_classes(self): def sync_classes(self):
""" """
Sync's the file based module to the database objects - adding and Syncs the file-based module to the database, adding and removing individual Script objects
removing python classes from the DB as appropriate. in the database as needed.
""" """
db_classes = { db_classes = {
script.name: script for script in self.scripts.all() script.name: script for script in self.scripts.all()