Просмотр исходного кода

Merge pull request #7369 from maximumG/6973-order-reports

Fixes #6973:  order reports
Jeremy Stretch 4 лет назад
Родитель
Сommit
3e5452d9da
2 измененных файлов с 19 добавлено и 2 удалено
  1. 15 0
      docs/customization/reports.md
  2. 4 2
      netbox/extras/reports.py

+ 15 - 0
docs/customization/reports.md

@@ -97,6 +97,21 @@ The recording of one or more failure messages will automatically flag a report a
 
 To perform additional tasks, such as sending an email or calling a webhook, after a report has been run, extend the `post_run()` method. The status of the report is available as `self.failed` and the results object is `self.result`.
 
+By default, reports within a module are unordered and 'randomly' displayed in the reports list page. If you want to order reports, you can defined the `report_order` variable at the end
+of your module. The `report_order` variable is a tuple which contains each Report class in a specific order.
+
+```
+from extras.reports import Report
+
+class DeviceConnectionsReport(Report)
+    pass
+
+class DeviceIPsReport(Report)
+    pass
+
+report_order = (DeviceIPsReport, DeviceConnectionsReport)
+```
+
 Once you have created a report, it will appear in the reports list. Initially, reports will have no results associated with them. To generate results, run the report.
 
 ## Running Reports

+ 4 - 2
netbox/extras/reports.py

@@ -59,8 +59,10 @@ def get_reports():
     # defined.
     for importer, module_name, _ in pkgutil.iter_modules([settings.REPORTS_ROOT]):
         module = importer.find_module(module_name).load_module(module_name)
-        report_list = [cls() for _, cls in inspect.getmembers(module, is_report)]
-        module_list.append((module_name, report_list))
+        report_order = getattr(module, "report_order", ())
+        ordered_reports = [cls() for cls in report_order if is_report(cls)]
+        unordered_reports = [cls() for _, cls in inspect.getmembers(module, is_report) if cls not in report_order]
+        module_list.append((module_name, [*ordered_reports, *unordered_reports]))
 
     return module_list