mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 11:56:25 -06:00
7848 more viewsets
This commit is contained in:
parent
8ffec29403
commit
46a39a47be
@ -1,5 +1,3 @@
|
|||||||
from django.urls import path, include
|
|
||||||
|
|
||||||
from netbox.api.routers import NetBoxRouter
|
from netbox.api.routers import NetBoxRouter
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
@ -15,13 +13,6 @@ router.register('object-changes', views.ObjectChangeViewSet)
|
|||||||
router.register('background-queues', views.QueueViewSet, basename='rqqueue')
|
router.register('background-queues', views.QueueViewSet, basename='rqqueue')
|
||||||
router.register('background-workers', views.WorkerViewSet, basename='rqworker')
|
router.register('background-workers', views.WorkerViewSet, basename='rqworker')
|
||||||
router.register('background-tasks/(?P<queue_name>.+)/', views.TaskViewSet, basename='rqtask')
|
router.register('background-tasks/(?P<queue_name>.+)/', views.TaskViewSet, basename='rqtask')
|
||||||
|
router.register('background-task', views.TaskDetailViewSet, basename='rqtaskdetail')
|
||||||
|
|
||||||
urlpatterns = (
|
urlpatterns = router.urls
|
||||||
path('background-task/<str:task_id>/', views.TaskDetailView.as_view(), name="background_task_detail"),
|
|
||||||
path('background-task/<str:task_id>/delete/', views.TaskDeleteView.as_view(), name="background_task_delete"),
|
|
||||||
path('background-task/<str:task_id>/requeue/', views.TaskRequeueView.as_view(), name="background_task_requeue"),
|
|
||||||
path('background-task/<str:task_id>/enqueue/', views.TaskEnqueueView.as_view(), name="background_task_enqueue"),
|
|
||||||
path('background-task/<str:task_id>/stop/', views.TaskStopView.as_view(), name="background_task_stop"),
|
|
||||||
|
|
||||||
path('', include(router.urls)),
|
|
||||||
)
|
|
||||||
|
@ -7,7 +7,6 @@ from rest_framework.decorators import action
|
|||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.routers import APIRootView
|
from rest_framework.routers import APIRootView
|
||||||
from rest_framework.views import APIView
|
|
||||||
from rest_framework.viewsets import ReadOnlyModelViewSet
|
from rest_framework.viewsets import ReadOnlyModelViewSet
|
||||||
|
|
||||||
from core import filtersets
|
from core import filtersets
|
||||||
@ -171,30 +170,12 @@ class WorkerViewSet(BaseRQListView):
|
|||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class TaskListView(APIView):
|
class TaskDetailViewSet(viewsets.ViewSet):
|
||||||
"""
|
"""
|
||||||
Retrieve a list of RQ Tasks in the specified Queue.
|
Retrieve the details of the specified RQ Task.
|
||||||
"""
|
"""
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Tasks"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def get(self, request, queue_name, format=None):
|
|
||||||
try:
|
|
||||||
queue = get_queue(queue_name)
|
|
||||||
except KeyError:
|
|
||||||
raise Http404
|
|
||||||
|
|
||||||
data = queue.get_jobs()
|
|
||||||
serializer = serializers.BackgroundTaskSerializer(data, many=True, context={'request': request})
|
|
||||||
return Response(serializer.data)
|
|
||||||
|
|
||||||
|
|
||||||
class BaseTaskView(APIView):
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
def get_view_name(self):
|
||||||
return "Background Task"
|
return "Background Task"
|
||||||
|
|
||||||
@ -206,80 +187,30 @@ class BaseTaskView(APIView):
|
|||||||
|
|
||||||
return task
|
return task
|
||||||
|
|
||||||
|
|
||||||
class TaskDetailView(BaseTaskView):
|
|
||||||
"""
|
|
||||||
Retrieve the details of the specified RQ Task.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Task"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
||||||
def get(self, request, task_id, format=None):
|
def retrieve(self, request, pk):
|
||||||
task = self.get_task_from_id(task_id)
|
task = self.get_task_from_id(pk)
|
||||||
serializer = serializers.BackgroundTaskSerializer(task, context={'request': request})
|
serializer = serializers.BackgroundTaskSerializer(task, context={'request': request})
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
@action(methods=["POST"], detail=True)
|
||||||
class TaskDeleteView(APIView):
|
def delete(self, request, pk):
|
||||||
"""
|
delete_rq_job(pk)
|
||||||
Deletes the specified RQ Task.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Task"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def post(self, request, task_id, format=None):
|
|
||||||
delete_rq_job(task_id)
|
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
|
@action(methods=["POST"], detail=True)
|
||||||
class TaskRequeueView(APIView):
|
def requeue(self, request, pk):
|
||||||
"""
|
requeue_rq_job(pk)
|
||||||
Requeues the specified RQ Task.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Task"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def post(self, request, task_id, format=None):
|
|
||||||
requeue_rq_job(task_id)
|
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
|
@action(methods=["POST"], detail=True)
|
||||||
class TaskEnqueueView(APIView):
|
def enqueue(self, request, pk):
|
||||||
"""
|
enqueue_rq_job(pk)
|
||||||
Enqueues the specified RQ Task.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Task"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def post(self, request, task_id, format=None):
|
|
||||||
enqueue_rq_job(task_id)
|
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
|
@action(methods=["POST"], detail=True)
|
||||||
class TaskStopView(APIView):
|
def stop(self, request, pk):
|
||||||
"""
|
stopped_jobs = stop_rq_job(pk)
|
||||||
Stops the specified RQ Task.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Task"
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def post(self, request, task_id, format=None):
|
|
||||||
stopped_jobs = stop_rq_job(task_id)
|
|
||||||
if len(stopped_jobs) == 1:
|
if len(stopped_jobs) == 1:
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
else:
|
else:
|
||||||
|
@ -193,7 +193,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(self.dummy_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
|
|
||||||
response = self.client.get(reverse('core-api:background_task_detail', args=[job.id]), **self.header)
|
response = self.client.get(reverse('core-api:rqtaskdetail-detail', args=[job.id]), **self.header)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn(str(job.id), str(response.content))
|
self.assertIn(str(job.id), str(response.content))
|
||||||
self.assertIn('origin', str(response.content))
|
self.assertIn('origin', str(response.content))
|
||||||
@ -204,7 +204,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(self.dummy_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
|
|
||||||
response = self.client.post(reverse('core-api:background_task_delete', args=[job.id]), **self.header)
|
response = self.client.post(reverse('core-api:rqtaskdetail-delete', args=[job.id]), **self.header)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertFalse(RQ_Job.exists(job.id, connection=queue.connection))
|
self.assertFalse(RQ_Job.exists(job.id, connection=queue.connection))
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
@ -220,7 +220,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
self.assertTrue(job.is_failed)
|
self.assertTrue(job.is_failed)
|
||||||
|
|
||||||
# Re-enqueue the failed job and check that its status has been reset
|
# Re-enqueue the failed job and check that its status has been reset
|
||||||
response = self.client.post(reverse('core-api:background_task_requeue', args=[job.id]), **self.header)
|
response = self.client.post(reverse('core-api:rqtaskdetail-requeue', args=[job.id]), **self.header)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
job = RQ_Job.fetch(job.id, queue.connection)
|
job = RQ_Job.fetch(job.id, queue.connection)
|
||||||
self.assertFalse(job.is_failed)
|
self.assertFalse(job.is_failed)
|
||||||
@ -240,7 +240,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
self.assertIsNone(job.enqueued_at)
|
self.assertIsNone(job.enqueued_at)
|
||||||
|
|
||||||
# Force-enqueue the deferred job
|
# Force-enqueue the deferred job
|
||||||
response = self.client.post(reverse('core-api:background_task_enqueue', args=[job.id]), **self.header)
|
response = self.client.post(reverse('core-api:rqtaskdetail-enqueue', args=[job.id]), **self.header)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Check that job's status is updated correctly
|
# Check that job's status is updated correctly
|
||||||
@ -256,7 +256,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
worker.prepare_job_execution(job)
|
worker.prepare_job_execution(job)
|
||||||
|
|
||||||
self.assertEqual(job.get_status(), JobStatus.STARTED)
|
self.assertEqual(job.get_status(), JobStatus.STARTED)
|
||||||
response = self.client.post(reverse('core-api:background_task_stop', args=[job.id]), **self.header)
|
response = self.client.post(reverse('core-api:rqtaskdetail-stop', args=[job.id]), **self.header)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
worker.monitor_work_horse(job, queue) # Sets the job as Failed and removes from Started
|
worker.monitor_work_horse(job, queue) # Sets the job as Failed and removes from Started
|
||||||
started_job_registry = StartedJobRegistry(queue.name, connection=queue.connection)
|
started_job_registry = StartedJobRegistry(queue.name, connection=queue.connection)
|
||||||
|
Loading…
Reference in New Issue
Block a user