iris-pex-embedded-python 3.4.3b2__py3-none-any.whl → 3.4.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of iris-pex-embedded-python might be problematic. Click here for more details.
- iop/_async_request.py +6 -3
- iop/_business_host.py +5 -6
- iop/_business_operation.py +4 -3
- iop/_business_process.py +9 -8
- iop/_business_service.py +3 -2
- iop/_cli.py +10 -8
- iop/_common.py +11 -8
- iop/_debugpy.py +1 -1
- iop/_decorators.py +2 -1
- iop/_director.py +16 -16
- iop/_dispatch.py +44 -24
- iop/_inbound_adapter.py +1 -1
- iop/_iris.py +2 -1
- iop/_log_manager.py +27 -10
- iop/_message.py +1 -0
- iop/_message_validator.py +4 -2
- iop/_outbound_adapter.py +1 -1
- iop/_private_session_duplex.py +5 -3
- iop/_private_session_process.py +3 -3
- iop/_serialization.py +4 -4
- iop/_utils.py +31 -20
- iop/cls/IOP/BusinessOperation.cls +2 -2
- iop/cls/IOP/BusinessProcess.cls +25 -5
- iop/cls/IOP/BusinessService.cls +8 -3
- iop/cls/IOP/Common.cls +40 -5
- iop/cls/IOP/InboundAdapter.cls +1 -1
- iop/cls/IOP/OutboundAdapter.cls +1 -1
- iop/cls/IOP/Utils.cls +5 -1
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/METADATA +1 -2
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/RECORD +34 -34
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/WHEEL +1 -1
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/entry_points.txt +0 -0
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/licenses/LICENSE +0 -0
- {iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/top_level.txt +0 -0
iop/_async_request.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from . import _iris
|
|
3
2
|
from typing import Any, Optional, Union
|
|
4
|
-
|
|
5
|
-
from
|
|
3
|
+
|
|
4
|
+
from . import _iris
|
|
5
|
+
from ._dispatch import dispatch_deserializer, dispatch_serializer
|
|
6
|
+
from ._message import _Message as Message
|
|
6
7
|
|
|
7
8
|
class AsyncRequest(asyncio.Future):
|
|
8
9
|
_message_header_id: int = 0
|
|
@@ -19,6 +20,8 @@ class AsyncRequest(asyncio.Future):
|
|
|
19
20
|
self.timeout = timeout
|
|
20
21
|
self.description = description
|
|
21
22
|
self.host = host
|
|
23
|
+
if host is None:
|
|
24
|
+
raise ValueError("host parameter cannot be None")
|
|
22
25
|
self._iris_handle = host.iris_handle
|
|
23
26
|
asyncio.create_task(self.send())
|
|
24
27
|
|
iop/_business_host.py
CHANGED
|
@@ -2,12 +2,11 @@ from inspect import getsource
|
|
|
2
2
|
from typing import Any,List, Optional, Tuple, Union
|
|
3
3
|
|
|
4
4
|
from . import _iris
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from
|
|
10
|
-
from iop._async_request import AsyncRequest
|
|
5
|
+
from ._common import _Common
|
|
6
|
+
from ._message import _Message as Message
|
|
7
|
+
from ._decorators import input_serializer_param, output_deserializer
|
|
8
|
+
from ._dispatch import dispatch_serializer, dispatch_deserializer
|
|
9
|
+
from ._async_request import AsyncRequest
|
|
11
10
|
|
|
12
11
|
class _BusinessHost(_Common):
|
|
13
12
|
"""Base class for business components that defines common methods.
|
iop/_business_operation.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import importlib
|
|
2
2
|
from typing import Any, List, Optional, Union, Tuple
|
|
3
|
-
|
|
4
|
-
from
|
|
5
|
-
from
|
|
3
|
+
|
|
4
|
+
from ._business_host import _BusinessHost
|
|
5
|
+
from ._decorators import input_deserializer, output_serializer, input_serializer, output_deserializer
|
|
6
|
+
from ._dispatch import create_dispatch, dispach_message
|
|
6
7
|
|
|
7
8
|
class _BusinessOperation(_BusinessHost):
|
|
8
9
|
"""Business operation component that handles outbound communication.
|
iop/_business_process.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from typing import Any, List, Optional, Union
|
|
2
|
-
|
|
3
|
-
from
|
|
4
|
-
from
|
|
2
|
+
|
|
3
|
+
from ._business_host import _BusinessHost
|
|
4
|
+
from ._decorators import input_deserializer, input_serializer_param, output_serializer, input_serializer, output_deserializer
|
|
5
|
+
from ._dispatch import create_dispatch, dispach_message
|
|
5
6
|
|
|
6
7
|
class _BusinessProcess(_BusinessHost):
|
|
7
8
|
"""Business process component that contains routing and transformation logic.
|
|
@@ -72,23 +73,23 @@ class _BusinessProcess(_BusinessHost):
|
|
|
72
73
|
return self.iris_handle.dispatchReply(response)
|
|
73
74
|
|
|
74
75
|
@input_serializer_param(1,'request')
|
|
75
|
-
def send_request_async(self, target: str, request: Any,
|
|
76
|
+
def send_request_async(self, target: str, request: Any, description: Optional[str]=None, completion_key: Optional[str]=None, response_required: bool=True) -> None:
|
|
76
77
|
"""Send the specified message to the target business process or business operation asynchronously.
|
|
77
78
|
|
|
78
79
|
Args:
|
|
79
80
|
target: The name of the business process or operation to receive the request
|
|
80
81
|
request: The message to send to the target
|
|
81
|
-
response_required: Whether a response is required
|
|
82
|
-
completion_key: A string that will be returned with the response if the maximum time is exceeded
|
|
83
82
|
description: An optional description property in the message header
|
|
83
|
+
completion_key: A string that will be returned with the response if the maximum time is exceeded
|
|
84
|
+
response_required: Whether a response is required
|
|
84
85
|
|
|
85
86
|
Raises:
|
|
86
87
|
TypeError: If request is not of type Message or IRISObject
|
|
87
88
|
"""
|
|
88
89
|
if response_required:
|
|
89
|
-
response_required =
|
|
90
|
+
response_required = True
|
|
90
91
|
else:
|
|
91
|
-
response_required =
|
|
92
|
+
response_required = False
|
|
92
93
|
return self.iris_handle.dispatchSendRequestAsync(target, request, response_required, completion_key, description)
|
|
93
94
|
|
|
94
95
|
def set_timer(self, timeout: Union[int, str], completion_key: Optional[str]=None) -> None:
|
iop/_business_service.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import importlib
|
|
2
|
-
|
|
3
|
-
from
|
|
2
|
+
|
|
3
|
+
from ._business_host import _BusinessHost
|
|
4
|
+
from ._decorators import input_deserializer, output_serializer, input_serializer, output_deserializer
|
|
4
5
|
|
|
5
6
|
class _BusinessService(_BusinessHost):
|
|
6
7
|
""" This class is responsible for receiving the data from external system and sending it to business processes or business operations in the production.
|
iop/_cli.py
CHANGED
|
@@ -7,8 +7,9 @@ from enum import Enum, auto
|
|
|
7
7
|
import sys
|
|
8
8
|
from typing import Optional, Callable
|
|
9
9
|
from importlib.metadata import version
|
|
10
|
-
|
|
11
|
-
from
|
|
10
|
+
|
|
11
|
+
from ._director import _Director
|
|
12
|
+
from ._utils import _Utils
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class CommandType(Enum):
|
|
@@ -97,7 +98,7 @@ class Command:
|
|
|
97
98
|
def _handle_default(self) -> None:
|
|
98
99
|
if self.args.default == 'not_set':
|
|
99
100
|
print(_Director.get_default_production())
|
|
100
|
-
|
|
101
|
+
elif self.args.default is not None:
|
|
101
102
|
_Director.set_default_production(self.args.default)
|
|
102
103
|
|
|
103
104
|
def _handle_list(self) -> None:
|
|
@@ -143,15 +144,16 @@ class Command:
|
|
|
143
144
|
|
|
144
145
|
def _handle_migrate(self) -> None:
|
|
145
146
|
migrate_path = self.args.migrate
|
|
146
|
-
if not
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
if migrate_path is not None:
|
|
148
|
+
if not os.path.isabs(migrate_path):
|
|
149
|
+
migrate_path = os.path.join(os.getcwd(), migrate_path)
|
|
150
|
+
_Utils.migrate(migrate_path)
|
|
149
151
|
|
|
150
152
|
def _handle_log(self) -> None:
|
|
151
153
|
if self.args.log == 'not_set':
|
|
152
154
|
print(_Director.log_production())
|
|
153
|
-
|
|
154
|
-
print(_Director.log_production_top(self.args.log))
|
|
155
|
+
elif self.args.log is not None:
|
|
156
|
+
print(_Director.log_production_top(int(self.args.log)))
|
|
155
157
|
|
|
156
158
|
def _handle_init(self) -> None:
|
|
157
159
|
_Utils.setup(None)
|
iop/_common.py
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import inspect
|
|
3
3
|
import traceback
|
|
4
|
-
|
|
5
4
|
from typing import Any, ClassVar, List, Optional, Tuple
|
|
6
5
|
|
|
7
6
|
from . import _iris
|
|
8
|
-
|
|
9
|
-
from
|
|
10
|
-
|
|
11
|
-
from iop._debugpy import debugpython
|
|
7
|
+
from ._log_manager import LogManager, logging
|
|
8
|
+
from ._debugpy import debugpython
|
|
12
9
|
|
|
13
10
|
class _Common(metaclass=abc.ABCMeta):
|
|
14
11
|
"""Base class that defines common methods for all component types.
|
|
@@ -21,7 +18,12 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
21
18
|
ICON_URL: ClassVar[str]
|
|
22
19
|
iris_handle: Any = None
|
|
23
20
|
_log_to_console: bool = False
|
|
24
|
-
_logger: logging.Logger = None
|
|
21
|
+
_logger: Optional[logging.Logger] = None
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def get_adapter_type() -> Optional[str]:
|
|
25
|
+
"""Get the adapter type for this component. Override in subclasses."""
|
|
26
|
+
return None
|
|
25
27
|
|
|
26
28
|
@property
|
|
27
29
|
def logger(self) -> logging.Logger:
|
|
@@ -104,7 +106,8 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
104
106
|
super_class = classname[1:-1]
|
|
105
107
|
adapter = cls.get_adapter_type()
|
|
106
108
|
if adapter is None:
|
|
107
|
-
|
|
109
|
+
# for retro-compatibility
|
|
110
|
+
adapter = cls.getAdapterType() # type: ignore
|
|
108
111
|
break
|
|
109
112
|
elif classname in ["'iop.BusinessProcess'","'iop.DuplexProcess'","'iop.InboundAdapter'","'iop.OutboundAdapter'",
|
|
110
113
|
"'grongier.pex.BusinessProcess'","'grongier.pex.DuplexProcess'","'grongier.pex.InboundAdapter'","'grongier.pex.OutboundAdapter'"] :
|
|
@@ -113,7 +116,7 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
113
116
|
break
|
|
114
117
|
|
|
115
118
|
if ""==super_class:
|
|
116
|
-
return
|
|
119
|
+
return []
|
|
117
120
|
ret.append(super_class)
|
|
118
121
|
|
|
119
122
|
# Get the class documentation, if any
|
iop/_debugpy.py
CHANGED
|
@@ -83,7 +83,7 @@ def wait_for_debugpy_connected(timeout: float = 30, port: int = 0) -> bool:
|
|
|
83
83
|
|
|
84
84
|
def timeout_handler():
|
|
85
85
|
time.sleep(timeout)
|
|
86
|
-
debugpy.wait_for_client.cancel()
|
|
86
|
+
debugpy.wait_for_client.cancel() # type: ignore
|
|
87
87
|
|
|
88
88
|
threading.Thread(target=timeout_handler, daemon=True).start()
|
|
89
89
|
|
iop/_decorators.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from functools import wraps
|
|
2
2
|
from typing import Any, Callable
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
from ._dispatch import dispatch_deserializer, dispatch_serializer
|
|
4
5
|
|
|
5
6
|
def input_serializer(fonction: Callable) -> Callable:
|
|
6
7
|
"""Decorator that serializes all input arguments."""
|
iop/_director.py
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import datetime
|
|
3
3
|
import functools
|
|
4
|
-
from . import _iris
|
|
5
4
|
import signal
|
|
6
5
|
from dataclasses import dataclass
|
|
7
6
|
|
|
8
|
-
from
|
|
9
|
-
from
|
|
7
|
+
from . import _iris
|
|
8
|
+
from ._dispatch import dispatch_deserializer, dispatch_serializer
|
|
9
|
+
from ._utils import _Utils
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class SigintHandler():
|
|
13
|
+
|
|
14
|
+
sigint: bool = False
|
|
15
|
+
sigint_log: bool = False
|
|
16
|
+
log_only: bool = False
|
|
17
|
+
|
|
18
|
+
def signal_handler(self, signal, frame):
|
|
19
|
+
if self.sigint or self.log_only:
|
|
20
|
+
self.sigint_log = True
|
|
21
|
+
self.sigint = True
|
|
10
22
|
|
|
11
23
|
class _Director():
|
|
12
24
|
""" The Directorclass is used for nonpolling business services, that is, business services which are not automatically
|
|
@@ -89,7 +101,7 @@ class _Director():
|
|
|
89
101
|
loop.close()
|
|
90
102
|
|
|
91
103
|
@staticmethod
|
|
92
|
-
async def _start_production_async(production_name
|
|
104
|
+
async def _start_production_async(production_name:str, handler: SigintHandler):
|
|
93
105
|
_Director.start_production(production_name)
|
|
94
106
|
while True:
|
|
95
107
|
if handler.sigint:
|
|
@@ -286,15 +298,3 @@ class _Director():
|
|
|
286
298
|
deserialized_response = f'{response.classname} : {_Utils.stream_to_string(response.jstr)}'
|
|
287
299
|
return deserialized_response
|
|
288
300
|
|
|
289
|
-
|
|
290
|
-
@dataclass
|
|
291
|
-
class SigintHandler():
|
|
292
|
-
|
|
293
|
-
sigint: bool = False
|
|
294
|
-
sigint_log: bool = False
|
|
295
|
-
log_only: bool = False
|
|
296
|
-
|
|
297
|
-
def signal_handler(self, signal, frame):
|
|
298
|
-
if self.sigint or self.log_only:
|
|
299
|
-
self.sigint_log = True
|
|
300
|
-
self.sigint = True
|
iop/_dispatch.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from inspect import signature
|
|
2
|
-
from typing import Any
|
|
1
|
+
from inspect import signature, Parameter
|
|
2
|
+
from typing import Any, List, Tuple, Callable
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
4
|
+
from ._serialization import serialize_message, serialize_pickle_message, deserialize_message, deserialize_pickle_message
|
|
5
|
+
from ._message_validator import is_message_instance, is_pickle_message_instance, is_iris_object_instance
|
|
6
6
|
|
|
7
7
|
def dispatch_serializer(message: Any) -> Any:
|
|
8
8
|
"""Serializes the message based on its type.
|
|
@@ -59,7 +59,7 @@ def dispatch_deserializer(serial: Any) -> Any:
|
|
|
59
59
|
else:
|
|
60
60
|
return serial
|
|
61
61
|
|
|
62
|
-
def dispach_message(host, request: Any) -> Any:
|
|
62
|
+
def dispach_message(host: Any, request: Any) -> Any:
|
|
63
63
|
"""Dispatches the message to the appropriate method.
|
|
64
64
|
|
|
65
65
|
Args:
|
|
@@ -79,23 +79,43 @@ def dispach_message(host, request: Any) -> Any:
|
|
|
79
79
|
|
|
80
80
|
return getattr(host, call)(request)
|
|
81
81
|
|
|
82
|
-
def create_dispatch(host) -> None:
|
|
83
|
-
"""Creates a
|
|
84
|
-
|
|
82
|
+
def create_dispatch(host: Any) -> None:
|
|
83
|
+
"""Creates a dispatch table mapping class names to their handler methods.
|
|
84
|
+
The dispatch table consists of tuples of (fully_qualified_class_name, method_name).
|
|
85
|
+
Only methods that take a single typed parameter are considered as handlers.
|
|
85
86
|
"""
|
|
86
|
-
if len(host.DISPATCH)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
87
|
+
if len(host.DISPATCH) > 0:
|
|
88
|
+
return
|
|
89
|
+
|
|
90
|
+
for method_name in get_callable_methods(host):
|
|
91
|
+
handler_info = get_handler_info(host, method_name)
|
|
92
|
+
if handler_info:
|
|
93
|
+
host.DISPATCH.append(handler_info)
|
|
94
|
+
|
|
95
|
+
def get_callable_methods(host: Any) -> List[str]:
|
|
96
|
+
"""Returns a list of callable method names that don't start with underscore."""
|
|
97
|
+
return [
|
|
98
|
+
func for func in dir(host)
|
|
99
|
+
if callable(getattr(host, func)) and not func.startswith("_")
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
def get_handler_info(host: Any, method_name: str) -> Tuple[str, str] | None:
|
|
103
|
+
"""Analyzes a method to determine if it's a valid message handler.
|
|
104
|
+
Returns a tuple of (fully_qualified_class_name, method_name) if valid,
|
|
105
|
+
None otherwise.
|
|
106
|
+
"""
|
|
107
|
+
try:
|
|
108
|
+
params = signature(getattr(host, method_name)).parameters
|
|
109
|
+
if len(params) != 1:
|
|
110
|
+
return None
|
|
111
|
+
|
|
112
|
+
param: Parameter = next(iter(params.values()))
|
|
113
|
+
annotation = param.annotation
|
|
114
|
+
|
|
115
|
+
if annotation == Parameter.empty or not isinstance(annotation, type):
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
return f"{annotation.__module__}.{annotation.__name__}", method_name
|
|
119
|
+
|
|
120
|
+
except ValueError:
|
|
121
|
+
return None
|
iop/_inbound_adapter.py
CHANGED
iop/_iris.py
CHANGED
iop/_log_manager.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import traceback
|
|
2
|
-
from . import _iris
|
|
3
1
|
import logging
|
|
4
|
-
|
|
2
|
+
|
|
3
|
+
from . import _iris
|
|
5
4
|
|
|
6
5
|
class LogManager:
|
|
7
6
|
"""Manages logging integration between Python's logging module and IRIS."""
|
|
@@ -73,11 +72,29 @@ class IRISLogHandler(logging.Handler):
|
|
|
73
72
|
Args:
|
|
74
73
|
record: The logging record to emit
|
|
75
74
|
"""
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
# Extract class and method names with fallbacks
|
|
76
|
+
class_name = getattr(record, "class_name", record.name)
|
|
77
|
+
method_name = getattr(record, "method_name", record.funcName)
|
|
78
|
+
|
|
79
|
+
# Format message and get full method path
|
|
80
|
+
message = self.format(record)
|
|
81
|
+
method_path = f"{class_name}.{method_name}"
|
|
82
|
+
|
|
83
|
+
# Determine if console logging should be used
|
|
84
|
+
use_console = self.to_console or getattr(record, "to_console", False)
|
|
85
|
+
|
|
86
|
+
if use_console:
|
|
87
|
+
_iris.get_iris().cls("%SYS.System").WriteToConsoleLog(
|
|
88
|
+
message,
|
|
89
|
+
0,
|
|
90
|
+
self.level_map_console.get(record.levelno, 0),
|
|
91
|
+
method_path
|
|
92
|
+
)
|
|
81
93
|
else:
|
|
82
|
-
|
|
83
|
-
_iris.get_iris().cls("Ens.Util.Log").Log(
|
|
94
|
+
log_level = self.level_map.get(record.levelno, 4)
|
|
95
|
+
_iris.get_iris().cls("Ens.Util.Log").Log(
|
|
96
|
+
log_level,
|
|
97
|
+
class_name,
|
|
98
|
+
method_name,
|
|
99
|
+
message
|
|
100
|
+
)
|
iop/_message.py
CHANGED
iop/_message_validator.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import dataclasses
|
|
2
2
|
from typing import Any, Type
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
from ._message import _Message, _PickleMessage, _PydanticPickleMessage, BaseModel
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def is_message_instance(obj: Any) -> bool:
|
|
@@ -27,7 +28,8 @@ def is_iris_object_instance(obj: Any) -> bool:
|
|
|
27
28
|
"""Check if object is an IRIS persistent object."""
|
|
28
29
|
return (obj is not None and
|
|
29
30
|
type(obj).__module__.startswith('iris') and
|
|
30
|
-
obj._IsA("%Persistent"))
|
|
31
|
+
(obj._IsA("%Persistent") or obj._IsA("%Stream.Object")))
|
|
32
|
+
# Stream.Object are used for HTTP InboundAdapter/OutboundAdapter
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
def is_message_class(klass: Type) -> bool:
|
iop/_outbound_adapter.py
CHANGED
iop/_private_session_duplex.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import importlib
|
|
2
|
-
|
|
3
|
-
from
|
|
2
|
+
|
|
3
|
+
from ._business_host import _BusinessHost
|
|
4
|
+
from ._decorators import input_deserializer, input_serializer_param, output_serializer, input_serializer, output_deserializer
|
|
5
|
+
from ._dispatch import create_dispatch, dispach_message
|
|
4
6
|
|
|
5
7
|
class _PrivateSessionDuplex(_BusinessHost):
|
|
6
8
|
|
|
@@ -26,7 +28,7 @@ class _PrivateSessionDuplex(_BusinessHost):
|
|
|
26
28
|
@output_serializer
|
|
27
29
|
def _dispatch_on_message(self, request):
|
|
28
30
|
""" For internal use only. """
|
|
29
|
-
return self
|
|
31
|
+
return dispach_message(self,request)
|
|
30
32
|
|
|
31
33
|
def _set_iris_handles(self, handle_current, handle_partner):
|
|
32
34
|
""" For internal use only. """
|
iop/_private_session_process.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
1
|
+
from ._business_process import _BusinessProcess
|
|
2
|
+
from ._decorators import input_deserializer, output_serializer, input_serializer, output_deserializer
|
|
3
3
|
|
|
4
4
|
class _PrivateSessionProcess(_BusinessProcess):
|
|
5
5
|
|
|
@@ -12,7 +12,7 @@ class _PrivateSessionProcess(_BusinessProcess):
|
|
|
12
12
|
self._save_persistent_properties(host_object)
|
|
13
13
|
return return_object
|
|
14
14
|
|
|
15
|
-
def on_document(source_config_name,request):
|
|
15
|
+
def on_document(self,source_config_name,request):
|
|
16
16
|
pass
|
|
17
17
|
|
|
18
18
|
|
iop/_serialization.py
CHANGED
|
@@ -7,11 +7,11 @@ import json
|
|
|
7
7
|
from dataclasses import is_dataclass
|
|
8
8
|
from typing import Any, Dict, Type
|
|
9
9
|
|
|
10
|
-
from . import _iris
|
|
11
10
|
from pydantic import BaseModel, TypeAdapter, ValidationError
|
|
12
11
|
|
|
13
|
-
from
|
|
14
|
-
from
|
|
12
|
+
from . import _iris
|
|
13
|
+
from ._message import _PydanticPickleMessage, _Message
|
|
14
|
+
from ._utils import _Utils
|
|
15
15
|
|
|
16
16
|
class SerializationError(Exception):
|
|
17
17
|
"""Exception raised for serialization errors."""
|
|
@@ -107,7 +107,7 @@ class MessageSerializer:
|
|
|
107
107
|
raise SerializationError(f"Classname must include a module: {classname}")
|
|
108
108
|
return classname[:j], classname[j+1:]
|
|
109
109
|
|
|
110
|
-
def dataclass_from_dict(klass: Type, dikt: Dict) -> Any:
|
|
110
|
+
def dataclass_from_dict(klass: Type | Any, dikt: Dict) -> Any:
|
|
111
111
|
"""Converts a dictionary to a dataclass instance.
|
|
112
112
|
Handles non attended fields and nested dataclasses."""
|
|
113
113
|
|
iop/_utils.py
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
import ast
|
|
4
|
-
from . import _iris
|
|
5
4
|
import inspect
|
|
6
|
-
import xmltodict
|
|
7
|
-
import pkg_resources
|
|
8
5
|
import importlib
|
|
9
6
|
import importlib.util
|
|
7
|
+
import importlib.resources
|
|
10
8
|
import json
|
|
11
|
-
from
|
|
9
|
+
from typing import Any, Dict, Optional, Union
|
|
10
|
+
|
|
11
|
+
import xmltodict
|
|
12
12
|
from pydantic import TypeAdapter
|
|
13
13
|
|
|
14
|
+
from . import _iris
|
|
15
|
+
from ._message import _Message, _PydanticMessage
|
|
16
|
+
|
|
14
17
|
class _Utils():
|
|
15
18
|
@staticmethod
|
|
16
19
|
def raise_on_error(sc):
|
|
@@ -23,35 +26,42 @@ class _Utils():
|
|
|
23
26
|
raise RuntimeError(_iris.get_iris().system.Status.GetOneStatusText(sc))
|
|
24
27
|
|
|
25
28
|
@staticmethod
|
|
26
|
-
def setup(path:str = None):
|
|
29
|
+
def setup(path:Optional[str] = None):
|
|
27
30
|
|
|
28
31
|
if path is None:
|
|
29
|
-
# get the path of the data folder with
|
|
30
|
-
|
|
32
|
+
# get the path of the data folder with importlib.resources
|
|
33
|
+
try:
|
|
34
|
+
path = str(importlib.resources.files('iop').joinpath('cls'))
|
|
35
|
+
except ModuleNotFoundError:
|
|
36
|
+
path = None
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
if path:
|
|
39
|
+
_Utils.raise_on_error(_iris.get_iris().cls('%SYSTEM.OBJ').LoadDir(path,'cubk',"*.cls",1))
|
|
33
40
|
|
|
34
41
|
# for retrocompatibility load grongier.pex
|
|
35
|
-
|
|
42
|
+
try:
|
|
43
|
+
path = str(importlib.resources.files('grongier').joinpath('cls'))
|
|
44
|
+
except ModuleNotFoundError:
|
|
45
|
+
path = None
|
|
36
46
|
|
|
37
47
|
if path:
|
|
38
48
|
_Utils.raise_on_error(_iris.get_iris().cls('%SYSTEM.OBJ').LoadDir(path,'cubk',"*.cls",1))
|
|
39
49
|
|
|
40
50
|
@staticmethod
|
|
41
|
-
def register_message_schema(
|
|
51
|
+
def register_message_schema(msg_cls: type):
|
|
42
52
|
"""
|
|
43
53
|
It takes a class and registers the schema
|
|
44
54
|
|
|
45
55
|
:param cls: The class to register
|
|
46
56
|
"""
|
|
47
|
-
if issubclass(
|
|
48
|
-
schema =
|
|
49
|
-
elif issubclass(
|
|
50
|
-
type_adapter = TypeAdapter(
|
|
57
|
+
if issubclass(msg_cls,_PydanticMessage):
|
|
58
|
+
schema = msg_cls.model_json_schema()
|
|
59
|
+
elif issubclass(msg_cls,_Message):
|
|
60
|
+
type_adapter = TypeAdapter(msg_cls)
|
|
51
61
|
schema = type_adapter.json_schema()
|
|
52
62
|
else:
|
|
53
63
|
raise ValueError("The class must be a subclass of _Message or _PydanticMessage")
|
|
54
|
-
schema_name =
|
|
64
|
+
schema_name = msg_cls.__module__ + '.' + msg_cls.__name__
|
|
55
65
|
schema_str = json.dumps(schema)
|
|
56
66
|
categories = schema_name
|
|
57
67
|
_Utils.register_schema(schema_name,schema_str,categories)
|
|
@@ -161,10 +171,11 @@ class _Utils():
|
|
|
161
171
|
for klass in classes:
|
|
162
172
|
extend = ''
|
|
163
173
|
if len(klass.bases) == 1:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
174
|
+
base = klass.bases[0]
|
|
175
|
+
if isinstance(base, ast.Name):
|
|
176
|
+
extend = base.id
|
|
177
|
+
elif isinstance(base, ast.Attribute):
|
|
178
|
+
extend = base.attr
|
|
168
179
|
if extend in ('BusinessOperation','BusinessProcess','BusinessService','DuplexService','DuplexProcess','DuplexOperation','InboundAdapter','OutboundAdapter'):
|
|
169
180
|
module = _Utils.filename_to_module(filename)
|
|
170
181
|
iris_class_name = f"{iris_package_name}.{module}.{klass.name}"
|
|
@@ -272,7 +283,7 @@ class _Utils():
|
|
|
272
283
|
raise ValueError("The file path must be absolute")
|
|
273
284
|
|
|
274
285
|
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
|
275
|
-
if spec is None:
|
|
286
|
+
if spec is None or spec.loader is None:
|
|
276
287
|
raise ImportError(f"Cannot find module named {module_name} at {file_path}")
|
|
277
288
|
|
|
278
289
|
module = importlib.util.module_from_spec(spec)
|
|
@@ -15,7 +15,7 @@ Method OnMessage(
|
|
|
15
15
|
try {
|
|
16
16
|
set response = ..%class."_dispatch_on_message"(request)
|
|
17
17
|
} catch ex {
|
|
18
|
-
set tSC = ex
|
|
18
|
+
set tSC = ..DisplayTraceback(ex)
|
|
19
19
|
}
|
|
20
20
|
quit tSC
|
|
21
21
|
}
|
|
@@ -27,7 +27,7 @@ Method OnKeepalive(pStatus As %Status = {$$$OK}) As %Status
|
|
|
27
27
|
$$$ThrowOnError(##super(pStatus))
|
|
28
28
|
do ..%class."on_keepalive"()
|
|
29
29
|
} catch ex {
|
|
30
|
-
set tSC = ex
|
|
30
|
+
set tSC = ..DisplayTraceback(ex)
|
|
31
31
|
}
|
|
32
32
|
quit tSC
|
|
33
33
|
}
|
iop/cls/IOP/BusinessProcess.cls
CHANGED
|
@@ -32,8 +32,13 @@ Method dispatchSendRequestAsync(
|
|
|
32
32
|
completionKey,
|
|
33
33
|
description)
|
|
34
34
|
{
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
Try {
|
|
36
|
+
$$$ThrowOnError(..SendRequestAsync(target,request,responseRequired,completionKey,description))
|
|
37
|
+
}
|
|
38
|
+
Catch ex {
|
|
39
|
+
set tSC = ..DisplayTraceback(ex)
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
quit
|
|
38
43
|
}
|
|
39
44
|
|
|
@@ -45,7 +50,7 @@ Method OnRequest(
|
|
|
45
50
|
try {
|
|
46
51
|
set response = ..%class."_dispatch_on_request"($this,request)
|
|
47
52
|
} catch ex {
|
|
48
|
-
set tSC = ex
|
|
53
|
+
set tSC = ..DisplayTraceback(ex)
|
|
49
54
|
}
|
|
50
55
|
quit tSC
|
|
51
56
|
}
|
|
@@ -62,7 +67,7 @@ Method OnResponse(
|
|
|
62
67
|
try {
|
|
63
68
|
set response = ..%class."_dispatch_on_response"($this,request,response,callRequest,callResponse,pCompletionKey)
|
|
64
69
|
} catch ex {
|
|
65
|
-
set tSC = ex
|
|
70
|
+
set tSC = ..DisplayTraceback(ex)
|
|
66
71
|
}
|
|
67
72
|
quit tSC
|
|
68
73
|
}
|
|
@@ -75,7 +80,7 @@ Method OnComplete(
|
|
|
75
80
|
try {
|
|
76
81
|
set response = ..%class."_dispatch_on_complete"($this,request,response)
|
|
77
82
|
} catch ex {
|
|
78
|
-
set tSC = ex
|
|
83
|
+
set tSC = ..DisplayTraceback(ex)
|
|
79
84
|
}
|
|
80
85
|
quit tSC
|
|
81
86
|
}
|
|
@@ -111,6 +116,21 @@ Storage Default
|
|
|
111
116
|
<Value name="5">
|
|
112
117
|
<Value>%class</Value>
|
|
113
118
|
</Value>
|
|
119
|
+
<Value name="6">
|
|
120
|
+
<Value>%enable</Value>
|
|
121
|
+
</Value>
|
|
122
|
+
<Value name="7">
|
|
123
|
+
<Value>%timeout</Value>
|
|
124
|
+
</Value>
|
|
125
|
+
<Value name="8">
|
|
126
|
+
<Value>%port</Value>
|
|
127
|
+
</Value>
|
|
128
|
+
<Value name="9">
|
|
129
|
+
<Value>%PythonInterpreterPath</Value>
|
|
130
|
+
</Value>
|
|
131
|
+
<Value name="10">
|
|
132
|
+
<Value>%traceback</Value>
|
|
133
|
+
</Value>
|
|
114
134
|
</Data>
|
|
115
135
|
<Data name="persistentProperties">
|
|
116
136
|
<Attribute>persistentProperties</Attribute>
|
iop/cls/IOP/BusinessService.cls
CHANGED
|
@@ -9,8 +9,13 @@ Parameter SETTINGS = "%classname:Python BusinessService,%module:Python BusinessS
|
|
|
9
9
|
|
|
10
10
|
Method dispatchProcessInput(pInput As %RegisteredObject) As %RegisteredObject
|
|
11
11
|
{
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
try {
|
|
13
|
+
set response = ..%class."_dispatch_on_process_input"(pInput)
|
|
14
|
+
} catch ex {
|
|
15
|
+
set tSC = ..DisplayTraceback(ex)
|
|
16
|
+
throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
17
|
+
}
|
|
18
|
+
quit response
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
Method OnProcessInput(
|
|
@@ -27,7 +32,7 @@ Method OnProcessInput(
|
|
|
27
32
|
set ..%WaitForNextCallInterval = ..%class."_wait_for_next_call_interval"
|
|
28
33
|
} catch {}
|
|
29
34
|
} catch ex {
|
|
30
|
-
set tSC = ex
|
|
35
|
+
set tSC = ..DisplayTraceback(ex)
|
|
31
36
|
}
|
|
32
37
|
quit tSC
|
|
33
38
|
}
|
iop/cls/IOP/Common.cls
CHANGED
|
@@ -27,6 +27,8 @@ Property %port As %Numeric [ InitialExpression = 0 ];
|
|
|
27
27
|
|
|
28
28
|
Property %PythonInterpreterPath As %String(MAXLEN = 255);
|
|
29
29
|
|
|
30
|
+
Property %traceback As %Boolean [ InitialExpression = 1 ];
|
|
31
|
+
|
|
30
32
|
/// Get Class
|
|
31
33
|
Method GetClass() As %SYS.Python
|
|
32
34
|
{
|
|
@@ -45,15 +47,45 @@ Method GetModule() As %String
|
|
|
45
47
|
Return ..%module
|
|
46
48
|
}
|
|
47
49
|
|
|
50
|
+
Method DisplayTraceback(ex) As %Status
|
|
51
|
+
{
|
|
52
|
+
set tSC = ex.AsStatus()
|
|
53
|
+
// Check if traceback is enabled
|
|
54
|
+
if ..%traceback {
|
|
55
|
+
// Import Modules
|
|
56
|
+
set sys = ##class(%SYS.Python).Import("sys")
|
|
57
|
+
set tracebackModule = ##class(%SYS.Python).Import("traceback")
|
|
58
|
+
set builtins = ##class(%SYS.Python).Import("builtins")
|
|
59
|
+
// Get the last traceback
|
|
60
|
+
set traceback = sys."last_traceback"
|
|
61
|
+
set exType = sys."last_type"."__name__"
|
|
62
|
+
set exValue = sys."last_value"."__str__"()
|
|
63
|
+
// Check if traceback is an object
|
|
64
|
+
if $isObject(traceback) {
|
|
65
|
+
// Format the traceback
|
|
66
|
+
set tb = tracebackModule."format_exception"(sys."last_type", sys."last_value", traceback)
|
|
67
|
+
set tbString = ""
|
|
68
|
+
for i=0:1:(tb."__len__"()-1) {
|
|
69
|
+
set tbString = tbString _ $c(10)_$c(13) _ tb."__getitem__"(i)
|
|
70
|
+
}
|
|
71
|
+
$$$LOGERROR(tbString)
|
|
72
|
+
set tSC = $$$ERROR($$$EnsErrGeneral,"Exception in Python class: "_..%classname_" - "_exType_" - "_exValue)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return tSC
|
|
76
|
+
}
|
|
77
|
+
|
|
48
78
|
Method OnInit() As %Status
|
|
49
79
|
{
|
|
50
80
|
set tSC = $$$OK
|
|
51
81
|
try {
|
|
82
|
+
do $system.Python.Debugging(..%traceback)
|
|
52
83
|
$$$ThrowOnError(..Connect())
|
|
53
84
|
do ..%class."_debugpy"($this)
|
|
54
85
|
do ..%class."_dispatch_on_init"($this)
|
|
55
86
|
} catch ex {
|
|
56
|
-
|
|
87
|
+
|
|
88
|
+
set tSC = ..DisplayTraceback(ex)
|
|
57
89
|
}
|
|
58
90
|
quit tSC
|
|
59
91
|
}
|
|
@@ -139,6 +171,7 @@ Method OnTearDown() As %Status
|
|
|
139
171
|
|
|
140
172
|
Method SetPropertyValues()
|
|
141
173
|
{
|
|
174
|
+
// First process the %settings property
|
|
142
175
|
set remoteSettings = $tr(..%settings,$c(13))
|
|
143
176
|
for i=1:1:$l(remoteSettings,$c(10)) {
|
|
144
177
|
set oneLine = $p(remoteSettings,$c(10),i)
|
|
@@ -150,17 +183,19 @@ Method SetPropertyValues()
|
|
|
150
183
|
$$$LOGWARNING(ex.DisplayString())
|
|
151
184
|
}
|
|
152
185
|
}
|
|
186
|
+
|
|
153
187
|
// Now process the Python Attributes Settings
|
|
154
188
|
// First list all the properties of the current class
|
|
155
189
|
set class = $CLASSNAME()
|
|
156
190
|
set tSQL = "SELECT * FROM %Dictionary.PropertyDefinition WHERE parent = ?"
|
|
157
|
-
set tSQL = tSQL _ " AND name <> 'timeout'"
|
|
158
|
-
set tSQL = tSQL _ " and name <> 'enable'"
|
|
191
|
+
set tSQL = tSQL _ " AND name <> '%timeout'"
|
|
192
|
+
set tSQL = tSQL _ " and name <> '%enable'"
|
|
159
193
|
set tSQL = tSQL _ " and name <> '%classpaths'"
|
|
160
194
|
set tSQL = tSQL _ " and name <> '%classname'"
|
|
161
195
|
set tSQL = tSQL _ " and name <> '%module'"
|
|
162
|
-
set tSQL = tSQL _ " and name <> 'port'"
|
|
163
|
-
set tSQL = tSQL _ " and name <> 'PythonInterpreterPath'"
|
|
196
|
+
set tSQL = tSQL _ " and name <> '%port'"
|
|
197
|
+
set tSQL = tSQL _ " and name <> '%PythonInterpreterPath'"
|
|
198
|
+
set tSQL = tSQL _ " and name <> '%traceback'"
|
|
164
199
|
|
|
165
200
|
set tStmt = ##class(%SQL.Statement).%New()
|
|
166
201
|
|
iop/cls/IOP/InboundAdapter.cls
CHANGED
iop/cls/IOP/OutboundAdapter.cls
CHANGED
iop/cls/IOP/Utils.cls
CHANGED
|
@@ -226,7 +226,7 @@ ClassMethod GenerateProxyClass(
|
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
#; Do not display any of the connection settings
|
|
229
|
-
#dim tSETTINGSParamValue As %String = "%classname:Python $type,%module:Python $type,%settings:Python $type,%classpaths:Python $type,%enable:Python Debug $type,%timeout:Python Debug $type,%port:Python Debug $type,%PythonInterpreterPath:Python Debug $type"
|
|
229
|
+
#dim tSETTINGSParamValue As %String = "%classname:Python $type,%module:Python $type,%settings:Python $type,%classpaths:Python $type,%enable:Python Debug $type,%timeout:Python Debug $type,%port:Python Debug $type,%PythonInterpreterPath:Python Debug $type,%traceback:Python Debug $type"
|
|
230
230
|
|
|
231
231
|
#dim tPropClassname As %Dictionary.PropertyDefinition = ##class(%Dictionary.PropertyDefinition).%New()
|
|
232
232
|
Set tPropClassname.Name = "%classname"
|
|
@@ -300,6 +300,10 @@ ClassMethod GenerateProxyClass(
|
|
|
300
300
|
Set tDefault = tPropInfo."__getitem__"(2)
|
|
301
301
|
If ""'=tDefault {
|
|
302
302
|
Set tCustomProp.InitialExpression = $$$quote(tDefault)
|
|
303
|
+
if $LENGTH(tDefault)>255 {
|
|
304
|
+
Set tSC = tCustomProp.Parameters.SetAt("","MAXLEN")
|
|
305
|
+
Quit:$$$ISERR(tSC)
|
|
306
|
+
}
|
|
303
307
|
}
|
|
304
308
|
Set tCustomProp.Required = tPropInfo."__getitem__"(3)
|
|
305
309
|
|
{iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.4
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -47,7 +47,6 @@ License-File: LICENSE
|
|
|
47
47
|
Requires-Dist: pydantic>=2.0.0
|
|
48
48
|
Requires-Dist: xmltodict>=0.12.0
|
|
49
49
|
Requires-Dist: iris-embedded-python-wrapper>=0.0.6
|
|
50
|
-
Requires-Dist: setuptools>=40.8.0
|
|
51
50
|
Requires-Dist: jsonpath-ng>=1.7.0
|
|
52
51
|
Requires-Dist: debugpy>=1.8.0
|
|
53
52
|
Dynamic: license-file
|
{iris_pex_embedded_python-3.4.3b2.dist-info → iris_pex_embedded_python-3.4.4.dist-info}/RECORD
RENAMED
|
@@ -29,38 +29,38 @@ grongier/pex/_utils.py,sha256=gvsdr8WhWrE6smlsCxhoF14VUZfitrwqr5J57HkJhi4,29
|
|
|
29
29
|
grongier/pex/wsgi/handlers.py,sha256=NrFLo_YbAh-x_PlWhAiWkQnUUN2Ss9HoEm63dDWCBpQ,2947
|
|
30
30
|
iop/__init__.py,sha256=1C589HojSVK0yJf1KuTPA39ZjrOYO0QFLv45rqbZpA4,1183
|
|
31
31
|
iop/__main__.py,sha256=pQzVtkDhAeI6dpNRC632dVk2SGZZIEDwDufdgZe8VWs,98
|
|
32
|
-
iop/_async_request.py,sha256=
|
|
33
|
-
iop/_business_host.py,sha256=
|
|
34
|
-
iop/_business_operation.py,sha256=
|
|
35
|
-
iop/_business_process.py,sha256=
|
|
36
|
-
iop/_business_service.py,sha256=
|
|
37
|
-
iop/_cli.py,sha256=
|
|
38
|
-
iop/_common.py,sha256=
|
|
39
|
-
iop/_debugpy.py,sha256=
|
|
40
|
-
iop/_decorators.py,sha256=
|
|
41
|
-
iop/_director.py,sha256=
|
|
42
|
-
iop/_dispatch.py,sha256=
|
|
43
|
-
iop/_inbound_adapter.py,sha256=
|
|
44
|
-
iop/_iris.py,sha256=
|
|
45
|
-
iop/_log_manager.py,sha256=
|
|
46
|
-
iop/_message.py,sha256=
|
|
47
|
-
iop/_message_validator.py,sha256=
|
|
48
|
-
iop/_outbound_adapter.py,sha256=
|
|
49
|
-
iop/_private_session_duplex.py,sha256=
|
|
50
|
-
iop/_private_session_process.py,sha256=
|
|
51
|
-
iop/_serialization.py,sha256=
|
|
52
|
-
iop/_utils.py,sha256=
|
|
53
|
-
iop/cls/IOP/BusinessOperation.cls,sha256=
|
|
54
|
-
iop/cls/IOP/BusinessProcess.cls,sha256=
|
|
55
|
-
iop/cls/IOP/BusinessService.cls,sha256=
|
|
56
|
-
iop/cls/IOP/Common.cls,sha256=
|
|
32
|
+
iop/_async_request.py,sha256=Umx79MHjIE5JV5exxCzKT9ZuJ3YhMHYwjeFyB4gIlU4,2324
|
|
33
|
+
iop/_business_host.py,sha256=BfTvvh2YenNrg4TEuaAiqb3kzj_fJpROV4Qq-ycREi0,9682
|
|
34
|
+
iop/_business_operation.py,sha256=nPZ0lg8IKT5ReWSuyrIWlcTwk2e_1hWHjYbnIhnUHBo,3031
|
|
35
|
+
iop/_business_process.py,sha256=2W4tA8kPGrKp2bP0RVkXR8JSiVnSKCUgN24mDmPkJEU,8548
|
|
36
|
+
iop/_business_service.py,sha256=UGZ-bxbEzec9z6jf-pKIaLo8BL-V1D2aqJGZM9m37qo,3984
|
|
37
|
+
iop/_cli.py,sha256=FJGPcJKEKKph3XIJgDGUF-QpE_DMt7YSO8G7yYD9UnI,8046
|
|
38
|
+
iop/_common.py,sha256=W39gb-K7oh93YdxOIIud0TT64Z6dSogVT4Rpda7_IvU,13986
|
|
39
|
+
iop/_debugpy.py,sha256=67BC1jxZx4MZfj65trYYnSJ_MVKMTv49n3CqqfgVQdk,4725
|
|
40
|
+
iop/_decorators.py,sha256=LpK0AK4GIzXbPFSIw_x6zzM3FwsHvFjgQUh-MnqtTE8,2322
|
|
41
|
+
iop/_director.py,sha256=dJ4uLs5JxBS1wc0OtL25HuaDi3Jh8M9JC5Ra366ic1g,11489
|
|
42
|
+
iop/_dispatch.py,sha256=hU3XHq4NFSboXMiQI8JAQ4oCxokcH0-eKsoVd9KQNbE,3843
|
|
43
|
+
iop/_inbound_adapter.py,sha256=yG33VfJ2KxSDVxBTQTjFXqdX1fMEic1zxSAOhP5DqTk,1649
|
|
44
|
+
iop/_iris.py,sha256=cw1mIKchXNlUJXSxwMhXYQr8DntJEO1hSPnLyJab10w,204
|
|
45
|
+
iop/_log_manager.py,sha256=SHY2AUBSjh-qZbEHfe0j4c_S8PuU6JFjjmjEX6qnoC4,3407
|
|
46
|
+
iop/_message.py,sha256=4DQk8g884i6drzFHqFDgkX03BjkqFw0Cs7uUI8-I4SQ,1122
|
|
47
|
+
iop/_message_validator.py,sha256=ooDFWp8XvqJWP91RDbkFgpA5V3LbNrQO6IMx2vSjoF8,1516
|
|
48
|
+
iop/_outbound_adapter.py,sha256=cN7dkZyx9ED89yUGePsUYsUhlR3ze3w1JorCG8HvDCw,723
|
|
49
|
+
iop/_private_session_duplex.py,sha256=c6Q0k-qnZi_JcIOdpUx1Edu44zVbUE2Kf2aCHM8Eq80,5202
|
|
50
|
+
iop/_private_session_process.py,sha256=rvZFO6nWVwZtaEWJkSHyLTV-vhzDqQhsVi7INQLLwWI,1685
|
|
51
|
+
iop/_serialization.py,sha256=8N5hNH2vrLW8DhAT1oK7hsFH6rTGoG4jR6qg4QMUBFs,6652
|
|
52
|
+
iop/_utils.py,sha256=xK18eBxHPx6OzMakGzbxI4U0asZe42OVJKLyGEjg4a8,20471
|
|
53
|
+
iop/cls/IOP/BusinessOperation.cls,sha256=E4rnujZi3QFd3uLtZ5YjLiMU_FWoN1gkBe19kxmYO34,932
|
|
54
|
+
iop/cls/IOP/BusinessProcess.cls,sha256=81B2ypqp4N3q2c943-hHw-Z6BIEWZqnDu-ZlHvhln6Q,3126
|
|
55
|
+
iop/cls/IOP/BusinessService.cls,sha256=fplKrbQgA7cQgjKIqDR2IK2iD1iNHmT-QvWrozhE4n4,1189
|
|
56
|
+
iop/cls/IOP/Common.cls,sha256=9ARv7CbQhqrNvSFg2ThW3Pxl884g0A7rU7Aeqk37V5o,13883
|
|
57
57
|
iop/cls/IOP/Director.cls,sha256=M43LoTb6lwSr0J81RFxi1YLW1mwda09wQ7Xqr3nBtxo,2008
|
|
58
|
-
iop/cls/IOP/InboundAdapter.cls,sha256=
|
|
58
|
+
iop/cls/IOP/InboundAdapter.cls,sha256=H-gZfUy8M9YxAZXfp5HVYl3uLo-7Xg9YgojioB_eYMY,619
|
|
59
59
|
iop/cls/IOP/Message.cls,sha256=6_iZzQaY0cA9FjXg0qECYZC6We8soAIrUwRBrlerC4w,25373
|
|
60
|
-
iop/cls/IOP/OutboundAdapter.cls,sha256=
|
|
60
|
+
iop/cls/IOP/OutboundAdapter.cls,sha256=OQoGFHUy2qV_kcsShTlWGOngDrdH5dhwux4eopZyIv4,967
|
|
61
61
|
iop/cls/IOP/PickleMessage.cls,sha256=S3y7AClQ8mAILjxPuHdCjGosBZYzGbUQ5WTv4mYPNMQ,1673
|
|
62
62
|
iop/cls/IOP/Test.cls,sha256=gAC9PEfMZsvAEWIa241-ug2FWAhITbN1SOispZzJPnI,2094
|
|
63
|
-
iop/cls/IOP/Utils.cls,sha256=
|
|
63
|
+
iop/cls/IOP/Utils.cls,sha256=YDONQ6AwrQ3xF0eqmqg_qLCMoahy_5a8jD6_qxveONM,15616
|
|
64
64
|
iop/cls/IOP/Duplex/Operation.cls,sha256=K_fmgeLjPZQbHgNrc0kd6DUQoW0fDn1VHQjJxHo95Zk,525
|
|
65
65
|
iop/cls/IOP/Duplex/Process.cls,sha256=xbefZ4z84a_IUhavWN6P_gZBzqkdJ5XRTXxro6iDvAg,6986
|
|
66
66
|
iop/cls/IOP/Duplex/Service.cls,sha256=sTMOQUCMBgVitmQkM8bbsrmrRtCdj91VlctJ3I7b8WU,161
|
|
@@ -72,9 +72,9 @@ iop/cls/IOP/PrivateSession/Message/Start.cls,sha256=uk-WTe66GicCshgmVy3F5ugHiAyP
|
|
|
72
72
|
iop/cls/IOP/PrivateSession/Message/Stop.cls,sha256=7g3gKFUjNg0WXBLuWnj-VnCs5G6hSE09YTzGEp0zbGc,1390
|
|
73
73
|
iop/cls/IOP/Service/WSGI.cls,sha256=VLNCXEwmHW9dBnE51uGE1nvGX6T4HjhqePT3LVhsjAE,10440
|
|
74
74
|
iop/wsgi/handlers.py,sha256=NrFLo_YbAh-x_PlWhAiWkQnUUN2Ss9HoEm63dDWCBpQ,2947
|
|
75
|
-
iris_pex_embedded_python-3.4.
|
|
76
|
-
iris_pex_embedded_python-3.4.
|
|
77
|
-
iris_pex_embedded_python-3.4.
|
|
78
|
-
iris_pex_embedded_python-3.4.
|
|
79
|
-
iris_pex_embedded_python-3.4.
|
|
80
|
-
iris_pex_embedded_python-3.4.
|
|
75
|
+
iris_pex_embedded_python-3.4.4.dist-info/licenses/LICENSE,sha256=rZSiBFId_sfbJ6RL0GjjPX-InNLkNS9ou7eQsikciI8,1089
|
|
76
|
+
iris_pex_embedded_python-3.4.4.dist-info/METADATA,sha256=sjzrpwsunyxv-HuFIIp_5yp0vS-vb8gyhuwTKb_CjpU,4413
|
|
77
|
+
iris_pex_embedded_python-3.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
78
|
+
iris_pex_embedded_python-3.4.4.dist-info/entry_points.txt,sha256=pj-i4LSDyiSP6xpHlVjMCbg1Pik7dC3_sdGY3Yp9Vhk,38
|
|
79
|
+
iris_pex_embedded_python-3.4.4.dist-info/top_level.txt,sha256=4p0q6hCATmYIVMVi3I8hOUcJE1kwzyBeHygWv_rGvrU,13
|
|
80
|
+
iris_pex_embedded_python-3.4.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|