77import logging
88import time
99import traceback
10- from string import (
11- Template ,
12- )
1310
1411from connect .client import (
1512 AsyncConnectClient ,
1613)
1714from connect .client .models import (
18- AsyncCollection ,
1915 AsyncResource ,
2016)
2117
2723 TaskOutput ,
2824)
2925from connect .eaas .core .responses import (
30- ProcessingResponse ,
26+ BackgroundResponse ,
3127)
3228from connect .eaas .runner .managers .base import (
3329 TasksManagerBase ,
@@ -42,6 +38,11 @@ class BackgroundTasksManager(TasksManagerBase):
4238 def get_method_name (self , task_data , argument ):
4339 return self .handler .events [task_data .input .event_type ]['method' ]
4440
41+ def send_skip_response (self , data , output ):
42+ future = asyncio .Future ()
43+ future .set_result (BackgroundResponse .skip (output ))
44+ asyncio .create_task (self .enqueue_result (data , future ))
45+
4546 async def get_argument (self , task_data ):
4647 """
4748 Get the request object through the Connect public API
@@ -56,28 +57,14 @@ async def get_argument(self, task_data):
5657 default_headers = self .config .get_user_agent (),
5758 )
5859
59- definition = self .config .event_definitions [task_data .input .event_type ]
60- supported_statuses = self .handler .events [task_data .input .event_type ]['statuses' ]
61- rql_filter = Template (definition .api_collection_filter ).substitute (
62- {
63- '_statuses_' : f'({ "," .join (supported_statuses )} )' ,
64- '_object_id_' : task_data .input .object_id ,
65- },
60+ object_exists = await self .filter_collection_by_event_definition (
61+ client ,
62+ task_data ,
6663 )
67-
68- collection = AsyncCollection (client , definition .api_collection_endpoint )
69- if await collection .filter (rql_filter ).count () == 0 :
70- logger .info (
71- f'Send skip response for { task_data .options .task_id } since '
72- 'the current request status is not supported.' ,
73- )
74- self .send_skip_response (
75- task_data ,
76- 'The request status does not match the '
77- f'supported statuses: { "," .join (supported_statuses )} .' ,
78- )
64+ if not object_exists :
7965 return
8066
67+ definition = self .config .event_definitions [task_data .input .event_type ]
8168 url = definition .api_resource_endpoint .format (pk = task_data .input .object_id )
8269 resource = AsyncResource (client , url )
8370
@@ -112,8 +99,3 @@ async def build_response(self, task_data, future):
11299 result_message .output .message = traceback .format_exc ()[:4000 ]
113100
114101 return result_message
115-
116- def send_skip_response (self , data , output ):
117- future = asyncio .Future ()
118- future .set_result (ProcessingResponse .skip (output ))
119- asyncio .create_task (self .enqueue_result (data , future ))
0 commit comments