iris-pex-embedded-python 3.0.1b11__tar.gz → 3.1.1__tar.gz
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.
- {iris_pex_embedded_python-3.0.1b11/src/iris_pex_embedded_python.egg-info → iris_pex_embedded_python-3.1.1}/PKG-INFO +19 -1
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/README.md +19 -1
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/pyproject.toml +1 -1
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_host.py +66 -53
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_director.py +2 -2
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_utils.py +32 -11
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Director.cls +2 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Message.cls +92 -20
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Test.cls +23 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Utils.cls +9 -6
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1/src/iris_pex_embedded_python.egg-info}/PKG-INFO +19 -1
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/LICENSE +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/setup.cfg +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/setup.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/__main__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_business_host.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_cli.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_common.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_director.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_utils.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_BufferReader.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_BufferWriter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_ConnectionInformation.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_ConnectionParameters.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_Constant.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_DBList.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_Device.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_GatewayContext.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_GatewayException.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_GatewayUtility.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRIS.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISConnection.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISEmbedded.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISIterator.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISList.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISOREF.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISObject.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRISReference.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_InStream.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_LegacyIterator.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_ListItem.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_ListReader.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_ListWriter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_LogFileStream.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_MessageHeader.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_OutStream.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_PrintStream.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_PythonGateway.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/__main__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_Column.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_DBAPI.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_Message.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_BusinessService.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_Common.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_Director.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_Message.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/__main__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_operation.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_process.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_service.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_cli.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_common.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_inbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_message.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_outbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_pickle_message.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_private_session_duplex.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_private_session_process.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Common.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/__init__.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/__init__.pyi +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/_cli.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/iris_ipm.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/iris_ipm.pyi +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris/iris_utils.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/irisnative/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/irisnative/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.1
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -115,6 +115,7 @@ This proof of concept aims to show how the **iris interoperability framework** c
|
|
|
115
115
|
- [7.11. version](#711-version)
|
|
116
116
|
- [7.12. log](#712-log)
|
|
117
117
|
- [8. Credits](#8-credits)
|
|
118
|
+
- [9. Benchmarks](#9-benchmarks)
|
|
118
119
|
|
|
119
120
|
## 1.2. Example
|
|
120
121
|
|
|
@@ -1383,3 +1384,20 @@ output :
|
|
|
1383
1384
|
Most of the code came from PEX for Python by Mo Cheng and Summer Gerry.
|
|
1384
1385
|
|
|
1385
1386
|
Works only on IRIS 2021.2 +
|
|
1387
|
+
|
|
1388
|
+
# 9. Benchmarks
|
|
1389
|
+
|
|
1390
|
+
8 senarios with thoses parameters :
|
|
1391
|
+
- 100 messages
|
|
1392
|
+
- body : simple string `test`
|
|
1393
|
+
|
|
1394
|
+
| Scenario | Time (s) |
|
|
1395
|
+
| --- | --- |
|
|
1396
|
+
| Python BP to Python BO with Iris Message | 0.739 |
|
|
1397
|
+
| Python BP to Python BO with Python Message | 0.732 |
|
|
1398
|
+
| ObjetScript BP to Python BO with Iris Message | 0.594 |
|
|
1399
|
+
| ObjetScript BP to Python BO with Python Message | 0.642 |
|
|
1400
|
+
| Python BP to ObjetScript BO with Iris Message | 0.642 |
|
|
1401
|
+
| Python BP to ObjetScript BO with Python Message | 0.675 |
|
|
1402
|
+
| ObjetScript BP to ObjetScript BO with Iris Message | 0.159 |
|
|
1403
|
+
| ObjetScript BP to ObjetScript BO with Python Message | 0.182 |
|
|
@@ -66,6 +66,7 @@ This proof of concept aims to show how the **iris interoperability framework** c
|
|
|
66
66
|
- [7.11. version](#711-version)
|
|
67
67
|
- [7.12. log](#712-log)
|
|
68
68
|
- [8. Credits](#8-credits)
|
|
69
|
+
- [9. Benchmarks](#9-benchmarks)
|
|
69
70
|
|
|
70
71
|
## 1.2. Example
|
|
71
72
|
|
|
@@ -1333,4 +1334,21 @@ output :
|
|
|
1333
1334
|
|
|
1334
1335
|
Most of the code came from PEX for Python by Mo Cheng and Summer Gerry.
|
|
1335
1336
|
|
|
1336
|
-
Works only on IRIS 2021.2 +
|
|
1337
|
+
Works only on IRIS 2021.2 +
|
|
1338
|
+
|
|
1339
|
+
# 9. Benchmarks
|
|
1340
|
+
|
|
1341
|
+
8 senarios with thoses parameters :
|
|
1342
|
+
- 100 messages
|
|
1343
|
+
- body : simple string `test`
|
|
1344
|
+
|
|
1345
|
+
| Scenario | Time (s) |
|
|
1346
|
+
| --- | --- |
|
|
1347
|
+
| Python BP to Python BO with Iris Message | 0.739 |
|
|
1348
|
+
| Python BP to Python BO with Python Message | 0.732 |
|
|
1349
|
+
| ObjetScript BP to Python BO with Iris Message | 0.594 |
|
|
1350
|
+
| ObjetScript BP to Python BO with Python Message | 0.642 |
|
|
1351
|
+
| Python BP to ObjetScript BO with Iris Message | 0.642 |
|
|
1352
|
+
| Python BP to ObjetScript BO with Python Message | 0.675 |
|
|
1353
|
+
| ObjetScript BP to ObjetScript BO with Iris Message | 0.159 |
|
|
1354
|
+
| ObjetScript BP to ObjetScript BO with Python Message | 0.182 |
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_host.py
RENAMED
|
@@ -34,15 +34,14 @@ class _BusinessHost(_Common):
|
|
|
34
34
|
:param fonction: the function that will be decorated
|
|
35
35
|
:return: The function dispatch_serializer is being returned.
|
|
36
36
|
"""
|
|
37
|
-
def dispatch_serializer(self
|
|
38
|
-
# Handle positional arguments
|
|
39
|
-
serialized=[]
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return fonction(self,*serialized, **param2)
|
|
37
|
+
def dispatch_serializer(self, *params, **param2):
|
|
38
|
+
# Handle positional arguments using list comprehension
|
|
39
|
+
serialized = [self._dispatch_serializer(param) for param in params]
|
|
40
|
+
|
|
41
|
+
# Handle keyword arguments using dictionary comprehension
|
|
42
|
+
param2 = {key: self._dispatch_serializer(value) for key, value in param2.items()}
|
|
43
|
+
|
|
44
|
+
return fonction(self, *serialized, **param2)
|
|
46
45
|
return dispatch_serializer
|
|
47
46
|
|
|
48
47
|
def input_serialzer_param(position:int,name:str):
|
|
@@ -55,19 +54,20 @@ class _BusinessHost(_Common):
|
|
|
55
54
|
"""
|
|
56
55
|
def input_serialzer_param(fonction):
|
|
57
56
|
@wraps(fonction)
|
|
58
|
-
def dispatch_serializer(self
|
|
59
|
-
# Handle positional arguments
|
|
60
|
-
serialized=[
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
def dispatch_serializer(self, *params, **param2):
|
|
58
|
+
# Handle positional arguments using list comprehension
|
|
59
|
+
serialized = [
|
|
60
|
+
self._dispatch_serializer(param) if i == position else param
|
|
61
|
+
for i, param in enumerate(params)
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
# Handle keyword arguments using dictionary comprehension
|
|
65
|
+
param2 = {
|
|
66
|
+
key: self._dispatch_serializer(value) if key == name else value
|
|
67
|
+
for key, value in param2.items()
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return fonction(self, *serialized, **param2)
|
|
71
71
|
return dispatch_serializer
|
|
72
72
|
return input_serialzer_param
|
|
73
73
|
|
|
@@ -93,15 +93,14 @@ class _BusinessHost(_Common):
|
|
|
93
93
|
:param fonction: the function that will be decorated
|
|
94
94
|
:return: The function dispatch_deserializer is being returned.
|
|
95
95
|
"""
|
|
96
|
-
def dispatch_deserializer(self
|
|
97
|
-
# Handle positional arguments
|
|
98
|
-
serialized=[]
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return fonction(self,*serialized, **param2)
|
|
96
|
+
def dispatch_deserializer(self, *params, **param2):
|
|
97
|
+
# Handle positional arguments using list comprehension
|
|
98
|
+
serialized = [self._dispatch_deserializer(param) for param in params]
|
|
99
|
+
|
|
100
|
+
# Handle keyword arguments using dictionary comprehension
|
|
101
|
+
param2 = {key: self._dispatch_deserializer(value) for key, value in param2.items()}
|
|
102
|
+
|
|
103
|
+
return fonction(self, *serialized, **param2)
|
|
105
104
|
return dispatch_deserializer
|
|
106
105
|
|
|
107
106
|
def output_serialzer(fonction):
|
|
@@ -236,18 +235,20 @@ class _BusinessHost(_Common):
|
|
|
236
235
|
:param message: The message to be serialized
|
|
237
236
|
:return: The serialized message
|
|
238
237
|
"""
|
|
239
|
-
if
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
238
|
+
if message is not None:
|
|
239
|
+
if self._is_message_instance(message):
|
|
240
|
+
return self._serialize_message(message)
|
|
241
|
+
elif self._is_pickle_message_instance(message):
|
|
242
|
+
return self._serialize_pickle_message(message)
|
|
243
|
+
elif self._is_iris_object_instance(message):
|
|
244
|
+
return message
|
|
245
|
+
|
|
246
|
+
if message == "" or message is None:
|
|
246
247
|
return message
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
|
|
249
|
+
# todo : decorator takes care of all the parameters, so this should never happen
|
|
250
|
+
# return message
|
|
251
|
+
raise TypeError("The message must be an instance of a class that is a subclass of Message or IRISObject %Persistent class.")
|
|
251
252
|
|
|
252
253
|
def _serialize_message(self,message):
|
|
253
254
|
""" Converts a python dataclass message into an iris iop.message.
|
|
@@ -265,8 +266,10 @@ class _BusinessHost(_Common):
|
|
|
265
266
|
msg = iris.cls('IOP.Message')._New()
|
|
266
267
|
msg.classname = module + "." + classname
|
|
267
268
|
|
|
268
|
-
|
|
269
|
-
|
|
269
|
+
if hasattr(msg, 'buffer') and len(json_string) > msg.buffer:
|
|
270
|
+
msg.json = _Utils.string_to_stream(json_string,msg.buffer)
|
|
271
|
+
else:
|
|
272
|
+
msg.json = json_string
|
|
270
273
|
|
|
271
274
|
return msg
|
|
272
275
|
|
|
@@ -289,16 +292,22 @@ class _BusinessHost(_Common):
|
|
|
289
292
|
:return: The return value is a tuple of the form (serial, serial_type)
|
|
290
293
|
"""
|
|
291
294
|
if (
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
295
|
+
serial is not None
|
|
296
|
+
and type(serial).__module__.startswith('iris')
|
|
297
|
+
and (
|
|
298
|
+
serial._IsA("IOP.Message")
|
|
299
|
+
or serial._IsA("Grongier.PEX.Message")
|
|
300
|
+
)
|
|
301
|
+
):
|
|
296
302
|
return self._deserialize_message(serial)
|
|
297
303
|
elif (
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
304
|
+
serial is not None
|
|
305
|
+
and type(serial).__module__.startswith('iris')
|
|
306
|
+
and (
|
|
307
|
+
serial._IsA("IOP.PickleMessage")
|
|
308
|
+
or serial._IsA("Grongier.PEX.PickleMessage")
|
|
309
|
+
)
|
|
310
|
+
):
|
|
302
311
|
return self._deserialize_pickle_message(serial)
|
|
303
312
|
else:
|
|
304
313
|
return serial
|
|
@@ -321,7 +330,11 @@ class _BusinessHost(_Common):
|
|
|
321
330
|
except Exception:
|
|
322
331
|
raise ImportError("Class not found: " + classname)
|
|
323
332
|
|
|
324
|
-
string =
|
|
333
|
+
string = ""
|
|
334
|
+
if (serial.type == 'Stream'):
|
|
335
|
+
string = _Utils.stream_to_string(serial.json)
|
|
336
|
+
else:
|
|
337
|
+
string = serial.json
|
|
325
338
|
|
|
326
339
|
jdict = json.loads(string, cls=IrisJSONDecoder)
|
|
327
340
|
msg = self._dataclass_from_dict(msg,jdict)
|
|
@@ -258,9 +258,9 @@ class _Director():
|
|
|
258
258
|
message = iris.cls("IOP.Message")._New()
|
|
259
259
|
message.classname = classname
|
|
260
260
|
if body:
|
|
261
|
-
message.
|
|
261
|
+
message.json = body
|
|
262
262
|
else:
|
|
263
|
-
message.
|
|
263
|
+
message.json = _Utils.string_to_stream("{}")
|
|
264
264
|
# serialize the message
|
|
265
265
|
business_host = _BusinessHost()
|
|
266
266
|
serial_message = business_host._dispatch_serializer(message)
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import sys
|
|
2
3
|
import ast
|
|
3
4
|
import iris
|
|
4
5
|
import inspect
|
|
5
6
|
import xmltodict
|
|
6
7
|
import pkg_resources
|
|
8
|
+
import importlib
|
|
7
9
|
|
|
8
10
|
class _Utils():
|
|
9
11
|
@staticmethod
|
|
@@ -174,7 +176,7 @@ class _Utils():
|
|
|
174
176
|
return module
|
|
175
177
|
|
|
176
178
|
@staticmethod
|
|
177
|
-
def migrate(filename=None
|
|
179
|
+
def migrate(filename=None):
|
|
178
180
|
"""
|
|
179
181
|
Read the settings.py file and register all the components
|
|
180
182
|
settings.py file has two dictionaries:
|
|
@@ -186,18 +188,21 @@ class _Utils():
|
|
|
186
188
|
* key: the name of the production
|
|
187
189
|
* value: a dictionary containing the settings for the production
|
|
188
190
|
"""
|
|
191
|
+
path = None
|
|
189
192
|
# try to load the settings file
|
|
190
193
|
if filename:
|
|
191
|
-
import sys
|
|
192
|
-
path = None
|
|
193
194
|
# check if the filename is absolute or relative
|
|
194
195
|
if os.path.isabs(filename):
|
|
195
196
|
path = os.path.dirname(filename)
|
|
196
197
|
else:
|
|
197
198
|
raise ValueError("The filename must be absolute")
|
|
198
|
-
# add the path to the system path
|
|
199
|
-
sys.path.
|
|
200
|
-
|
|
199
|
+
# add the path to the system path to the beginning
|
|
200
|
+
sys.path.insert(0,os.path.normpath(path))
|
|
201
|
+
# import settings from the specified file
|
|
202
|
+
settings = _Utils.import_module_from_path('settings',filename)
|
|
203
|
+
else:
|
|
204
|
+
# import settings from the settings module
|
|
205
|
+
import settings
|
|
201
206
|
# get the path of the settings file
|
|
202
207
|
path = os.path.dirname(inspect.getfile(settings))
|
|
203
208
|
try:
|
|
@@ -210,8 +215,24 @@ class _Utils():
|
|
|
210
215
|
_Utils.set_productions_settings(settings.PRODUCTIONS,path)
|
|
211
216
|
except AttributeError:
|
|
212
217
|
print("No productions to register")
|
|
218
|
+
try:
|
|
219
|
+
sys.path.remove(path)
|
|
220
|
+
except ValueError:
|
|
221
|
+
pass
|
|
213
222
|
|
|
214
|
-
|
|
223
|
+
@staticmethod
|
|
224
|
+
def import_module_from_path(module_name, file_path):
|
|
225
|
+
if not os.path.isabs(file_path):
|
|
226
|
+
raise ValueError("The file path must be absolute")
|
|
227
|
+
|
|
228
|
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
|
229
|
+
if spec is None:
|
|
230
|
+
raise ImportError(f"Cannot find module named {module_name} at {file_path}")
|
|
231
|
+
|
|
232
|
+
module = importlib.util.module_from_spec(spec)
|
|
233
|
+
sys.modules[module_name] = module
|
|
234
|
+
spec.loader.exec_module(module)
|
|
235
|
+
return module
|
|
215
236
|
|
|
216
237
|
@staticmethod
|
|
217
238
|
def set_classes_settings(class_items,root_path=None):
|
|
@@ -360,17 +381,17 @@ class _Utils():
|
|
|
360
381
|
return data
|
|
361
382
|
|
|
362
383
|
@staticmethod
|
|
363
|
-
def stream_to_string(stream)-> str:
|
|
384
|
+
def stream_to_string(stream,buffer=1000000)-> str:
|
|
364
385
|
string = ""
|
|
365
386
|
stream.Rewind()
|
|
366
387
|
while not stream.AtEnd:
|
|
367
|
-
string += stream.Read(
|
|
388
|
+
string += stream.Read(buffer)
|
|
368
389
|
return string
|
|
369
390
|
|
|
370
391
|
@staticmethod
|
|
371
|
-
def string_to_stream(string:str):
|
|
392
|
+
def string_to_stream(string:str,buffer=1000000):
|
|
372
393
|
stream = iris.cls('%Stream.GlobalCharacter')._New()
|
|
373
|
-
n =
|
|
394
|
+
n = buffer
|
|
374
395
|
chunks = [string[i:i+n] for i in range(0, len(string), n)]
|
|
375
396
|
for chunk in chunks:
|
|
376
397
|
stream.Write(chunk)
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Director.cls
RENAMED
|
@@ -9,6 +9,8 @@ Class IOP.Director [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
|
9
9
|
|
|
10
10
|
ClassMethod dispatchCreateBusinessService(pTargetDispatchName As %String) As Ens.BusinessService
|
|
11
11
|
{
|
|
12
|
+
// Hack to prevent job to be registered in the production
|
|
13
|
+
do ##class(Ens.Job).UnRegister(pTargetDispatchName,$JOB)
|
|
12
14
|
set tSC = ##class(Ens.Director).CreateBusinessService(pTargetDispatchName,.service)
|
|
13
15
|
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
14
16
|
quit service
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Message.cls
RENAMED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
Class IOP.Message Extends (Ens.MessageBody, %CSP.Page, %XML.Adaptor)
|
|
6
6
|
{
|
|
7
7
|
|
|
8
|
-
Parameter BUFFER =
|
|
8
|
+
Parameter BUFFER = 1000000;
|
|
9
|
+
|
|
10
|
+
Property buffer As %String(MAXLEN = "") [ Calculated, Transient ];
|
|
9
11
|
|
|
10
12
|
Property classname As %String(MAXLEN = "");
|
|
11
13
|
|
|
@@ -13,48 +15,109 @@ Property jsonObject As %DynamicObject(XMLPROJECTION = "None");
|
|
|
13
15
|
|
|
14
16
|
Property json As %String(MAXLEN = "");
|
|
15
17
|
|
|
18
|
+
Property jsonStream As %Stream.GlobalCharacter [ Internal, Private ];
|
|
19
|
+
|
|
20
|
+
Property jsonString As %String(MAXLEN = 1000000) [ Internal, Private ];
|
|
21
|
+
|
|
16
22
|
Property jstr As %Stream.GlobalCharacter [ Internal, Private ];
|
|
17
23
|
|
|
24
|
+
// for retrocompatibility
|
|
25
|
+
|
|
26
|
+
Property type As %String(MAXLEN = 6) [ ReadOnly ];
|
|
27
|
+
|
|
28
|
+
Method bufferGet()
|
|
29
|
+
{
|
|
30
|
+
Quit ..#BUFFER
|
|
31
|
+
}
|
|
32
|
+
|
|
18
33
|
Method %OnNew(classname) As %Status [ Private, ServerOnly = 1 ]
|
|
19
34
|
{
|
|
20
35
|
set ..classname = $g(classname)
|
|
21
36
|
Quit $$$OK
|
|
22
37
|
}
|
|
23
38
|
|
|
24
|
-
Method
|
|
39
|
+
Method jstrGet()
|
|
25
40
|
{
|
|
26
|
-
|
|
41
|
+
set rsp = $$$NULLOREF
|
|
42
|
+
// Get as stream no matter what
|
|
43
|
+
if ..type="String" {
|
|
44
|
+
Set rsp = ##class(%Stream.GlobalCharacter).%New()
|
|
45
|
+
Set sc = rsp.Write(..jsonString)
|
|
46
|
+
}
|
|
47
|
+
elseif ..type="Stream" {
|
|
48
|
+
set rsp = ..jsonStream
|
|
49
|
+
}
|
|
50
|
+
Quit rsp
|
|
27
51
|
}
|
|
28
52
|
|
|
29
|
-
Method
|
|
53
|
+
Method jstrSet(pInput) As %Status
|
|
30
54
|
{
|
|
31
|
-
|
|
32
|
-
set
|
|
33
|
-
|
|
34
|
-
|
|
55
|
+
// Set as stream no matter what
|
|
56
|
+
set sc = ..jsonSet(pInput)
|
|
57
|
+
if $$$ISERR(sc) { Quit sc }
|
|
58
|
+
if ..type="String" {
|
|
59
|
+
set stream = ##class(%Stream.GlobalCharacter).%New()
|
|
60
|
+
Set sc = stream.Write(..jsonString)
|
|
61
|
+
set r%jsonStream = stream
|
|
62
|
+
set i%type = "Stream"
|
|
63
|
+
}
|
|
64
|
+
Quit sc
|
|
35
65
|
}
|
|
36
66
|
|
|
37
|
-
Method
|
|
67
|
+
Method jsonGet()
|
|
38
68
|
{
|
|
39
|
-
|
|
69
|
+
Quit $Case(..type
|
|
70
|
+
, "String":..jsonString
|
|
71
|
+
, "Stream":..jsonStream
|
|
72
|
+
, :$$$NULLOREF)
|
|
40
73
|
}
|
|
41
74
|
|
|
42
|
-
Method %
|
|
43
|
-
property As %String,
|
|
44
|
-
value)
|
|
75
|
+
Method jsonSet(pInput) As %Status
|
|
45
76
|
{
|
|
46
|
-
|
|
47
|
-
|
|
77
|
+
Set tOldStream=$Case(..type
|
|
78
|
+
, "String":..jsonString
|
|
79
|
+
, "Stream":..jsonStream
|
|
80
|
+
, :$$$NULLOREF)
|
|
81
|
+
Quit:tOldStream=pInput $$$OK
|
|
82
|
+
Do:..type'="" Clear() Set i%type=""
|
|
83
|
+
|
|
84
|
+
If $ISOBJECT(pInput) {
|
|
85
|
+
if pInput.%Extends("%Stream.GlobalCharacter") {
|
|
86
|
+
Set ..jsonStream=pInput, i%type="Stream"
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
Throw ##class(%Exception.General).%New("Invalid input type, must be a %Stream.GlobalCharacter or a %String")
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
Else {
|
|
93
|
+
if $LENGTH(pInput)>..#BUFFER {
|
|
94
|
+
// write in a stream
|
|
95
|
+
Set stream = ##class(%Stream.GlobalCharacter).%New()
|
|
96
|
+
for i=1:..#BUFFER:$LENGTH(pInput) {
|
|
97
|
+
Set sc = stream.Write($EXTRACT(pInput,i,(i+..#BUFFER)))
|
|
98
|
+
Quit:$$$ISERR(sc)
|
|
99
|
+
}
|
|
100
|
+
Set ..jsonStream=stream, i%type="Stream"
|
|
101
|
+
}
|
|
102
|
+
Set i%jsonString=pInput, i%type="String"
|
|
103
|
+
}
|
|
104
|
+
Quit $$$OK
|
|
105
|
+
Clear()
|
|
106
|
+
If ..type="String" { Set r%jsonString="" }
|
|
107
|
+
ElseIf ..type="Stream" { Set r%jsonStream=$$$NULLOREF }
|
|
108
|
+
Quit
|
|
48
109
|
}
|
|
49
110
|
|
|
50
111
|
Method GetObjectJson(ByRef atEnd)
|
|
51
112
|
{
|
|
52
113
|
set atEnd = 1
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
114
|
+
if ..type = "String" {
|
|
115
|
+
set json = ..jsonString
|
|
116
|
+
}
|
|
117
|
+
elseif ..type = "Stream" {
|
|
118
|
+
do ..jsonStream.Rewind()
|
|
119
|
+
set json = ..jsonStream.Read(..#BUFFER)
|
|
120
|
+
set atEnd = ..jsonStream.AtEnd
|
|
58
121
|
}
|
|
59
122
|
QUIT json
|
|
60
123
|
}
|
|
@@ -115,6 +178,15 @@ Storage Default
|
|
|
115
178
|
<Value name="3">
|
|
116
179
|
<Value>jstr</Value>
|
|
117
180
|
</Value>
|
|
181
|
+
<Value name="4">
|
|
182
|
+
<Value>jsonStream</Value>
|
|
183
|
+
</Value>
|
|
184
|
+
<Value name="5">
|
|
185
|
+
<Value>type</Value>
|
|
186
|
+
</Value>
|
|
187
|
+
<Value name="6">
|
|
188
|
+
<Value>jsonString</Value>
|
|
189
|
+
</Value>
|
|
118
190
|
</Data>
|
|
119
191
|
<Data name="jsonObject">
|
|
120
192
|
<Attribute>jsonObject</Attribute>
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Test.cls
RENAMED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
Class IOP.Test Extends %Persistent
|
|
3
3
|
{
|
|
4
4
|
|
|
5
|
+
/// Description
|
|
6
|
+
ClassMethod TestJsonStringMessage() As %Status
|
|
7
|
+
{
|
|
8
|
+
set msg = ##class(IOP.Message).%New()
|
|
9
|
+
set msg.classname = "IOP.Message"
|
|
10
|
+
set msg.json = "{""name"":""John""}"
|
|
11
|
+
set tset = msg.json
|
|
12
|
+
set tst = msg.jstr
|
|
13
|
+
QUIT $$$OK
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
ClassMethod TestJsonStreamMessage() As %Status
|
|
17
|
+
{
|
|
18
|
+
set msg = ##class(IOP.Message).%New()
|
|
19
|
+
set msg.classname = "IOP.Message"
|
|
20
|
+
set stream = ##class(%Stream.GlobalCharacter).%New()
|
|
21
|
+
set sc = stream.Write("{""name"":""John""}")
|
|
22
|
+
set msg.json = stream
|
|
23
|
+
set tset = msg.json
|
|
24
|
+
set tst = msg.jstr
|
|
25
|
+
QUIT $$$OK
|
|
26
|
+
}
|
|
27
|
+
|
|
5
28
|
/// Register
|
|
6
29
|
ClassMethod Register() As %Status
|
|
7
30
|
{
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Utils.cls
RENAMED
|
@@ -104,12 +104,10 @@ ClassMethod GetRemoteClassInfo(
|
|
|
104
104
|
pModule As %String,
|
|
105
105
|
pClasspaths As %String,
|
|
106
106
|
ByRef pClassDetails,
|
|
107
|
-
ByRef pRemoteSettings) As %Status [ Internal
|
|
107
|
+
ByRef pRemoteSettings) As %Status [ Internal ]
|
|
108
108
|
{
|
|
109
109
|
#dim tSC As %Status = $$$OK
|
|
110
110
|
#dim ex As %Exception.AbstractException
|
|
111
|
-
#dim tGateway As %External.Gateway
|
|
112
|
-
#dim tGatewayProxy As %Net.Remote.Object
|
|
113
111
|
|
|
114
112
|
Try {
|
|
115
113
|
if pClasspaths '="" {
|
|
@@ -120,14 +118,19 @@ ClassMethod GetRemoteClassInfo(
|
|
|
120
118
|
set onePath = $p(extraClasspaths,"|",i)
|
|
121
119
|
set onePath = ##class(%File).NormalizeDirectory(onePath)
|
|
122
120
|
if onePath?1"$$IRISHOME"1P.E set onePath = $e($system.Util.InstallDirectory(),1,*-1)_$e(onePath,11,*)
|
|
123
|
-
if onePath'="" do
|
|
121
|
+
if onePath'="" do ##class(IOP.Common).SetPythonPath(onePath)
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
|
-
;
|
|
127
124
|
|
|
128
125
|
set importlib = ##class(%SYS.Python).Import("importlib")
|
|
129
126
|
set builtins = ##class(%SYS.Python).Import("builtins")
|
|
130
|
-
set
|
|
127
|
+
set sys = ##class(%SYS.Python).Import("sys")
|
|
128
|
+
// Load the module form a specific path
|
|
129
|
+
set spec = importlib.util."spec_from_file_location"(pModule, onePath_pModule_".py")
|
|
130
|
+
set module = importlib.util."module_from_spec"(spec)
|
|
131
|
+
do sys.modules."__setitem__"(pModule, module)
|
|
132
|
+
do spec.loader."exec_module"(module)
|
|
133
|
+
// Get the class
|
|
131
134
|
set class = builtins.getattr(module, pRemoteClassname)
|
|
132
135
|
set tClass = class."__new__"(class)
|
|
133
136
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.1
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -115,6 +115,7 @@ This proof of concept aims to show how the **iris interoperability framework** c
|
|
|
115
115
|
- [7.11. version](#711-version)
|
|
116
116
|
- [7.12. log](#712-log)
|
|
117
117
|
- [8. Credits](#8-credits)
|
|
118
|
+
- [9. Benchmarks](#9-benchmarks)
|
|
118
119
|
|
|
119
120
|
## 1.2. Example
|
|
120
121
|
|
|
@@ -1383,3 +1384,20 @@ output :
|
|
|
1383
1384
|
Most of the code came from PEX for Python by Mo Cheng and Summer Gerry.
|
|
1384
1385
|
|
|
1385
1386
|
Works only on IRIS 2021.2 +
|
|
1387
|
+
|
|
1388
|
+
# 9. Benchmarks
|
|
1389
|
+
|
|
1390
|
+
8 senarios with thoses parameters :
|
|
1391
|
+
- 100 messages
|
|
1392
|
+
- body : simple string `test`
|
|
1393
|
+
|
|
1394
|
+
| Scenario | Time (s) |
|
|
1395
|
+
| --- | --- |
|
|
1396
|
+
| Python BP to Python BO with Iris Message | 0.739 |
|
|
1397
|
+
| Python BP to Python BO with Python Message | 0.732 |
|
|
1398
|
+
| ObjetScript BP to Python BO with Iris Message | 0.594 |
|
|
1399
|
+
| ObjetScript BP to Python BO with Python Message | 0.642 |
|
|
1400
|
+
| Python BP to ObjetScript BO with Iris Message | 0.642 |
|
|
1401
|
+
| Python BP to ObjetScript BO with Python Message | 0.675 |
|
|
1402
|
+
| ObjetScript BP to ObjetScript BO with Iris Message | 0.159 |
|
|
1403
|
+
| ObjetScript BP to ObjetScript BO with Python Message | 0.182 |
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/__init__.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_cli.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_common.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_director.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/grongier/pex/_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/intersystems_iris/_IRIS.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_operation.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_process.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_business_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_inbound_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_outbound_adapter.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/_pickle_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/cls/IOP/Common.cls
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/iop/wsgi/handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/irisnative/_IRISNative.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.0.1b11 → iris_pex_embedded_python-3.1.1}/src/irisnative/__init__.py
RENAMED
|
File without changes
|