|
@@ -1052,12 +1052,27 @@ class ScriptListView(ContentTypePermissionRequiredMixin, View):
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
-class ScriptView(generic.ObjectView):
|
|
|
|
|
|
|
+class BaseScriptView(generic.ObjectView):
|
|
|
queryset = Script.objects.all()
|
|
queryset = Script.objects.all()
|
|
|
|
|
|
|
|
|
|
+ def _get_script_class(self, script):
|
|
|
|
|
+ """
|
|
|
|
|
+ Return an instance of the Script's Python class
|
|
|
|
|
+ """
|
|
|
|
|
+ if script_class := script.python_class:
|
|
|
|
|
+ return script_class()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class ScriptView(BaseScriptView):
|
|
|
|
|
+
|
|
|
def get(self, request, **kwargs):
|
|
def get(self, request, **kwargs):
|
|
|
script = self.get_object(**kwargs)
|
|
script = self.get_object(**kwargs)
|
|
|
- script_class = script.python_class()
|
|
|
|
|
|
|
+ script_class = self._get_script_class(script)
|
|
|
|
|
+ if not script_class:
|
|
|
|
|
+ return render(request, 'extras/script.html', {
|
|
|
|
|
+ 'script': script,
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
form = script_class.as_form(initial=normalize_querydict(request.GET))
|
|
form = script_class.as_form(initial=normalize_querydict(request.GET))
|
|
|
|
|
|
|
|
return render(request, 'extras/script.html', {
|
|
return render(request, 'extras/script.html', {
|
|
@@ -1069,11 +1084,16 @@ class ScriptView(generic.ObjectView):
|
|
|
|
|
|
|
|
def post(self, request, **kwargs):
|
|
def post(self, request, **kwargs):
|
|
|
script = self.get_object(**kwargs)
|
|
script = self.get_object(**kwargs)
|
|
|
- script_class = script.python_class()
|
|
|
|
|
|
|
|
|
|
if not request.user.has_perm('extras.run_script', obj=script):
|
|
if not request.user.has_perm('extras.run_script', obj=script):
|
|
|
return HttpResponseForbidden()
|
|
return HttpResponseForbidden()
|
|
|
|
|
|
|
|
|
|
+ script_class = self._get_script_class(script)
|
|
|
|
|
+ if not script_class:
|
|
|
|
|
+ return render(request, 'extras/script.html', {
|
|
|
|
|
+ 'script': script,
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
form = script_class.as_form(request.POST, request.FILES)
|
|
form = script_class.as_form(request.POST, request.FILES)
|
|
|
|
|
|
|
|
# Allow execution only if RQ worker process is running
|
|
# Allow execution only if RQ worker process is running
|
|
@@ -1103,21 +1123,22 @@ class ScriptView(generic.ObjectView):
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
-class ScriptSourceView(generic.ObjectView):
|
|
|
|
|
|
|
+class ScriptSourceView(BaseScriptView):
|
|
|
queryset = Script.objects.all()
|
|
queryset = Script.objects.all()
|
|
|
|
|
|
|
|
def get(self, request, **kwargs):
|
|
def get(self, request, **kwargs):
|
|
|
script = self.get_object(**kwargs)
|
|
script = self.get_object(**kwargs)
|
|
|
|
|
+ script_class = self._get_script_class(script)
|
|
|
|
|
|
|
|
return render(request, 'extras/script/source.html', {
|
|
return render(request, 'extras/script/source.html', {
|
|
|
'script': script,
|
|
'script': script,
|
|
|
- 'script_class': script.python_class(),
|
|
|
|
|
|
|
+ 'script_class': script_class,
|
|
|
'job_count': script.jobs.count(),
|
|
'job_count': script.jobs.count(),
|
|
|
'tab': 'source',
|
|
'tab': 'source',
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
-class ScriptJobsView(generic.ObjectView):
|
|
|
|
|
|
|
+class ScriptJobsView(BaseScriptView):
|
|
|
queryset = Script.objects.all()
|
|
queryset = Script.objects.all()
|
|
|
|
|
|
|
|
def get(self, request, **kwargs):
|
|
def get(self, request, **kwargs):
|