55from  django_rq .settings  import  QUEUES_LIST 
66from  django_rq .utils  import  get_statistics 
77from  drf_spectacular .types  import  OpenApiTypes 
8- from  drf_spectacular .utils  import  extend_schema 
8+ from  drf_spectacular .utils  import  OpenApiParameter ,  extend_schema 
99from  rest_framework  import  viewsets 
1010from  rest_framework .decorators  import  action 
1111from  rest_framework .exceptions  import  PermissionDenied 
2424from  netbox .api .metadata  import  ContentTypeMetadata 
2525from  netbox .api .pagination  import  LimitOffsetListPagination 
2626from  netbox .api .viewsets  import  NetBoxModelViewSet , NetBoxReadOnlyModelViewSet 
27+ 
2728from  . import  serializers 
2829
2930
@@ -117,29 +118,49 @@ def list(self, request):
117118    def  get_serializer (self , * args , ** kwargs ):
118119        """ 
119120        Return the serializer instance that should be used for validating and 
120-         deserializing input,  and for serializing output. 
121+         deserializing input and for serializing output. 
121122        """ 
122123        serializer_class  =  self .get_serializer_class ()
123124        kwargs ['context' ] =  self .get_serializer_context ()
124125        return  serializer_class (* args , ** kwargs )
125126
127+     def  get_serializer_class (self ):
128+         """ 
129+         Return the class to use for the serializer. 
130+         """ 
131+         return  self .serializer_class 
132+ 
133+     def  get_serializer_context (self ):
134+         """ 
135+         Extra context provided to the serializer class. 
136+         """ 
137+         return  {
138+             'request' : self .request ,
139+             'format' : self .format_kwarg ,
140+             'view' : self ,
141+         }
142+ 
126143
127144class  BackgroundQueueViewSet (BaseRQViewSet ):
128145    """ 
129146    Retrieve a list of RQ Queues. 
130-     Note: Queue names are not URL safe so not returning a detail view. 
147+     Note: Queue names are not URL safe,  so not returning a detail view. 
131148    """ 
132149    serializer_class  =  serializers .BackgroundQueueSerializer 
133150    lookup_field  =  'name' 
134151    lookup_value_regex  =  r'[\w.@+-]+' 
135152
136153    def  get_view_name (self ):
137-         return  " Background Queues" 
154+         return  ' Background Queues' 
138155
139156    def  get_data (self ):
140-         return  get_statistics (run_maintenance_tasks = True )[" queues" 
157+         return  get_statistics (run_maintenance_tasks = True )[' queues' 
141158
142-     @extend_schema (responses = {200 : OpenApiTypes .OBJECT }) 
159+     @extend_schema ( 
160+         operation_id = 'core_background_queues_retrieve_by_name' , 
161+         parameters = [OpenApiParameter (name = 'name' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )], 
162+         responses = {200 : OpenApiTypes .OBJECT }, 
163+     ) 
143164    def  retrieve (self , request , name ):
144165        data  =  self .get_data ()
145166        if  not  data :
@@ -161,12 +182,17 @@ class BackgroundWorkerViewSet(BaseRQViewSet):
161182    lookup_field  =  'name' 
162183
163184    def  get_view_name (self ):
164-         return  " Background Workers" 
185+         return  ' Background Workers' 
165186
166187    def  get_data (self ):
167188        config  =  QUEUES_LIST [0 ]
168189        return  Worker .all (get_redis_connection (config ['connection_config' ]))
169190
191+     @extend_schema ( 
192+         operation_id = 'core_background_workers_retrieve_by_name' , 
193+         parameters = [OpenApiParameter (name = 'name' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )], 
194+         responses = {200 : OpenApiTypes .OBJECT }, 
195+     ) 
170196    def  retrieve (self , request , name ):
171197        # all the RQ queues should use the same connection 
172198        config  =  QUEUES_LIST [0 ]
@@ -184,9 +210,10 @@ class BackgroundTaskViewSet(BaseRQViewSet):
184210    Retrieve a list of RQ Tasks. 
185211    """ 
186212    serializer_class  =  serializers .BackgroundTaskSerializer 
213+     lookup_field  =  'id' 
187214
188215    def  get_view_name (self ):
189-         return  " Background Tasks" 
216+         return  ' Background Tasks' 
190217
191218    def  get_data (self ):
192219        return  get_rq_jobs ()
@@ -199,45 +226,53 @@ def get_task_from_id(self, task_id):
199226
200227        return  task 
201228
202-     @extend_schema (responses = {200 : OpenApiTypes .OBJECT }) 
203-     def  retrieve (self , request , pk ):
229+     @extend_schema ( 
230+         operation_id = 'core_background_tasks_retrieve_by_id' , 
231+         parameters = [OpenApiParameter (name = 'id' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )], 
232+         responses = {200 : OpenApiTypes .OBJECT }, 
233+     ) 
234+     def  retrieve (self , request , id ):
204235        """ 
205236        Retrieve the details of the specified RQ Task. 
206237        """ 
207-         task  =  self .get_task_from_id (pk )
238+         task  =  self .get_task_from_id (id )
208239        serializer  =  self .serializer_class (task , context = {'request' : request })
209240        return  Response (serializer .data )
210241
211-     @action (methods = ["POST" ], detail = True ) 
212-     def  delete (self , request , pk ):
242+     @extend_schema (parameters = [OpenApiParameter (name = 'id' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )]) 
243+     @action (methods = ['POST' ], detail = True ) 
244+     def  delete (self , request , id ):
213245        """ 
214246        Delete the specified RQ Task. 
215247        """ 
216-         delete_rq_job (pk )
248+         delete_rq_job (id )
217249        return  HttpResponse (status = 200 )
218250
219-     @action (methods = ["POST" ], detail = True ) 
220-     def  requeue (self , request , pk ):
251+     @extend_schema (parameters = [OpenApiParameter (name = 'id' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )]) 
252+     @action (methods = ['POST' ], detail = True ) 
253+     def  requeue (self , request , id ):
221254        """ 
222255        Requeues the specified RQ Task. 
223256        """ 
224-         requeue_rq_job (pk )
257+         requeue_rq_job (id )
225258        return  HttpResponse (status = 200 )
226259
227-     @action (methods = ["POST" ], detail = True ) 
228-     def  enqueue (self , request , pk ):
260+     @extend_schema (parameters = [OpenApiParameter (name = 'id' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )]) 
261+     @action (methods = ['POST' ], detail = True ) 
262+     def  enqueue (self , request , id ):
229263        """ 
230264        Enqueues the specified RQ Task. 
231265        """ 
232-         enqueue_rq_job (pk )
266+         enqueue_rq_job (id )
233267        return  HttpResponse (status = 200 )
234268
235-     @action (methods = ["POST" ], detail = True ) 
236-     def  stop (self , request , pk ):
269+     @extend_schema (parameters = [OpenApiParameter (name = 'id' , type = OpenApiTypes .STR , location = OpenApiParameter .PATH )]) 
270+     @action (methods = ['POST' ], detail = True ) 
271+     def  stop (self , request , id ):
237272        """ 
238273        Stops the specified RQ Task. 
239274        """ 
240-         stopped_jobs  =  stop_rq_job (pk )
275+         stopped_jobs  =  stop_rq_job (id )
241276        if  len (stopped_jobs ) ==  1 :
242277            return  HttpResponse (status = 200 )
243278        else :
0 commit comments