44from . import _iris
55from ._common import _Common
66from ._message import _Message as Message
7- from ._decorators import input_serializer_param , output_deserializer
8- from ._dispatch import dispatch_serializer , dispatch_deserializer
7+ from ._decorators import input_serializer_param , output_deserializer , input_deserializer , output_serializer
8+ from ._dispatch import dispatch_serializer , dispatch_deserializer , dispach_message
99from ._async_request import AsyncRequest
1010from ._generator_request import _GeneratorRequest
1111
@@ -68,8 +68,7 @@ async def send_request_async_ng(self, target: str, request: Union[Message, Any],
6868 Response from target component
6969 """
7070 return await AsyncRequest (target , request , timeout , description , self )
71-
72- @input_serializer_param (1 , 'request' )
71+
7372 def send_generator_request (self , target : str , request : Union [Message , Any ],
7473 timeout : int = - 1 , description : Optional [str ] = None ) -> _GeneratorRequest :
7574 """Send message as a generator request to target component.
@@ -81,7 +80,7 @@ def send_generator_request(self, target: str, request: Union[Message, Any],
8180 Returns:
8281 _GeneratorRequest: An instance of _GeneratorRequest to iterate over responses
8382 Raises:
84- TypeError: If request is not of type Message or _GeneratorMessage
83+ TypeError: If request is not of type Message
8584 """
8685 return _GeneratorRequest (self , target , request , timeout , description )
8786
@@ -196,7 +195,7 @@ def on_get_connections(self) -> List[str]:
196195 """
197196 ## Parse the class code to find all invocations of send_request_sync and send_request_async
198197 ## and return the targets
199- targer_list = []
198+ target_list = []
200199 # get the source code of the class
201200 source = getsource (self .__class__ )
202201 # find all invocations of send_request_sync and send_request_async
@@ -211,29 +210,47 @@ def on_get_connections(self) -> List[str]:
211210 if target .find ("=" ) != - 1 :
212211 # it's a keyword argument, remove the keyword
213212 target = target [target .find ("=" )+ 1 :].strip ()
214- if target not in targer_list :
215- targer_list .append (target )
213+ if target not in target_list :
214+ target_list .append (target )
216215 i = source .find (method , i + 1 )
217216
218- for target in targer_list :
217+ for target in target_list :
219218 # if target is a string, remove the quotes
220219 if target [0 ] == "'" and target [- 1 ] == "'" :
221- targer_list [ targer_list .index (target )] = target [1 :- 1 ]
220+ target_list [ target_list .index (target )] = target [1 :- 1 ]
222221 elif target [0 ] == '"' and target [- 1 ] == '"' :
223- targer_list [ targer_list .index (target )] = target [1 :- 1 ]
222+ target_list [ target_list .index (target )] = target [1 :- 1 ]
224223 # if target is a variable, try to find the value of the variable
225224 else :
226225 self .on_init ()
227226 try :
228227 if target .find ("self." ) != - 1 :
229228 # it's a class variable
230- targer_list [ targer_list .index (target )] = getattr (self , target [target .find ("." )+ 1 :])
229+ target_list [ target_list .index (target )] = getattr (self , target [target .find ("." )+ 1 :])
231230 elif target .find ("." ) != - 1 :
232231 # it's a class variable
233- targer_list [ targer_list .index (target )] = getattr (getattr (self , target [:target .find ("." )]), target [target .find ("." )+ 1 :])
232+ target_list [ target_list .index (target )] = getattr (getattr (self , target [:target .find ("." )]), target [target .find ("." )+ 1 :])
234233 else :
235- targer_list [ targer_list .index (target )] = getattr (self , target )
234+ target_list [ target_list .index (target )] = getattr (self , target )
236235 except Exception as e :
237236 pass
238237
239- return targer_list
238+ return target_list
239+
240+ @input_deserializer
241+ def _dispatch_generator_started (self , request : Any ) -> Any :
242+ """For internal use only."""
243+ self ._gen = dispach_message (self , request )
244+ # check if self._gen is a generator
245+ if not hasattr (self ._gen , '__iter__' ):
246+ raise TypeError ("Expected a generator or iterable object, got: {}" .format (type (self ._gen ).__name__ ))
247+
248+ return _iris .get_iris ().IOP .Generator .Message .Ack ._New ()
249+
250+ @output_serializer
251+ def _dispatch_generator_poll (self ) -> Any :
252+ """For internal use only."""
253+ try :
254+ return next (self ._gen )
255+ except StopIteration :
256+ return _iris .get_iris ().IOP .Generator .Message .Stop ._New ()
0 commit comments