Skip to content

Commit fc08e35

Browse files
committed
Demo via a test_app view
1 parent 3790e5f commit fc08e35

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

ansible_base/task/publish.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,7 @@ def __call__(self, fn):
3737
setattr(fn, 'delay', publisher.delay)
3838

3939
return fn
40+
41+
42+
def task():
43+
return TaskDecorator()

requirements/requirements_dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ pytest-django
2121
setuptools-scm
2222
sqlparse==0.5.2
2323
psycopg[binary]
24+
honcho
2425
sdb

test_app/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
path('api/v1/', include(resource_api_urls)),
2121
path('api/v1/', views.api_root),
2222
path('api/v1/timeout_view/', views.timeout_view, name='test-timeout-view'),
23+
path('api/v1/trigger_task/', views.trigger_task, name='test-trigger-task'),
2324
path('login/', include('rest_framework.urls')),
2425
path("__debug__/", include("debug_toolbar.urls")),
2526
]

test_app/views.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
from django.shortcuts import render
66
from django.urls.exceptions import NoReverseMatch
77
from django.urls.resolvers import URLPattern
8-
from rest_framework.decorators import action, api_view
8+
from rest_framework.decorators import action, api_view, permission_classes
9+
from rest_framework.permissions import IsAuthenticatedOrReadOnly
910
from rest_framework.response import Response
1011
from rest_framework.viewsets import ModelViewSet
1112

13+
from dispatcher.utils import resolve_callable
14+
1215
from ansible_base.lib.utils.response import get_fully_qualified_url
1316
from ansible_base.lib.utils.views.ansible_base import AnsibleBaseView
1417
from ansible_base.oauth2_provider.permissions import OAuth2ScopePermission
@@ -177,6 +180,7 @@ def api_root(request, format=None):
177180
list_endpoints['service-index'] = get_fully_qualified_url('service-index-root')
178181
list_endpoints['role-metadata'] = get_fully_qualified_url('role-metadata')
179182
list_endpoints['timeout-view'] = get_fully_qualified_url('test-timeout-view')
183+
list_endpoints['trigger-task'] = get_fully_qualified_url('test-trigger-task')
180184

181185
return Response(list_endpoints)
182186

@@ -186,6 +190,20 @@ def timeout_view(request, format=None):
186190
time.sleep(60 * 10) # 10 minutes
187191

188192

193+
@api_view(['GET', 'POST'])
194+
@permission_classes([IsAuthenticatedOrReadOnly])
195+
def trigger_task(request, format=None):
196+
if request.method == 'GET':
197+
return Response({})
198+
elif request.method == 'POST':
199+
try:
200+
fn = resolve_callable(request.data)
201+
except Exception as exc:
202+
return Response({'error': f'Could not locate task {request.data}, error: {str(exc)}'})
203+
fn.delay()
204+
return Response({'task': request.data})
205+
206+
189207
class MultipleFieldsViewSet(TestAppViewSet):
190208
serializer_class = serializers.MultipleFieldsModelSerializer
191209

0 commit comments

Comments
 (0)