iris-pex-embedded-python 3.4.0b4__tar.gz → 3.4.0b6__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.4.0b4 → iris_pex_embedded_python-3.4.0b6}/PKG-INFO +1 -3
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/pyproject.toml +1 -3
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_common.py +11 -3
- iris_pex_embedded_python-3.4.0b6/src/iop/_serialization.py +159 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_utils.py +3 -2
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/PKG-INFO +1 -3
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -2
- iris_pex_embedded_python-3.4.0b4/src/iop/_serialization.py +0 -234
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/LICENSE +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/README.md +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/setup.cfg +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/setup.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/__main__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_business_host.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_cli.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_common.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_director.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_utils.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_BufferReader.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_BufferWriter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_ConnectionInformation.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_ConnectionParameters.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_Constant.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_DBList.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_Device.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_GatewayContext.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_GatewayException.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_GatewayUtility.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRIS.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISConnection.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISEmbedded.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISIterator.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISList.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISOREF.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISObject.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_IRISReference.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_InStream.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_LegacyIterator.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_ListItem.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_ListReader.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_ListWriter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_LogFileStream.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_MessageHeader.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_OutStream.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_PrintStream.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_PythonGateway.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/__main__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_Column.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_DBAPI.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_Message.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_BusinessService.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_Common.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_Director.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_Message.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/intersystems_iris/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/__init__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/__main__.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_async_request.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_host.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_operation.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_process.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_service.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_cli.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_decorators.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_director.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_dispatch.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_inbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_log_manager.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_message.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_message_validator.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_outbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_private_session_duplex.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_private_session_process.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Common.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Director.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Message.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Test.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Utils.cls +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/irisnative/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/irisnative/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.0b6
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -44,12 +44,10 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
44
44
|
Classifier: Topic :: Utilities
|
|
45
45
|
Description-Content-Type: text/markdown
|
|
46
46
|
License-File: LICENSE
|
|
47
|
-
Requires-Dist: dacite>=1.6.0
|
|
48
47
|
Requires-Dist: pydantic>=2.0.0
|
|
49
48
|
Requires-Dist: xmltodict>=0.12.0
|
|
50
49
|
Requires-Dist: iris-embedded-python-wrapper>=0.0.6
|
|
51
50
|
Requires-Dist: setuptools>=40.8.0
|
|
52
|
-
Requires-Dist: dc-schema>=0.0.8
|
|
53
51
|
Requires-Dist: jsonpath-ng>=1.7.0
|
|
54
52
|
|
|
55
53
|
# IoP (Interoperability On Python)
|
|
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"]
|
|
|
3
3
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "iris_pex_embedded_python"
|
|
6
|
-
version = "3.4.
|
|
6
|
+
version = "3.4.0b6"
|
|
7
7
|
description = "Iris Interoperability based on Embedded Python"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
authors = [
|
|
@@ -27,12 +27,10 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
dependencies = [
|
|
30
|
-
"dacite >=1.6.0",
|
|
31
30
|
"pydantic>=2.0.0",
|
|
32
31
|
"xmltodict>=0.12.0",
|
|
33
32
|
"iris-embedded-python-wrapper>=0.0.6",
|
|
34
33
|
"setuptools>=40.8.0",
|
|
35
|
-
"dc-schema>=0.0.8",
|
|
36
34
|
"jsonpath-ng>=1.7.0"
|
|
37
35
|
]
|
|
38
36
|
|
|
@@ -18,6 +18,17 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
18
18
|
ICON_URL: ClassVar[str]
|
|
19
19
|
iris_handle: Any = None
|
|
20
20
|
_log_to_console: bool = False
|
|
21
|
+
_logger: logging.Logger = None
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def logger(self) -> logging.Logger:
|
|
25
|
+
if self._logger is None:
|
|
26
|
+
self._logger = LogManager.get_logger(self.__class__.__name__,self.log_to_console)
|
|
27
|
+
return self._logger
|
|
28
|
+
|
|
29
|
+
@logger.setter
|
|
30
|
+
def logger(self, value: logging.Logger) -> None:
|
|
31
|
+
self._logger = value
|
|
21
32
|
|
|
22
33
|
@property
|
|
23
34
|
def log_to_console(self) -> bool:
|
|
@@ -28,9 +39,6 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
28
39
|
self._log_to_console = value
|
|
29
40
|
self.logger = LogManager.get_logger(self.__class__.__name__,value)
|
|
30
41
|
|
|
31
|
-
def __init__(self):
|
|
32
|
-
self.logger = LogManager.get_logger(self.__class__.__name__)
|
|
33
|
-
|
|
34
42
|
# Lifecycle methods
|
|
35
43
|
def on_init(self) -> None:
|
|
36
44
|
"""Initialize component when started."""
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import codecs
|
|
3
|
+
import importlib
|
|
4
|
+
import inspect
|
|
5
|
+
import pickle
|
|
6
|
+
import json
|
|
7
|
+
from dataclasses import asdict, is_dataclass
|
|
8
|
+
from typing import Any, Dict, Type
|
|
9
|
+
|
|
10
|
+
import iris
|
|
11
|
+
from pydantic import BaseModel, TypeAdapter
|
|
12
|
+
|
|
13
|
+
from iop._message import _PydanticPickleMessage
|
|
14
|
+
from iop._utils import _Utils
|
|
15
|
+
|
|
16
|
+
class SerializationError(Exception):
|
|
17
|
+
"""Exception raised for serialization errors."""
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
class TempPydanticModel(BaseModel):
|
|
21
|
+
model_config = {
|
|
22
|
+
'arbitrary_types_allowed' : True,
|
|
23
|
+
'extra' : 'allow'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
class MessageSerializer:
|
|
27
|
+
"""Handles message serialization and deserialization."""
|
|
28
|
+
|
|
29
|
+
@staticmethod
|
|
30
|
+
def _convert_to_json_safe(obj: Any) -> Any:
|
|
31
|
+
"""Convert objects to JSON-safe format."""
|
|
32
|
+
if isinstance(obj, BaseModel):
|
|
33
|
+
return obj.model_dump_json()
|
|
34
|
+
elif is_dataclass(obj):
|
|
35
|
+
return TempPydanticModel.model_validate(dataclass_to_dict(obj)).model_dump_json()
|
|
36
|
+
else:
|
|
37
|
+
raise SerializationError(f"Object {obj} must be a Pydantic model or dataclass")
|
|
38
|
+
|
|
39
|
+
@staticmethod
|
|
40
|
+
def serialize(message: Any, use_pickle: bool = False) -> iris.cls:
|
|
41
|
+
"""Serializes a message to IRIS format."""
|
|
42
|
+
if isinstance(message, _PydanticPickleMessage) or use_pickle:
|
|
43
|
+
return MessageSerializer._serialize_pickle(message)
|
|
44
|
+
return MessageSerializer._serialize_json(message)
|
|
45
|
+
|
|
46
|
+
@staticmethod
|
|
47
|
+
def _serialize_json(message: Any) -> iris.cls:
|
|
48
|
+
json_string = MessageSerializer._convert_to_json_safe(message)
|
|
49
|
+
|
|
50
|
+
msg = iris.cls('IOP.Message')._New()
|
|
51
|
+
msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
|
|
52
|
+
|
|
53
|
+
if hasattr(msg, 'buffer') and len(json_string) > msg.buffer:
|
|
54
|
+
msg.json = _Utils.string_to_stream(json_string, msg.buffer)
|
|
55
|
+
else:
|
|
56
|
+
msg.json = json_string
|
|
57
|
+
return msg
|
|
58
|
+
|
|
59
|
+
@staticmethod
|
|
60
|
+
def deserialize(serial: iris.cls, use_pickle: bool = False) -> Any:
|
|
61
|
+
if use_pickle:
|
|
62
|
+
return MessageSerializer._deserialize_pickle(serial)
|
|
63
|
+
return MessageSerializer._deserialize_json(serial)
|
|
64
|
+
|
|
65
|
+
@staticmethod
|
|
66
|
+
def _deserialize_json(serial: iris.cls) -> Any:
|
|
67
|
+
if not serial.classname:
|
|
68
|
+
raise SerializationError("JSON message malformed, must include classname")
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
module_name, class_name = MessageSerializer._parse_classname(serial.classname)
|
|
72
|
+
module = importlib.import_module(module_name)
|
|
73
|
+
msg_class = getattr(module, class_name)
|
|
74
|
+
except Exception as e:
|
|
75
|
+
raise SerializationError(f"Failed to load class {serial.classname}: {str(e)}")
|
|
76
|
+
|
|
77
|
+
json_string = (_Utils.stream_to_string(serial.json)
|
|
78
|
+
if serial.type == 'Stream' else serial.json)
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
if issubclass(msg_class, BaseModel):
|
|
82
|
+
return msg_class.model_validate_json(json_string)
|
|
83
|
+
elif is_dataclass(msg_class):
|
|
84
|
+
return dataclass_from_dict(msg_class, json.loads(json_string))
|
|
85
|
+
else:
|
|
86
|
+
raise SerializationError(f"Class {msg_class} must be a Pydantic model or dataclass")
|
|
87
|
+
except Exception as e:
|
|
88
|
+
raise SerializationError(f"Failed to deserialize JSON: {str(e)}")
|
|
89
|
+
|
|
90
|
+
@staticmethod
|
|
91
|
+
def _serialize_pickle(message: Any) -> iris.cls:
|
|
92
|
+
pickle_string = codecs.encode(pickle.dumps(message), "base64").decode()
|
|
93
|
+
msg = iris.cls('IOP.PickleMessage')._New()
|
|
94
|
+
msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
|
|
95
|
+
msg.jstr = _Utils.string_to_stream(pickle_string)
|
|
96
|
+
return msg
|
|
97
|
+
|
|
98
|
+
@staticmethod
|
|
99
|
+
def _deserialize_pickle(serial: iris.cls) -> Any:
|
|
100
|
+
string = _Utils.stream_to_string(serial.jstr)
|
|
101
|
+
return pickle.loads(codecs.decode(string.encode(), "base64"))
|
|
102
|
+
|
|
103
|
+
@staticmethod
|
|
104
|
+
def _parse_classname(classname: str) -> tuple[str, str]:
|
|
105
|
+
j = classname.rindex(".")
|
|
106
|
+
if j <= 0:
|
|
107
|
+
raise SerializationError(f"Classname must include a module: {classname}")
|
|
108
|
+
return classname[:j], classname[j+1:]
|
|
109
|
+
|
|
110
|
+
def dataclass_from_dict(klass: Type, dikt: Dict) -> Any:
|
|
111
|
+
field_types = {
|
|
112
|
+
key: val.annotation
|
|
113
|
+
for key, val in inspect.signature(klass).parameters.items()
|
|
114
|
+
}
|
|
115
|
+
processed_dict = {}
|
|
116
|
+
for key, val in inspect.signature(klass).parameters.items():
|
|
117
|
+
if key not in dikt and val.default != val.empty:
|
|
118
|
+
processed_dict[key] = val.default
|
|
119
|
+
continue
|
|
120
|
+
|
|
121
|
+
value = dikt.get(key)
|
|
122
|
+
if value is None:
|
|
123
|
+
processed_dict[key] = None
|
|
124
|
+
continue
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
field_type = field_types[key]
|
|
128
|
+
if field_type != inspect.Parameter.empty:
|
|
129
|
+
adapter = TypeAdapter(field_type)
|
|
130
|
+
processed_dict[key] = adapter.validate_python(value)
|
|
131
|
+
else:
|
|
132
|
+
processed_dict[key] = value
|
|
133
|
+
except Exception:
|
|
134
|
+
processed_dict[key] = value
|
|
135
|
+
|
|
136
|
+
instance = klass(
|
|
137
|
+
**processed_dict
|
|
138
|
+
)
|
|
139
|
+
# handle any extra fields
|
|
140
|
+
for k, v in dikt.items():
|
|
141
|
+
if k not in processed_dict:
|
|
142
|
+
setattr(instance, k, v)
|
|
143
|
+
return instance
|
|
144
|
+
|
|
145
|
+
def dataclass_to_dict(instance: Any) -> Dict:
|
|
146
|
+
"""Converts a class instance to a dictionary.
|
|
147
|
+
Handles non attended fields."""
|
|
148
|
+
dikt = asdict(instance)
|
|
149
|
+
# assign any extra fields
|
|
150
|
+
for k, v in vars(instance).items():
|
|
151
|
+
if k not in dikt:
|
|
152
|
+
dikt[k] = v
|
|
153
|
+
return dikt
|
|
154
|
+
|
|
155
|
+
# Maintain backwards compatibility
|
|
156
|
+
serialize_pickle_message = lambda msg: MessageSerializer.serialize(msg, use_pickle=True)
|
|
157
|
+
serialize_message = lambda msg: MessageSerializer.serialize(msg, use_pickle=False)
|
|
158
|
+
deserialize_pickle_message = lambda serial: MessageSerializer.deserialize(serial, use_pickle=True)
|
|
159
|
+
deserialize_message = lambda serial: MessageSerializer.deserialize(serial, use_pickle=False)
|
|
@@ -8,7 +8,7 @@ import pkg_resources
|
|
|
8
8
|
import importlib
|
|
9
9
|
import json
|
|
10
10
|
from iop._message import _Message, _PydanticMessage
|
|
11
|
-
from
|
|
11
|
+
from pydantic import TypeAdapter
|
|
12
12
|
|
|
13
13
|
class _Utils():
|
|
14
14
|
@staticmethod
|
|
@@ -46,7 +46,8 @@ class _Utils():
|
|
|
46
46
|
if issubclass(cls,_PydanticMessage):
|
|
47
47
|
schema = cls.model_json_schema()
|
|
48
48
|
elif issubclass(cls,_Message):
|
|
49
|
-
|
|
49
|
+
type_adapter = TypeAdapter(cls)
|
|
50
|
+
schema = type_adapter.json_schema()
|
|
50
51
|
else:
|
|
51
52
|
raise ValueError("The class must be a subclass of _Message or _PydanticMessage")
|
|
52
53
|
schema_name = cls.__module__ + '.' + cls.__name__
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.0b6
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -44,12 +44,10 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
44
44
|
Classifier: Topic :: Utilities
|
|
45
45
|
Description-Content-Type: text/markdown
|
|
46
46
|
License-File: LICENSE
|
|
47
|
-
Requires-Dist: dacite>=1.6.0
|
|
48
47
|
Requires-Dist: pydantic>=2.0.0
|
|
49
48
|
Requires-Dist: xmltodict>=0.12.0
|
|
50
49
|
Requires-Dist: iris-embedded-python-wrapper>=0.0.6
|
|
51
50
|
Requires-Dist: setuptools>=40.8.0
|
|
52
|
-
Requires-Dist: dc-schema>=0.0.8
|
|
53
51
|
Requires-Dist: jsonpath-ng>=1.7.0
|
|
54
52
|
|
|
55
53
|
# IoP (Interoperability On Python)
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
import base64
|
|
3
|
-
import codecs
|
|
4
|
-
import datetime
|
|
5
|
-
import decimal
|
|
6
|
-
import importlib
|
|
7
|
-
import json
|
|
8
|
-
import pickle
|
|
9
|
-
import uuid
|
|
10
|
-
from typing import Any, Dict, Type
|
|
11
|
-
|
|
12
|
-
from dacite import Config, from_dict
|
|
13
|
-
import iris
|
|
14
|
-
|
|
15
|
-
from iop._message import _PydanticPickleMessage
|
|
16
|
-
from iop._utils import _Utils
|
|
17
|
-
from pydantic import BaseModel
|
|
18
|
-
|
|
19
|
-
# Constants
|
|
20
|
-
DATETIME_FORMAT_LENGTH = 23
|
|
21
|
-
TIME_FORMAT_LENGTH = 12
|
|
22
|
-
TYPE_SEPARATOR = ':'
|
|
23
|
-
SUPPORTED_TYPES = {
|
|
24
|
-
'datetime', 'date', 'time', 'dataframe',
|
|
25
|
-
'decimal', 'uuid', 'bytes'
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class SerializationError(Exception):
|
|
29
|
-
"""Base exception for serialization errors."""
|
|
30
|
-
pass
|
|
31
|
-
|
|
32
|
-
class TypeConverter:
|
|
33
|
-
"""Handles type conversion for special data types."""
|
|
34
|
-
|
|
35
|
-
@staticmethod
|
|
36
|
-
def convert_to_string(typ: str, obj: Any) -> str:
|
|
37
|
-
if typ == 'dataframe':
|
|
38
|
-
return obj.to_json(orient="table")
|
|
39
|
-
elif typ == 'datetime':
|
|
40
|
-
return TypeConverter._format_datetime(obj)
|
|
41
|
-
elif typ == 'date':
|
|
42
|
-
return obj.isoformat()
|
|
43
|
-
elif typ == 'time':
|
|
44
|
-
return TypeConverter._format_time(obj)
|
|
45
|
-
elif typ == 'bytes':
|
|
46
|
-
return base64.b64encode(obj).decode("UTF-8")
|
|
47
|
-
return str(obj)
|
|
48
|
-
|
|
49
|
-
@staticmethod
|
|
50
|
-
def convert_from_string(typ: str, val: str) -> Any:
|
|
51
|
-
try:
|
|
52
|
-
if typ == 'datetime':
|
|
53
|
-
return datetime.datetime.fromisoformat(val)
|
|
54
|
-
elif typ == 'date':
|
|
55
|
-
return datetime.date.fromisoformat(val)
|
|
56
|
-
elif typ == 'time':
|
|
57
|
-
return datetime.time.fromisoformat(val)
|
|
58
|
-
elif typ == 'dataframe':
|
|
59
|
-
try:
|
|
60
|
-
import pandas as pd
|
|
61
|
-
except ImportError:
|
|
62
|
-
raise SerializationError("Failed to load pandas module")
|
|
63
|
-
return pd.read_json(val, orient="table")
|
|
64
|
-
elif typ == 'decimal':
|
|
65
|
-
return decimal.Decimal(val)
|
|
66
|
-
elif typ == 'uuid':
|
|
67
|
-
return uuid.UUID(val)
|
|
68
|
-
elif typ == 'bytes':
|
|
69
|
-
return base64.b64decode(val.encode("UTF-8"))
|
|
70
|
-
return val
|
|
71
|
-
except Exception as e:
|
|
72
|
-
raise SerializationError(f"Failed to convert type {typ}: {str(e)}")
|
|
73
|
-
|
|
74
|
-
@staticmethod
|
|
75
|
-
def _format_datetime(dt: datetime.datetime) -> str:
|
|
76
|
-
r = dt.isoformat()
|
|
77
|
-
if dt.microsecond:
|
|
78
|
-
r = r[:DATETIME_FORMAT_LENGTH] + r[26:]
|
|
79
|
-
if r.endswith("+00:00"):
|
|
80
|
-
r = r[:-6] + "Z"
|
|
81
|
-
return r
|
|
82
|
-
|
|
83
|
-
@staticmethod
|
|
84
|
-
def _format_time(t: datetime.time) -> str:
|
|
85
|
-
r = t.isoformat()
|
|
86
|
-
if t.microsecond:
|
|
87
|
-
r = r[:TIME_FORMAT_LENGTH]
|
|
88
|
-
return r
|
|
89
|
-
|
|
90
|
-
class IrisJSONEncoder(json.JSONEncoder):
|
|
91
|
-
"""JSONEncoder that handles dates, decimals, UUIDs, etc."""
|
|
92
|
-
|
|
93
|
-
def default(self, obj: Any) -> Any:
|
|
94
|
-
if isinstance(obj, BaseModel):
|
|
95
|
-
return obj.model_dump()
|
|
96
|
-
if obj.__class__.__name__ == 'DataFrame':
|
|
97
|
-
return f'dataframe:{TypeConverter.convert_to_string("dataframe", obj)}'
|
|
98
|
-
elif isinstance(obj, datetime.datetime):
|
|
99
|
-
return f'datetime:{TypeConverter.convert_to_string("datetime", obj)}'
|
|
100
|
-
elif isinstance(obj, datetime.date):
|
|
101
|
-
return f'date:{TypeConverter.convert_to_string("date", obj)}'
|
|
102
|
-
elif isinstance(obj, datetime.time):
|
|
103
|
-
return f'time:{TypeConverter.convert_to_string("time", obj)}'
|
|
104
|
-
elif isinstance(obj, decimal.Decimal):
|
|
105
|
-
return f'decimal:{obj}'
|
|
106
|
-
elif isinstance(obj, uuid.UUID):
|
|
107
|
-
return f'uuid:{obj}'
|
|
108
|
-
elif isinstance(obj, bytes):
|
|
109
|
-
return f'bytes:{TypeConverter.convert_to_string("bytes", obj)}'
|
|
110
|
-
elif hasattr(obj, '__dict__'):
|
|
111
|
-
return obj.__dict__
|
|
112
|
-
return super().default(obj)
|
|
113
|
-
|
|
114
|
-
class IrisJSONDecoder(json.JSONDecoder):
|
|
115
|
-
"""JSONDecoder that handles special type annotations."""
|
|
116
|
-
|
|
117
|
-
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
118
|
-
super().__init__(object_hook=self.object_hook, *args, **kwargs)
|
|
119
|
-
|
|
120
|
-
def object_hook(self, obj: Dict) -> Dict:
|
|
121
|
-
return {
|
|
122
|
-
key: self._process_value(value)
|
|
123
|
-
for key, value in obj.items()
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
def _process_value(self, value: Any) -> Any:
|
|
127
|
-
if isinstance(value, str) and TYPE_SEPARATOR in value:
|
|
128
|
-
typ, val = value.split(TYPE_SEPARATOR, 1)
|
|
129
|
-
if typ in SUPPORTED_TYPES:
|
|
130
|
-
return TypeConverter.convert_from_string(typ, val)
|
|
131
|
-
return value
|
|
132
|
-
|
|
133
|
-
class MessageSerializer:
|
|
134
|
-
"""Handles message serialization and deserialization."""
|
|
135
|
-
|
|
136
|
-
@staticmethod
|
|
137
|
-
def serialize(message: Any, use_pickle: bool = False) -> iris.cls:
|
|
138
|
-
"""Serializes a message to IRIS format."""
|
|
139
|
-
# Check for PydanticPickleMessage first
|
|
140
|
-
if isinstance(message, _PydanticPickleMessage):
|
|
141
|
-
return MessageSerializer._serialize_pickle(message)
|
|
142
|
-
if isinstance(message, BaseModel):
|
|
143
|
-
return (MessageSerializer._serialize_pickle(message)
|
|
144
|
-
if use_pickle else MessageSerializer._serialize_json(message))
|
|
145
|
-
if use_pickle:
|
|
146
|
-
return MessageSerializer._serialize_pickle(message)
|
|
147
|
-
return MessageSerializer._serialize_json(message)
|
|
148
|
-
|
|
149
|
-
@staticmethod
|
|
150
|
-
def deserialize(serial: iris.cls, use_pickle: bool = False) -> Any:
|
|
151
|
-
"""Deserializes a message from IRIS format."""
|
|
152
|
-
if use_pickle:
|
|
153
|
-
return MessageSerializer._deserialize_pickle(serial)
|
|
154
|
-
return MessageSerializer._deserialize_json(serial)
|
|
155
|
-
|
|
156
|
-
@staticmethod
|
|
157
|
-
def _serialize_pickle(message: Any) -> iris.cls:
|
|
158
|
-
pickle_string = codecs.encode(pickle.dumps(message), "base64").decode()
|
|
159
|
-
msg = iris.cls('IOP.PickleMessage')._New()
|
|
160
|
-
msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
|
|
161
|
-
msg.jstr = _Utils.string_to_stream(pickle_string)
|
|
162
|
-
return msg
|
|
163
|
-
|
|
164
|
-
@staticmethod
|
|
165
|
-
def _serialize_json(message: Any) -> iris.cls:
|
|
166
|
-
if isinstance(message, BaseModel):
|
|
167
|
-
json_string = json.dumps(message.model_dump(), cls=IrisJSONEncoder, ensure_ascii=False)
|
|
168
|
-
else:
|
|
169
|
-
json_string = json.dumps(message, cls=IrisJSONEncoder, ensure_ascii=False)
|
|
170
|
-
|
|
171
|
-
msg = iris.cls('IOP.Message')._New()
|
|
172
|
-
msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
|
|
173
|
-
|
|
174
|
-
if hasattr(msg, 'buffer') and len(json_string) > msg.buffer:
|
|
175
|
-
msg.json = _Utils.string_to_stream(json_string, msg.buffer)
|
|
176
|
-
else:
|
|
177
|
-
msg.json = json_string
|
|
178
|
-
return msg
|
|
179
|
-
|
|
180
|
-
@staticmethod
|
|
181
|
-
def _deserialize_pickle(serial: iris.cls) -> Any:
|
|
182
|
-
string = _Utils.stream_to_string(serial.jstr)
|
|
183
|
-
return pickle.loads(codecs.decode(string.encode(), "base64"))
|
|
184
|
-
|
|
185
|
-
@staticmethod
|
|
186
|
-
def _deserialize_json(serial: iris.cls) -> Any:
|
|
187
|
-
if not serial.classname:
|
|
188
|
-
raise SerializationError("JSON message malformed, must include classname")
|
|
189
|
-
|
|
190
|
-
try:
|
|
191
|
-
module_name, class_name = MessageSerializer._parse_classname(serial.classname)
|
|
192
|
-
module = importlib.import_module(module_name)
|
|
193
|
-
msg_class = getattr(module, class_name)
|
|
194
|
-
except Exception as e:
|
|
195
|
-
raise SerializationError(f"Failed to load class {serial.classname}: {str(e)}")
|
|
196
|
-
|
|
197
|
-
json_string = (_Utils.stream_to_string(serial.json)
|
|
198
|
-
if serial.type == 'Stream' else serial.json)
|
|
199
|
-
|
|
200
|
-
try:
|
|
201
|
-
json_dict = json.loads(json_string, cls=IrisJSONDecoder)
|
|
202
|
-
if issubclass(msg_class, BaseModel):
|
|
203
|
-
return msg_class.model_validate(json_dict)
|
|
204
|
-
else:
|
|
205
|
-
return dataclass_from_dict(msg_class, json_dict)
|
|
206
|
-
except Exception as e:
|
|
207
|
-
raise SerializationError(f"Failed to deserialize JSON: {str(e)}")
|
|
208
|
-
|
|
209
|
-
@staticmethod
|
|
210
|
-
def _parse_classname(classname: str) -> tuple[str, str]:
|
|
211
|
-
j = classname.rindex(".")
|
|
212
|
-
if j <= 0:
|
|
213
|
-
raise SerializationError(f"Classname must include a module: {classname}")
|
|
214
|
-
return classname[:j], classname[j+1:]
|
|
215
|
-
|
|
216
|
-
def dataclass_from_dict(klass: Type, dikt: Dict) -> Any:
|
|
217
|
-
"""Converts a dictionary to a dataclass instance."""
|
|
218
|
-
ret = from_dict(klass, dikt, Config(check_types=False))
|
|
219
|
-
|
|
220
|
-
try:
|
|
221
|
-
fieldtypes = klass.__annotations__
|
|
222
|
-
except Exception:
|
|
223
|
-
fieldtypes = {}
|
|
224
|
-
|
|
225
|
-
for key, val in dikt.items():
|
|
226
|
-
if key not in fieldtypes:
|
|
227
|
-
setattr(ret, key, val)
|
|
228
|
-
return ret
|
|
229
|
-
|
|
230
|
-
# Maintain backwards compatibility
|
|
231
|
-
serialize_pickle_message = lambda msg: MessageSerializer.serialize(msg, use_pickle=True)
|
|
232
|
-
serialize_message = lambda msg: MessageSerializer.serialize(msg, use_pickle=False)
|
|
233
|
-
deserialize_pickle_message = lambda serial: MessageSerializer.deserialize(serial, use_pickle=True)
|
|
234
|
-
deserialize_message = lambda serial: MessageSerializer.deserialize(serial, use_pickle=False)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/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.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/__init__.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_cli.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_common.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/grongier/pex/_director.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/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.4.0b4 → iris_pex_embedded_python-3.4.0b6}/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.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_async_request.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_host.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_operation.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_process.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_business_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_decorators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_inbound_adapter.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_log_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_message_validator.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/_outbound_adapter.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.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Common.cls
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Director.cls
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Message.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
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Test.cls
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/cls/IOP/Utils.cls
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/iop/wsgi/handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/irisnative/_IRISNative.py
RENAMED
|
File without changes
|
{iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b6}/src/irisnative/__init__.py
RENAMED
|
File without changes
|