55from django .shortcuts import render
66from django .urls .exceptions import NoReverseMatch
77from 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
910from rest_framework .response import Response
1011from rest_framework .viewsets import ModelViewSet
1112
13+ from dispatcher .utils import resolve_callable
14+
1215from ansible_base .lib .utils .response import get_fully_qualified_url
1316from ansible_base .lib .utils .views .ansible_base import AnsibleBaseView
1417from 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+
189207class MultipleFieldsViewSet (TestAppViewSet ):
190208 serializer_class = serializers .MultipleFieldsModelSerializer
191209
0 commit comments