iris-pex-embedded-python 3.4.0b4__tar.gz → 3.4.0b5__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.

Files changed (150) hide show
  1. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/PKG-INFO +1 -3
  2. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/pyproject.toml +1 -3
  3. iris_pex_embedded_python-3.4.0b5/src/iop/_serialization.py +159 -0
  4. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_utils.py +3 -2
  5. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/PKG-INFO +1 -3
  6. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -2
  7. iris_pex_embedded_python-3.4.0b4/src/iop/_serialization.py +0 -234
  8. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/LICENSE +0 -0
  9. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/README.md +0 -0
  10. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/setup.cfg +0 -0
  11. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/setup.py +0 -0
  12. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/__init__.py +0 -0
  13. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
  14. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
  15. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
  16. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
  17. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
  18. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
  19. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
  20. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
  21. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
  22. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
  23. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
  24. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
  25. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
  26. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
  27. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
  28. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
  29. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
  30. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
  31. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
  32. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
  33. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/__init__.py +0 -0
  34. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/__main__.py +0 -0
  35. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/_business_host.py +0 -0
  36. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/_cli.py +0 -0
  37. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/_common.py +0 -0
  38. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/_director.py +0 -0
  39. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/_utils.py +0 -0
  40. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/grongier/pex/wsgi/handlers.py +0 -0
  41. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_BufferReader.py +0 -0
  42. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_BufferWriter.py +0 -0
  43. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_ConnectionInformation.py +0 -0
  44. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_ConnectionParameters.py +0 -0
  45. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_Constant.py +0 -0
  46. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_DBList.py +0 -0
  47. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_Device.py +0 -0
  48. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_GatewayContext.py +0 -0
  49. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_GatewayException.py +0 -0
  50. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_GatewayUtility.py +0 -0
  51. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRIS.py +0 -0
  52. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISConnection.py +0 -0
  53. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISEmbedded.py +0 -0
  54. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
  55. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
  56. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISIterator.py +0 -0
  57. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISList.py +0 -0
  58. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISNative.py +0 -0
  59. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISOREF.py +0 -0
  60. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISObject.py +0 -0
  61. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_IRISReference.py +0 -0
  62. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_InStream.py +0 -0
  63. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_LegacyIterator.py +0 -0
  64. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_ListItem.py +0 -0
  65. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_ListReader.py +0 -0
  66. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_ListWriter.py +0 -0
  67. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_LogFileStream.py +0 -0
  68. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_MessageHeader.py +0 -0
  69. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_OutStream.py +0 -0
  70. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_PrintStream.py +0 -0
  71. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_PythonGateway.py +0 -0
  72. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
  73. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/__init__.py +0 -0
  74. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/__main__.py +0 -0
  75. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_Column.py +0 -0
  76. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_DBAPI.py +0 -0
  77. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
  78. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
  79. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_Message.py +0 -0
  80. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
  81. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
  82. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
  83. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
  84. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/__init__.py +0 -0
  85. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
  86. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
  87. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
  88. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
  89. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
  90. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
  91. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
  92. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
  93. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_BusinessService.py +0 -0
  94. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_Common.py +0 -0
  95. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_Director.py +0 -0
  96. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
  97. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
  98. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
  99. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
  100. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
  101. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_Message.py +0 -0
  102. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
  103. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/intersystems_iris/pex/__init__.py +0 -0
  104. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/__init__.py +0 -0
  105. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/__main__.py +0 -0
  106. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_async_request.py +0 -0
  107. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_business_host.py +0 -0
  108. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_business_operation.py +0 -0
  109. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_business_process.py +0 -0
  110. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_business_service.py +0 -0
  111. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_cli.py +0 -0
  112. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_common.py +0 -0
  113. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_decorators.py +0 -0
  114. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_director.py +0 -0
  115. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_dispatch.py +0 -0
  116. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_inbound_adapter.py +0 -0
  117. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_log_manager.py +0 -0
  118. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_message.py +0 -0
  119. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_message_validator.py +0 -0
  120. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_outbound_adapter.py +0 -0
  121. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_private_session_duplex.py +0 -0
  122. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/_private_session_process.py +0 -0
  123. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
  124. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
  125. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/BusinessService.cls +0 -0
  126. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Common.cls +0 -0
  127. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Director.cls +0 -0
  128. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
  129. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
  130. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
  131. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
  132. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
  133. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Message.cls +0 -0
  134. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
  135. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PickleMessage.cls +0 -0
  136. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
  137. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
  138. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
  139. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
  140. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
  141. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
  142. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Test.cls +0 -0
  143. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/cls/IOP/Utils.cls +0 -0
  144. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iop/wsgi/handlers.py +0 -0
  145. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
  146. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
  147. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
  148. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
  149. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/src/irisnative/_IRISNative.py +0 -0
  150. {iris_pex_embedded_python-3.4.0b4 → iris_pex_embedded_python-3.4.0b5}/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.0b4
3
+ Version: 3.4.0b5
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.0b4"
6
+ version = "3.4.0b5"
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
 
@@ -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 dc_schema import get_schema
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
- schema = get_schema(cls)
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.0b4
3
+ Version: 3.4.0b5
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,7 +1,5 @@
1
- dacite>=1.6.0
2
1
  pydantic>=2.0.0
3
2
  xmltodict>=0.12.0
4
3
  iris-embedded-python-wrapper>=0.0.6
5
4
  setuptools>=40.8.0
6
- dc-schema>=0.0.8
7
5
  jsonpath-ng>=1.7.0
@@ -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)