Skip to content

Commit b7a4388

Browse files
committed
Refactor _BusinessHost methods for improved clarity and validation
1 parent ab328b1 commit b7a4388

File tree

1 file changed

+36
-54
lines changed

1 file changed

+36
-54
lines changed

src/iop/_business_host.py

Lines changed: 36 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,12 @@
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

206
from iop._common import _Common
217
from 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
3210
from iop._async_request import AsyncRequest
3311

3412
class _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

Comments
 (0)