Fixes syntax error on reports (#12997)

* fixes syntax error on reports #12842

* remove the extra filter #12842
This commit is contained in:
Abhimanyu Saharan 2023-06-30 01:32:39 +05:30 committed by GitHub
parent f69d99ea67
commit 3307bd200c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 72 additions and 63 deletions

View File

@ -1,7 +1,7 @@
import inspect import inspect
import logging
from functools import cached_property from functools import cached_property
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
@ -12,6 +12,8 @@ from netbox.models.features import JobsMixin, WebhooksMixin
from utilities.querysets import RestrictedQuerySet from utilities.querysets import RestrictedQuerySet
from .mixins import PythonModuleMixin from .mixins import PythonModuleMixin
logger = logging.getLogger('netbox.reports')
__all__ = ( __all__ = (
'Report', 'Report',
'ReportModule', 'ReportModule',
@ -56,7 +58,8 @@ class ReportModule(PythonModuleMixin, JobsMixin, ManagedFile):
try: try:
module = self.get_module() module = self.get_module()
except ImportError: except (ImportError, SyntaxError) as e:
logger.error(f"Unable to load report module {self.name}, exception: {e}")
return {} return {}
reports = {} reports = {}
ordered = getattr(module, 'report_order', []) ordered = getattr(module, 'report_order', [])

View File

@ -38,71 +38,77 @@
</h5> </h5>
<div class="card-body"> <div class="card-body">
{% include 'inc/sync_warning.html' with object=module %} {% include 'inc/sync_warning.html' with object=module %}
<table class="table table-hover table-headings reports"> {% if module.reports %}
<thead> <table class="table table-hover table-headings reports">
<tr> <thead>
<th width="250">Name</th> <tr>
<th>Description</th> <th width="250">Name</th>
<th>Last Run</th> <th>Description</th>
<th>Status</th> <th>Last Run</th>
<th width="120"></th> <th>Status</th>
</tr> <th width="120"></th>
</thead> </tr>
<tbody> </thead>
{% with jobs=module.get_latest_jobs %} <tbody>
{% for report_name, report in module.reports.items %} {% with jobs=module.get_latest_jobs %}
{% with last_job=jobs|get_key:report.name %} {% for report_name, report in module.reports.items %}
<tr> {% with last_job=jobs|get_key:report.name %}
<td>
<a href="{% url 'extras:report' module=module.python_name name=report.class_name %}" id="{{ report.module }}.{{ report.class_name }}">{{ report.name }}</a>
</td>
<td>{{ report.description|markdown|placeholder }}</td>
{% if last_job %}
<td>
<a href="{% url 'extras:report_result' job_pk=last_job.pk %}">{{ last_job.created|annotated_date }}</a>
</td>
<td>
{% badge last_job.get_status_display last_job.get_status_color %}
</td>
{% else %}
<td class="text-muted">Never</td>
<td>{{ ''|placeholder }}</td>
{% endif %}
<td>
{% if perms.extras.run_report %}
<div class="float-end noprint">
<form action="{% url 'extras:report' module=report.module name=report.class_name %}" method="post">
{% csrf_token %}
<button type="submit" name="_run" class="btn btn-primary btn-sm" style="width: 110px">
{% if last_job %}
<i class="mdi mdi-replay"></i> Run Again
{% else %}
<i class="mdi mdi-play"></i> Run Report
{% endif %}
</button>
</form>
</div>
{% endif %}
</td>
</tr>
{% for method, stats in last_job.data.items %}
<tr> <tr>
<td colspan="4" class="method"> <td>
<span class="ps-3">{{ method }}</span> <a href="{% url 'extras:report' module=module.python_name name=report.class_name %}" id="{{ report.module }}.{{ report.class_name }}">{{ report.name }}</a>
</td> </td>
<td class="text-end text-nowrap report-stats"> <td>{{ report.description|markdown|placeholder }}</td>
<span class="badge bg-success">{{ stats.success }}</span> {% if last_job %}
<span class="badge bg-info">{{ stats.info }}</span> <td>
<span class="badge bg-warning">{{ stats.warning }}</span> <a href="{% url 'extras:report_result' job_pk=last_job.pk %}">{{ last_job.created|annotated_date }}</a>
<span class="badge bg-danger">{{ stats.failure }}</span> </td>
<td>
{% badge last_job.get_status_display last_job.get_status_color %}
</td>
{% else %}
<td class="text-muted">Never</td>
<td>{{ ''|placeholder }}</td>
{% endif %}
<td>
{% if perms.extras.run_report %}
<div class="float-end noprint">
<form action="{% url 'extras:report' module=report.module name=report.class_name %}" method="post">
{% csrf_token %}
<button type="submit" name="_run" class="btn btn-primary btn-sm" style="width: 110px">
{% if last_job %}
<i class="mdi mdi-replay"></i> Run Again
{% else %}
<i class="mdi mdi-play"></i> Run Report
{% endif %}
</button>
</form>
</div>
{% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% for method, stats in last_job.data.items %}
{% endwith %} <tr>
{% endfor %} <td colspan="4" class="method">
{% endwith %} <span class="ps-3">{{ method }}</span>
</tbody> </td>
</table> <td class="text-end text-nowrap report-stats">
<span class="badge bg-success">{{ stats.success }}</span>
<span class="badge bg-info">{{ stats.info }}</span>
<span class="badge bg-warning">{{ stats.warning }}</span>
<span class="badge bg-danger">{{ stats.failure }}</span>
</td>
</tr>
{% endfor %}
{% endwith %}
{% endfor %}
{% endwith %}
</tbody>
</table>
{% else %}
<div class="alert alert-warning" role="alert">
<i class="mdi mdi-alert"></i> Could not load reports from {{ module.name }}
</div>
{% endif %}
</div> </div>
</div> </div>
{% empty %} {% empty %}