Skip to content

Commit d8b8560

Browse files
Add api v2 endpoint to query celery task status
1 parent 8ddf838 commit d8b8560

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

readthedocs/restapi/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@
2424
url(r'search/$', 'restapi.views.search_views.search', name='api_search'),
2525
url(r'search/project/$', 'restapi.views.search_views.project_search', name='api_project_search'),
2626
url(r'search/section/$', 'restapi.views.search_views.section_search', name='api_section_search'),
27+
url(r'jobs/status/(?P<task_id>[^/]+)/', 'restapi.views.task_views.job_status', name='api_job_status'),
2728
)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import logging
2+
3+
from rest_framework import decorators, permissions
4+
from rest_framework.renderers import JSONPRenderer, JSONRenderer, BrowsableAPIRenderer
5+
from rest_framework.response import Response
6+
7+
from rtd.utils.tasks import TaskNoPermission
8+
from rtd.utils.tasks import get_public_task_data
9+
10+
11+
log = logging.getLogger(__name__)
12+
13+
14+
SUCCESS_STATES = ('SUCCESS',)
15+
FAILURE_STATES = ('FAILURE', 'REVOKED',)
16+
FINISHED_STATES = SUCCESS_STATES + FAILURE_STATES
17+
STARTED_STATES = ('RECEIVED', 'STARTED', 'RETRY') + FINISHED_STATES
18+
19+
20+
def get_status_data(task_name, state, data):
21+
return {
22+
'name': task_name,
23+
'data': data,
24+
'started': state in STARTED_STATES,
25+
'finished': state in FINISHED_STATES,
26+
'success': state in SUCCESS_STATES,
27+
}
28+
29+
30+
@decorators.api_view(['GET'])
31+
@decorators.permission_classes((permissions.AllowAny,))
32+
@decorators.renderer_classes(
33+
(JSONRenderer, JSONPRenderer, BrowsableAPIRenderer))
34+
def job_status(request, task_id):
35+
try:
36+
task_name, state, public_data = get_public_task_data(request, task_id)
37+
except TaskNoPermission:
38+
return Response(
39+
get_status_data('unknown', 'PENDING', {}))
40+
return Response(
41+
get_status_data(task_name, state, public_data))

0 commit comments

Comments
 (0)