mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-18 05:28:16 -06:00
Move function to method on PythonModuleMixin
This commit is contained in:
parent
1c2b460a9c
commit
a2086e7995
@ -8,6 +8,11 @@ __all__ = (
|
|||||||
|
|
||||||
class PythonModuleMixin:
|
class PythonModuleMixin:
|
||||||
|
|
||||||
|
def get_jobs(self, name):
|
||||||
|
return self.jobs.filter(
|
||||||
|
name=name
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path(self):
|
def path(self):
|
||||||
return os.path.splitext(self.file_path)[0]
|
return os.path.splitext(self.file_path)[0]
|
||||||
|
@ -1007,23 +1007,6 @@ class DashboardWidgetDeleteView(LoginRequiredMixin, View):
|
|||||||
return redirect(reverse('home'))
|
return redirect(reverse('home'))
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Function for returning job data - used in scripts and reports
|
|
||||||
#
|
|
||||||
|
|
||||||
# Return jobs filtered for job model type (Example: `scriptmodule`)
|
|
||||||
def get_jobs(module, job_object, jobtype):
|
|
||||||
# Check if it is a supported module. Return an empty queryset if not
|
|
||||||
object_type = ContentType.objects.get(app_label='extras', model=jobtype)
|
|
||||||
jobs = Job.objects.filter(
|
|
||||||
object_type=object_type,
|
|
||||||
object_id=module.pk,
|
|
||||||
name=job_object.class_name,
|
|
||||||
)
|
|
||||||
|
|
||||||
return jobs
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Reports
|
# Reports
|
||||||
#
|
#
|
||||||
@ -1074,12 +1057,14 @@ class ReportView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_report_module(module, request)
|
module = get_report_module(module, request)
|
||||||
report = module.reports[name]()
|
report = module.reports[name]()
|
||||||
jobs = get_jobs(module, report, 'reportmodule')
|
jobs = module.get_jobs(name)
|
||||||
|
|
||||||
report.result = jobs.first()
|
report.result = jobs.exclude(
|
||||||
|
status__in=JobStatusChoices.TERMINAL_STATE_CHOICES
|
||||||
|
).first()
|
||||||
|
|
||||||
return render(request, 'extras/report.html', {
|
return render(request, 'extras/report.html', {
|
||||||
'jobs': jobs,
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'report': report,
|
'report': report,
|
||||||
'form': ReportForm(scheduling_enabled=report.scheduling_enabled),
|
'form': ReportForm(scheduling_enabled=report.scheduling_enabled),
|
||||||
@ -1091,6 +1076,7 @@ class ReportView(ContentTypePermissionRequiredMixin, View):
|
|||||||
|
|
||||||
module = get_report_module(module, request)
|
module = get_report_module(module, request)
|
||||||
report = module.reports[name]()
|
report = module.reports[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
form = ReportForm(request.POST, scheduling_enabled=report.scheduling_enabled)
|
form = ReportForm(request.POST, scheduling_enabled=report.scheduling_enabled)
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@ -1099,6 +1085,7 @@ class ReportView(ContentTypePermissionRequiredMixin, View):
|
|||||||
if not get_workers_for_queue('default'):
|
if not get_workers_for_queue('default'):
|
||||||
messages.error(request, "Unable to run report: RQ worker process not running.")
|
messages.error(request, "Unable to run report: RQ worker process not running.")
|
||||||
return render(request, 'extras/report.html', {
|
return render(request, 'extras/report.html', {
|
||||||
|
'job_count': jobs.count(),
|
||||||
'report': report,
|
'report': report,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1116,7 +1103,7 @@ class ReportView(ContentTypePermissionRequiredMixin, View):
|
|||||||
return redirect('extras:report_result', job_pk=job.pk)
|
return redirect('extras:report_result', job_pk=job.pk)
|
||||||
|
|
||||||
return render(request, 'extras/report.html', {
|
return render(request, 'extras/report.html', {
|
||||||
'jobs': get_jobs(module, report, 'reportmodule'),
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'report': report,
|
'report': report,
|
||||||
'form': form,
|
'form': form,
|
||||||
@ -1131,9 +1118,10 @@ class ReportSourceView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_report_module(module, request)
|
module = get_report_module(module, request)
|
||||||
report = module.reports[name]()
|
report = module.reports[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
|
|
||||||
return render(request, 'extras/report/source.html', {
|
return render(request, 'extras/report/source.html', {
|
||||||
'jobs': get_jobs(module, report, 'reportmodule'),
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'report': report,
|
'report': report,
|
||||||
'tab': 'source',
|
'tab': 'source',
|
||||||
@ -1148,9 +1136,9 @@ class ReportJobsView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_report_module(module, request)
|
module = get_report_module(module, request)
|
||||||
report = module.reports[name]()
|
report = module.reports[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
|
|
||||||
object_type = ContentType.objects.get(app_label='extras', model='reportmodule')
|
object_type = ContentType.objects.get(app_label='extras', model='reportmodule')
|
||||||
jobs = get_jobs(module, report, 'reportmodule')
|
|
||||||
|
|
||||||
jobs_table = JobTable(
|
jobs_table = JobTable(
|
||||||
data=jobs,
|
data=jobs,
|
||||||
@ -1160,7 +1148,7 @@ class ReportJobsView(ContentTypePermissionRequiredMixin, View):
|
|||||||
jobs_table.configure(request)
|
jobs_table.configure(request)
|
||||||
|
|
||||||
return render(request, 'extras/report/jobs.html', {
|
return render(request, 'extras/report/jobs.html', {
|
||||||
'jobs': jobs,
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'report': report,
|
'report': report,
|
||||||
'table': jobs_table,
|
'table': jobs_table,
|
||||||
@ -1244,16 +1232,16 @@ class ScriptView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_script_module(module, request)
|
module = get_script_module(module, request)
|
||||||
script = module.scripts[name]()
|
script = module.scripts[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
form = script.as_form(initial=normalize_querydict(request.GET))
|
form = script.as_form(initial=normalize_querydict(request.GET))
|
||||||
jobs = get_jobs(module, script, 'scriptmodule')
|
|
||||||
|
|
||||||
# Look for a pending Job (use the latest one by creation timestamp)
|
# Look for a pending Job (use the latest one by creation timestamp)
|
||||||
script.result = jobs.exclude(
|
script.result = module.get_jobs(name).exclude(
|
||||||
status__in=JobStatusChoices.TERMINAL_STATE_CHOICES
|
status__in=JobStatusChoices.TERMINAL_STATE_CHOICES
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
return render(request, 'extras/script.html', {
|
return render(request, 'extras/script.html', {
|
||||||
'jobs': jobs,
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'script': script,
|
'script': script,
|
||||||
'form': form,
|
'form': form,
|
||||||
@ -1265,6 +1253,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View):
|
|||||||
|
|
||||||
module = get_script_module(module, request)
|
module = get_script_module(module, request)
|
||||||
script = module.scripts[name]()
|
script = module.scripts[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
form = script.as_form(request.POST, request.FILES)
|
form = script.as_form(request.POST, request.FILES)
|
||||||
|
|
||||||
# Allow execution only if RQ worker process is running
|
# Allow execution only if RQ worker process is running
|
||||||
@ -1288,7 +1277,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View):
|
|||||||
return redirect('extras:script_result', job_pk=job.pk)
|
return redirect('extras:script_result', job_pk=job.pk)
|
||||||
|
|
||||||
return render(request, 'extras/script.html', {
|
return render(request, 'extras/script.html', {
|
||||||
'jobs': get_jobs(module, script, 'scriptmodule'),
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'script': script,
|
'script': script,
|
||||||
'form': form,
|
'form': form,
|
||||||
@ -1303,9 +1292,10 @@ class ScriptSourceView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_script_module(module, request)
|
module = get_script_module(module, request)
|
||||||
script = module.scripts[name]()
|
script = module.scripts[name]()
|
||||||
|
jobs = module.get_jobs(name)
|
||||||
|
|
||||||
return render(request, 'extras/script/source.html', {
|
return render(request, 'extras/script/source.html', {
|
||||||
'jobs': get_jobs(module, script, 'scriptmodule'),
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'script': script,
|
'script': script,
|
||||||
'tab': 'source',
|
'tab': 'source',
|
||||||
@ -1320,7 +1310,7 @@ class ScriptJobsView(ContentTypePermissionRequiredMixin, View):
|
|||||||
def get(self, request, module, name):
|
def get(self, request, module, name):
|
||||||
module = get_script_module(module, request)
|
module = get_script_module(module, request)
|
||||||
script = module.scripts[name]()
|
script = module.scripts[name]()
|
||||||
jobs = get_jobs(module, script, 'scriptmodule')
|
jobs = module.get_jobs(name)
|
||||||
|
|
||||||
jobs_table = JobTable(
|
jobs_table = JobTable(
|
||||||
data=jobs,
|
data=jobs,
|
||||||
@ -1330,7 +1320,7 @@ class ScriptJobsView(ContentTypePermissionRequiredMixin, View):
|
|||||||
jobs_table.configure(request)
|
jobs_table.configure(request)
|
||||||
|
|
||||||
return render(request, 'extras/script/jobs.html', {
|
return render(request, 'extras/script/jobs.html', {
|
||||||
'jobs': jobs,
|
'job_count': jobs.count(),
|
||||||
'module': module,
|
'module': module,
|
||||||
'script': script,
|
'script': script,
|
||||||
'table': jobs_table,
|
'table': jobs_table,
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
<a class="nav-link{% if tab == 'jobs' %} active{% endif %}" href="{% url 'extras:report_jobs' module=report.module name=report.class_name %}">
|
<a class="nav-link{% if tab == 'jobs' %} active{% endif %}" href="{% url 'extras:report_jobs' module=report.module name=report.class_name %}">
|
||||||
{% trans "Jobs" %} {% badge jobs.count %}
|
{% trans "Jobs" %} {% badge job_count %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
<a class="nav-link{% if tab == 'jobs' %} active{% endif %}" href="{% url 'extras:script_jobs' module=script.module name=script.class_name %}">
|
<a class="nav-link{% if tab == 'jobs' %} active{% endif %}" href="{% url 'extras:script_jobs' module=script.module name=script.class_name %}">
|
||||||
{% trans "Jobs" %} {% badge jobs.count %}
|
{% trans "Jobs" %} {% badge job_count %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
Reference in New Issue
Block a user