1- import abc
2- import asyncio
3- import base64
4- import codecs
5- import datetime
6- import decimal
7- import importlib
8- import inspect
9- import iris
10- import json
11- import pickle
12- import uuid
13- from dataclasses import dataclass
14- from functools import wraps
15- from inspect import getsource , signature
16- from typing import Any , Callable , ClassVar , Dict , List , Optional , Tuple , Type , Union
1+ from inspect import getsource
2+ from typing import Any ,List , Optional , Tuple , Union
173
18- from dacite import Config , from_dict
4+ import iris
195
206from iop ._common import _Common
217from iop ._message import _Message as Message
22- from iop ._utils import _Utils
23- from iop ._decorators import (
24- input_serializer , input_serializer_param , output_deserializer ,
25- input_deserializer , output_serializer
26- )
27- from iop ._serialization import IrisJSONEncoder , IrisJSONDecoder
28- from iop ._dispatch import (
29- dispatch_serializer , dispatch_deserializer ,
30- dispach_message , create_dispatch
31- )
8+ from iop ._decorators import input_serializer_param , output_deserializer
9+ from iop ._dispatch import dispatch_serializer , dispatch_deserializer
3210from iop ._async_request import AsyncRequest
3311
3412class _BusinessHost (_Common ):
@@ -92,7 +70,7 @@ async def send_request_async_ng(self, target: str, request: Union[Message, Any],
9270 return await AsyncRequest (target , request , timeout , description , self )
9371
9472 def send_multi_request_sync (self , target_request : List [Tuple [str , Union [Message , Any ]]],
95- timeout : int = - 1 , description : Optional [str ] = None ) -> List [Tuple [str , Union [Message , Any ], Any , int ]]:
73+ timeout : int = - 1 , description : Optional [str ] = None ) -> List [Tuple [str , Union [Message , Any ], Any , int ]]:
9674 """Send multiple messages synchronously to target components.
9775
9876 Args:
@@ -102,35 +80,39 @@ def send_multi_request_sync(self, target_request: List[Tuple[str, Union[Message,
10280
10381 Returns:
10482 List of tuples (target, request, response, status)
83+
84+ Raises:
85+ TypeError: If target_request is not a list of tuples
86+ ValueError: If target_request is empty
10587 """
106- # create a list of iris.Ens.CallStructure for each target_request
107- call_list = []
108- # sanity check
88+ self ._validate_target_request (target_request )
89+
90+ call_list = [self ._create_call_structure (target , request )
91+ for target , request in target_request ]
92+
93+ response_list = self .iris_handle .dispatchSendRequestSyncMultiple (call_list , timeout )
94+
95+ return [(target_request [i ][0 ],
96+ target_request [i ][1 ],
97+ dispatch_deserializer (response_list [i ].Response ),
98+ response_list [i ].ResponseCode )
99+ for i in range (len (target_request ))]
100+
101+ def _validate_target_request (self , target_request : List [Tuple [str , Union [Message , Any ]]]) -> None :
102+ """Validate the target_request parameter structure."""
109103 if not isinstance (target_request , list ):
110- raise TypeError ("The target_request parameter must be a list" )
111- if len (target_request ) == 0 :
112- raise ValueError ("The target_request parameter must not be empty" )
113- # check if the target_request is a list of tuple of 2 elements
104+ raise TypeError ("target_request must be a list" )
105+ if not target_request :
106+ raise ValueError ("target_request must not be empty" )
114107 if not all (isinstance (item , tuple ) and len (item ) == 2 for item in target_request ):
115- raise TypeError ("The target_request parameter must be a list of tuple of 2 elements" )
116-
117- for target , request in target_request :
118- call = iris .cls ("Ens.CallStructure" )._New ()
119- call .TargetDispatchName = target
120- call .Request = dispatch_serializer (request )
121- call_list .append (call )
122- # call the dispatchSendMultiRequestSync method
123- response_list = self .iris_handle .dispatchSendRequestSyncMultiple (call_list , timeout )
124- # create a list of tuple (target, request, response, status)
125- result = []
126- for i in range (len (target_request )):
127- result .append (
128- (target_request [i ][0 ],
129- target_request [i ][1 ],
130- dispatch_deserializer (response_list [i ].Response ),
131- response_list [i ].ResponseCode
132- ))
133- return result
108+ raise TypeError ("target_request must contain tuples of (target, request)" )
109+
110+ def _create_call_structure (self , target : str , request : Union [Message , Any ]) -> Any :
111+ """Create an Ens.CallStructure object for the request."""
112+ call = iris .cls ("Ens.CallStructure" )._New ()
113+ call .TargetDispatchName = target
114+ call .Request = dispatch_serializer (request )
115+ return call
134116
135117 @staticmethod
136118 def OnGetConnections () -> Optional [List [str ]]:
0 commit comments