Browse Source

Moved ReportResult creation into Report.run()

Jeremy Stretch 7 years ago
parent
commit
571b817f04
2 changed files with 18 additions and 18 deletions
  1. 2 7
      netbox/extras/api/views.py
  2. 16 11
      netbox/extras/reports.py

+ 2 - 7
netbox/extras/api/views.py

@@ -153,14 +153,9 @@ class ReportViewSet(ViewSet):
         if not request.user.has_perm('extras.add_reportresult'):
         if not request.user.has_perm('extras.add_reportresult'):
             raise PermissionDenied("This user does not have permission to run reports.")
             raise PermissionDenied("This user does not have permission to run reports.")
 
 
-        # Retrieve and run the Report.
+        # Retrieve and run the Report. This will create a new ReportResult.
         report = self._retrieve_report(pk)
         report = self._retrieve_report(pk)
-        result = report.run()
+        report.run()
-
-        # Delete the old ReportResult (if any) and save the new one.
-        ReportResult.objects.filter(report=pk).delete()
-        report.result = ReportResult(report=pk, failed=report.failed, data=result)
-        report.result.save()
 
 
         serializer = serializers.ReportDetailSerializer(report)
         serializer = serializers.ReportDetailSerializer(report)
 
 

+ 16 - 11
netbox/extras/reports.py

@@ -6,6 +6,7 @@ import pkgutil
 from django.utils import timezone
 from django.utils import timezone
 
 
 from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_LEVEL_CODES, LOG_SUCCESS, LOG_WARNING
 from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_LEVEL_CODES, LOG_SUCCESS, LOG_WARNING
+from .models import ReportResult
 import reports as custom_reports
 import reports as custom_reports
 
 
 
 
@@ -34,8 +35,8 @@ def get_reports():
     Compile a list of all reports available across all modules in the reports path. Returns a list of tuples:
     Compile a list of all reports available across all modules in the reports path. Returns a list of tuples:
 
 
     [
     [
-        (module_name, (report_class, report_class, report_class, ...)),
+        (module_name, (report, report, report, ...)),
-        (module_name, (report_class, report_class, report_class, ...)),
+        (module_name, (report, report, report, ...)),
         ...
         ...
     ]
     ]
     """
     """
@@ -56,7 +57,7 @@ class Report(object):
     NetBox users can extend this object to write custom reports to be used for validating data within NetBox. Each
     NetBox users can extend this object to write custom reports to be used for validating data within NetBox. Each
     report must have one or more test methods named `test_*`.
     report must have one or more test methods named `test_*`.
 
 
-    The `results` attribute of a completed report will take the following form:
+    The `_results` attribute of a completed report will take the following form:
 
 
     {
     {
         'test_bar': {
         'test_bar': {
@@ -79,7 +80,7 @@ class Report(object):
 
 
     def __init__(self):
     def __init__(self):
 
 
-        self.results = OrderedDict()
+        self._results = OrderedDict()
         self.active_test = None
         self.active_test = None
         self.failed = False
         self.failed = False
 
 
@@ -88,7 +89,7 @@ class Report(object):
         for method in dir(self):
         for method in dir(self):
             if method.startswith('test_') and callable(getattr(self, method)):
             if method.startswith('test_') and callable(getattr(self, method)):
                 test_methods.append(method)
                 test_methods.append(method)
-                self.results[method] = OrderedDict([
+                self._results[method] = OrderedDict([
                     ('success', 0),
                     ('success', 0),
                     ('info', 0),
                     ('info', 0),
                     ('warning', 0),
                     ('warning', 0),
@@ -118,7 +119,7 @@ class Report(object):
         if level not in LOG_LEVEL_CODES:
         if level not in LOG_LEVEL_CODES:
             raise Exception("Unknown logging level: {}".format(level))
             raise Exception("Unknown logging level: {}".format(level))
         logline = [timezone.now().isoformat(), level, str(obj), message]
         logline = [timezone.now().isoformat(), level, str(obj), message]
-        self.results[self.active_test]['log'].append(logline)
+        self._results[self.active_test]['log'].append(logline)
 
 
     def log_success(self, obj, message=None):
     def log_success(self, obj, message=None):
         """
         """
@@ -126,28 +127,28 @@ class Report(object):
         """
         """
         if message:
         if message:
             self._log(obj, message, level=LOG_SUCCESS)
             self._log(obj, message, level=LOG_SUCCESS)
-        self.results[self.active_test]['success'] += 1
+        self._results[self.active_test]['success'] += 1
 
 
     def log_info(self, obj, message):
     def log_info(self, obj, message):
         """
         """
         Log an informational message.
         Log an informational message.
         """
         """
         self._log(obj, message, level=LOG_INFO)
         self._log(obj, message, level=LOG_INFO)
-        self.results[self.active_test]['info'] += 1
+        self._results[self.active_test]['info'] += 1
 
 
     def log_warning(self, obj, message):
     def log_warning(self, obj, message):
         """
         """
         Log a warning.
         Log a warning.
         """
         """
         self._log(obj, message, level=LOG_WARNING)
         self._log(obj, message, level=LOG_WARNING)
-        self.results[self.active_test]['warning'] += 1
+        self._results[self.active_test]['warning'] += 1
 
 
     def log_failure(self, obj, message):
     def log_failure(self, obj, message):
         """
         """
         Log a failure. Calling this method will automatically mark the report as failed.
         Log a failure. Calling this method will automatically mark the report as failed.
         """
         """
         self._log(obj, message, level=LOG_FAILURE)
         self._log(obj, message, level=LOG_FAILURE)
-        self.results[self.active_test]['failed'] += 1
+        self._results[self.active_test]['failed'] += 1
         self.failed = True
         self.failed = True
 
 
     def run(self):
     def run(self):
@@ -159,4 +160,8 @@ class Report(object):
             test_method = getattr(self, method_name)
             test_method = getattr(self, method_name)
             test_method()
             test_method()
 
 
-        return self.results
+        # Delete any previous ReportResult and create a new one to record the result.
+        ReportResult.objects.filter(report=self.full_name).delete()
+        result = ReportResult(report=self.full_name, failed=self.failed, data=self._results)
+        result.save()
+        self.result = result