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