14438 init_vars_or_redirect

This commit is contained in:
Arthur 2024-02-16 13:17:52 -08:00
parent 34d3c122e4
commit f9608f7376
4 changed files with 32 additions and 5 deletions

View File

@ -212,7 +212,7 @@ class ScriptViewSet(ModelViewSet):
permission_classes = [IsAuthenticatedOrLoginNotRequired]
queryset = Script.objects.prefetch_related('jobs')
serializer_class = serializers.ScriptSerializer
# filterset_class = filtersets.ScriptFilterSet
filterset_class = filtersets.ScriptFilterSet
_ignore_model_permissions = True
schema = None

View File

@ -29,11 +29,32 @@ __all__ = (
'LocalConfigContextFilterSet',
'ObjectChangeFilterSet',
'SavedFilterFilterSet',
'ScriptFilterSet',
'TagFilterSet',
'WebhookFilterSet',
)
class ScriptFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter(
method='search',
label=_('Search'),
)
class Meta:
model = Webhook
fields = [
'id', 'name',
]
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value)
)
class WebhookFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter(
method='search',

View File

@ -65,6 +65,10 @@ class Script(EventRulesMixin, JobsMixin, models.Model):
def get_absolute_url(self):
return reverse('extras:script', args=[self.pk])
@property
def result(self):
return self.jobs.all().order_by('-created').first()
@cached_property
def python_class(self):
return self.module.module_scripts.get(self.name)

View File

@ -1025,6 +1025,8 @@ class ScriptModuleDeleteView(generic.ObjectDeleteView):
class ScriptListView(ContentTypePermissionRequiredMixin, View):
filterset = filtersets.CustomFieldFilterSet
filterset_form = forms.CustomFieldFilterForm
def get_required_permission(self):
return 'extras.view_script'
@ -1065,7 +1067,7 @@ class BaseScriptView(ContentTypePermissionRequiredMixin, generic.ObjectView):
self.jobs = self.script.jobs.all()
return None
def get_script(self, request, pk):
def init_vars_or_redirect(self, request, pk):
self.script = get_object_or_404(Script.objects.all(), pk=pk)
return self._init_vars(request)
@ -1073,7 +1075,7 @@ class BaseScriptView(ContentTypePermissionRequiredMixin, generic.ObjectView):
class ScriptView(BaseScriptView):
def get(self, request, pk):
if ret := self.get_script(request, pk):
if ret := self.init_vars_or_redirect(request, pk):
return ret
form = None
@ -1092,7 +1094,7 @@ class ScriptView(BaseScriptView):
if not request.user.has_perm('extras.run_script'):
return HttpResponseForbidden()
if ret := self.get_script(request, pk):
if ret := self.init_vars_or_redirect(request, pk):
return ret
form = None
@ -1130,7 +1132,7 @@ class ScriptView(BaseScriptView):
class ScriptSourceView(BaseScriptView):
def get(self, request, pk):
if ret := self.get_script(request, pk):
if ret := self.init_vars_or_redirect(request, pk):
return ret
return render(request, 'extras/script/source.html', {