1616# along with Patchman. If not, see <http://www.gnu.org/licenses/>
1717
1818import json
19- from urllib .parse import unquote
19+ from urllib .parse import parse_qs , unquote
2020
21+ from django .conf import settings
2122from django .contrib import messages
2223from django .contrib .auth .decorators import login_required
2324from django .db .models import Q
2829from django .views .decorators .csrf import csrf_exempt
2930from django_tables2 import RequestConfig
3031from rest_framework import status , viewsets
32+ from rest_framework .permissions import AllowAny , IsAuthenticatedOrReadOnly
3133from rest_framework .response import Response
34+ from rest_framework_api_key .permissions import HasAPIKey
3235from tenacity import (
3336 retry , retry_if_exception_type , stop_after_attempt , wait_exponential ,
3437)
3538
3639from reports .models import Report
37- from reports .serializers import ReportUploadSerializer
38- from reports .tables import ReportTable
40+ from reports .serializers import ReportSerializer , ReportUploadSerializer
41+ from reports .tables import (
42+ ReportModuleTable , ReportPackageTable , ReportRepoTable , ReportTable ,
43+ ReportUpdateTable ,
44+ )
45+ from reports .tasks import process_report
3946from util import sanitize_filter_params
4047from util .filterspecs import Filter , FilterBar
4148
4249
4350def _get_filtered_reports (filter_params ):
4451 """Helper to reconstruct filtered queryset from filter params."""
45- from urllib .parse import parse_qs
4652 params = parse_qs (filter_params )
4753
4854 reports = Report .objects .all ()
@@ -78,7 +84,6 @@ def upload(request):
7884 report = Report .objects .create ()
7985 report .parse (data , meta )
8086
81- from reports .tasks import process_report
8287 process_report .delay (report .id )
8388
8489 if 'report' in data and data ['report' ] == 'true' :
@@ -159,10 +164,6 @@ def report_detail(request, report_id):
159164
160165 # Add tables for Protocol 2 reports
161166 if report .protocol == '2' :
162- from reports .tables import (
163- ReportModuleTable , ReportPackageTable , ReportRepoTable ,
164- ReportUpdateTable ,
165- )
166167 if report .has_packages :
167168 context ['packages_table' ] = ReportPackageTable (report .packages_parsed )
168169 if report .has_repos :
@@ -183,7 +184,6 @@ def report_detail(request, report_id):
183184def report_process (request , report_id ):
184185 """ Process a report using a celery task
185186 """
186- from reports .tasks import process_report
187187 report = get_object_or_404 (Report , id = report_id )
188188 report .processed = False
189189 report .save ()
@@ -243,7 +243,6 @@ def report_bulk_action(request):
243243 name = Report ._meta .verbose_name if count == 1 else Report ._meta .verbose_name_plural
244244
245245 if action == 'process' :
246- from reports .tasks import process_report
247246 for report in reports :
248247 report .processed = False
249248 report .save ()
@@ -273,12 +272,6 @@ class ReportViewSet(viewsets.ViewSet):
273272 """
274273
275274 def get_permissions (self ):
276- from django .conf import settings
277- from rest_framework .permissions import (
278- AllowAny , IsAuthenticatedOrReadOnly ,
279- )
280- from rest_framework_api_key .permissions import HasAPIKey
281-
282275 # POST requires API key if configured, otherwise allow any
283276 if self .action == 'create' :
284277 if getattr (settings , 'REQUIRE_API_KEY' , False ):
@@ -289,16 +282,12 @@ def get_permissions(self):
289282
290283 def list (self , request ):
291284 """List all reports."""
292- from reports .serializers import ReportSerializer
293285 queryset = Report .objects .all ().order_by ('-created' )
294286 serializer = ReportSerializer (queryset , many = True , context = {'request' : request })
295287 return Response (serializer .data )
296288
297289 def retrieve (self , request , pk = None ):
298290 """Retrieve a single report."""
299- from django .shortcuts import get_object_or_404
300-
301- from reports .serializers import ReportSerializer
302291 report = get_object_or_404 (Report , pk = pk )
303292 serializer = ReportSerializer (report , context = {'request' : request })
304293 return Response (serializer .data )
@@ -357,7 +346,6 @@ def create(self, request):
357346 )
358347
359348 # Queue for async processing
360- from reports .tasks import process_report
361349 process_report .delay (report .id )
362350
363351 return Response (
0 commit comments