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