diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 60a30aed2..7cbea55a0 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -50,7 +50,6 @@ __all__ = ( 'ScriptDetailSerializer', 'ScriptInputSerializer', 'ScriptLogMessageSerializer', - 'ScriptOutputSerializer', 'ScriptSerializer', 'TagSerializer', 'WebhookSerializer', @@ -593,22 +592,6 @@ class ScriptInputSerializer(serializers.Serializer): return value -class ScriptLogMessageSerializer(serializers.Serializer): - status = serializers.SerializerMethodField(read_only=True) - message = serializers.SerializerMethodField(read_only=True) - - def get_status(self, instance): - return instance[0] - - def get_message(self, instance): - return instance[1] - - -class ScriptOutputSerializer(serializers.Serializer): - log = ScriptLogMessageSerializer(many=True, read_only=True) - output = serializers.CharField(read_only=True) - - # # Change logging # diff --git a/netbox/extras/api/urls.py b/netbox/extras/api/urls.py index 1616b8554..68b4488bc 100644 --- a/netbox/extras/api/urls.py +++ b/netbox/extras/api/urls.py @@ -20,7 +20,6 @@ router.register('image-attachments', views.ImageAttachmentViewSet) router.register('journal-entries', views.JournalEntryViewSet) router.register('config-contexts', views.ConfigContextViewSet) router.register('config-templates', views.ConfigTemplateViewSet) -router.register('reports', views.ReportViewSet, basename='report') router.register('scripts', views.ScriptViewSet, basename='script') router.register('object-changes', views.ObjectChangeViewSet) router.register('content-types', views.ContentTypeViewSet) diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index e0fca8617..8f5841da1 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -16,7 +16,6 @@ from core.choices import JobStatusChoices from core.models import Job from extras import filtersets from extras.models import * -from extras.reports import get_module_and_report, run_report from extras.scripts import get_module_and_script, run_script from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired from netbox.api.features import SyncedDataMixin @@ -211,111 +210,6 @@ class ConfigTemplateViewSet(SyncedDataMixin, ConfigTemplateRenderMixin, NetBoxMo return self.render_configtemplate(request, configtemplate, context) -# -# Reports -# - -class ReportViewSet(ViewSet): - permission_classes = [IsAuthenticatedOrLoginNotRequired] - _ignore_model_permissions = True - schema = None - lookup_value_regex = '[^/]+' # Allow dots - - def _get_report(self, pk): - try: - module_name, report_name = pk.split('.', maxsplit=1) - except ValueError: - raise Http404 - - module, report = get_module_and_report(module_name, report_name) - if report is None: - raise Http404 - - return module, report - - def list(self, request): - """ - Compile all reports and their related results (if any). Result data is deferred in the list view. - """ - results = { - job.name: job - for job in Job.objects.filter( - object_type=ContentType.objects.get(app_label='extras', model='reportmodule'), - status__in=JobStatusChoices.TERMINAL_STATE_CHOICES - ).order_by('name', '-created').distinct('name').defer('data') - } - - report_list = [] - for report_module in ReportModule.objects.restrict(request.user): - report_list.extend([report() for report in report_module.reports.values()]) - - # Attach Job objects to each report (if any) - for report in report_list: - report.result = results.get(report.name, None) - - serializer = serializers.ReportSerializer(report_list, many=True, context={ - 'request': request, - }) - - return Response({'count': len(report_list), 'results': serializer.data}) - - def retrieve(self, request, pk): - """ - Retrieve a single Report identified as ".". - """ - module, report = self._get_report(pk) - - # Retrieve the Report and Job, if any. - object_type = ContentType.objects.get(app_label='extras', model='reportmodule') - report.result = Job.objects.filter( - object_type=object_type, - name=report.name, - status__in=JobStatusChoices.TERMINAL_STATE_CHOICES - ).first() - - serializer = serializers.ReportDetailSerializer(report, context={ - 'request': request - }) - - return Response(serializer.data) - - @action(detail=True, methods=['post']) - def run(self, request, pk): - """ - Run a Report identified as ".