1010class WorkManager :
1111 def __init__ (self , receptor ):
1212 self .receptor = receptor
13+ self .active_work = []
1314
1415 def load_receptor_worker (self , name ):
1516 entry_points = [x for x in filter (lambda x : x .name == name ,
@@ -21,6 +22,16 @@ def load_receptor_worker(self, name):
2122 def get_capabilities (self ):
2223 return [x .name for x in pkg_resources .iter_entry_points ('receptor.worker' )]
2324
25+ def add_work (self , env ):
26+ self .active_work .append (dict (id = env .message_id ,
27+ directive = env .directive ,
28+ sender = env .sender ))
29+
30+ def remove_work (self , env ):
31+ for work in self .active_work :
32+ if env .message_id == work ["id" ]:
33+ self .active_work .remove (work )
34+
2435 async def handle (self , inner_env ):
2536 logger .info (f'Handling work for { inner_env .message_id } as { inner_env .directive } ' )
2637 namespace , action = inner_env .directive .split (':' , 1 )
@@ -32,7 +43,7 @@ async def handle(self, inner_env):
3243 except AttributeError :
3344 logger .exception (f'Could not load action { action } from { namespace } ' )
3445 raise exceptions .InvalidDirectiveAction (f'Invalid action { action } for { namespace } ' )
35-
46+ self . add_work ( inner_env )
3647 responses = action_method (inner_env )
3748 async for response in responses :
3849 serial += 1
@@ -57,5 +68,6 @@ async def handle(self, inner_env):
5768 serial = serial ,
5869 code = 1 ,
5970 )
71+ self .remove_work (inner_env )
6072 await self .receptor .router .send (enveloped_response )
6173
0 commit comments