iris-pex-embedded-python 3.4.0b2__tar.gz → 3.4.0b4__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.0b2 → iris_pex_embedded_python-3.4.0b4}/PKG-INFO +1 -1
  2. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/pyproject.toml +4 -1
  3. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_common.py +38 -15
  4. iris_pex_embedded_python-3.4.0b4/src/iop/_dispatch.py +101 -0
  5. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_log_manager.py +11 -17
  6. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_serialization.py +1 -3
  7. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_utils.py +7 -1
  8. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/PKG-INFO +1 -1
  9. iris_pex_embedded_python-3.4.0b2/src/iop/_dispatch.py +0 -223
  10. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/LICENSE +0 -0
  11. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/README.md +0 -0
  12. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/setup.cfg +0 -0
  13. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/setup.py +0 -0
  14. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/__init__.py +0 -0
  15. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
  16. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
  17. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
  18. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
  19. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
  20. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
  21. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
  22. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
  23. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
  24. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
  25. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
  26. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
  27. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
  28. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
  29. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
  30. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
  31. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
  32. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
  33. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
  34. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
  35. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/__init__.py +0 -0
  36. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/__main__.py +0 -0
  37. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/_business_host.py +0 -0
  38. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/_cli.py +0 -0
  39. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/_common.py +0 -0
  40. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/_director.py +0 -0
  41. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/_utils.py +0 -0
  42. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/grongier/pex/wsgi/handlers.py +0 -0
  43. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_BufferReader.py +0 -0
  44. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_BufferWriter.py +0 -0
  45. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_ConnectionInformation.py +0 -0
  46. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_ConnectionParameters.py +0 -0
  47. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_Constant.py +0 -0
  48. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_DBList.py +0 -0
  49. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_Device.py +0 -0
  50. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_GatewayContext.py +0 -0
  51. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_GatewayException.py +0 -0
  52. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_GatewayUtility.py +0 -0
  53. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRIS.py +0 -0
  54. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISConnection.py +0 -0
  55. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISEmbedded.py +0 -0
  56. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
  57. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
  58. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISIterator.py +0 -0
  59. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISList.py +0 -0
  60. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISNative.py +0 -0
  61. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISOREF.py +0 -0
  62. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISObject.py +0 -0
  63. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_IRISReference.py +0 -0
  64. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_InStream.py +0 -0
  65. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_LegacyIterator.py +0 -0
  66. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_ListItem.py +0 -0
  67. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_ListReader.py +0 -0
  68. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_ListWriter.py +0 -0
  69. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_LogFileStream.py +0 -0
  70. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_MessageHeader.py +0 -0
  71. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_OutStream.py +0 -0
  72. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_PrintStream.py +0 -0
  73. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_PythonGateway.py +0 -0
  74. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
  75. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/__init__.py +0 -0
  76. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/__main__.py +0 -0
  77. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_Column.py +0 -0
  78. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_DBAPI.py +0 -0
  79. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
  80. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
  81. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_Message.py +0 -0
  82. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
  83. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
  84. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
  85. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
  86. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/__init__.py +0 -0
  87. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
  88. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
  89. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
  90. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
  91. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
  92. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
  93. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
  94. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
  95. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_BusinessService.py +0 -0
  96. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_Common.py +0 -0
  97. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_Director.py +0 -0
  98. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
  99. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
  100. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
  101. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
  102. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
  103. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_Message.py +0 -0
  104. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
  105. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/intersystems_iris/pex/__init__.py +0 -0
  106. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/__init__.py +0 -0
  107. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/__main__.py +0 -0
  108. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_async_request.py +0 -0
  109. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_business_host.py +0 -0
  110. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_business_operation.py +0 -0
  111. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_business_process.py +0 -0
  112. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_business_service.py +0 -0
  113. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_cli.py +0 -0
  114. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_decorators.py +0 -0
  115. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_director.py +0 -0
  116. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_inbound_adapter.py +0 -0
  117. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_message.py +0 -0
  118. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_message_validator.py +0 -0
  119. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_outbound_adapter.py +0 -0
  120. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_private_session_duplex.py +0 -0
  121. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/_private_session_process.py +0 -0
  122. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
  123. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
  124. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/BusinessService.cls +0 -0
  125. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Common.cls +0 -0
  126. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Director.cls +0 -0
  127. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
  128. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
  129. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
  130. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
  131. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
  132. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Message.cls +0 -0
  133. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
  134. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PickleMessage.cls +0 -0
  135. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
  136. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
  137. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
  138. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
  139. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
  140. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
  141. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Test.cls +0 -0
  142. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/cls/IOP/Utils.cls +0 -0
  143. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iop/wsgi/handlers.py +0 -0
  144. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
  145. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
  146. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
  147. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
  148. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
  149. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/src/irisnative/_IRISNative.py +0 -0
  150. {iris_pex_embedded_python-3.4.0b2 → iris_pex_embedded_python-3.4.0b4}/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.0b2
3
+ Version: 3.4.0b4
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"]
3
3
 
4
4
  [project]
5
5
  name = "iris_pex_embedded_python"
6
- version = "3.4.0b2"
6
+ version = "3.4.0b4"
7
7
  description = "Iris Interoperability based on Embedded Python"
8
8
  readme = "README.md"
9
9
  authors = [
@@ -53,3 +53,6 @@ exclude = ["tests*"]
53
53
 
54
54
  [tool.setuptools.package-data]
55
55
  "*" = ["*.cls"]
56
+
57
+ [tool.pytest.ini_options]
58
+ asyncio_default_fixture_loop_scope = "class"
@@ -17,7 +17,19 @@ class _Common(metaclass=abc.ABCMeta):
17
17
  INFO_URL: ClassVar[str]
18
18
  ICON_URL: ClassVar[str]
19
19
  iris_handle: Any = None
20
- log_to_console: bool = False
20
+ _log_to_console: bool = False
21
+
22
+ @property
23
+ def log_to_console(self) -> bool:
24
+ return self._log_to_console
25
+
26
+ @log_to_console.setter
27
+ def log_to_console(self, value: bool) -> None:
28
+ self._log_to_console = value
29
+ self.logger = LogManager.get_logger(self.__class__.__name__,value)
30
+
31
+ def __init__(self):
32
+ self.logger = LogManager.get_logger(self.__class__.__name__)
21
33
 
22
34
  # Lifecycle methods
23
35
  def on_init(self) -> None:
@@ -172,7 +184,7 @@ class _Common(metaclass=abc.ABCMeta):
172
184
  except:
173
185
  pass
174
186
  return ret
175
-
187
+
176
188
  # Logging methods
177
189
  def _log(self) -> Tuple[str, Optional[str]]:
178
190
  """Get class and method name for logging.
@@ -189,15 +201,27 @@ class _Common(metaclass=abc.ABCMeta):
189
201
  pass
190
202
  return current_class, current_method
191
203
 
192
- @property
193
- def logger(self) -> logging.Logger:
194
- """Get a logger instance for this component.
204
+ def _logging(self, message: str, level: int, to_console: Optional[bool] = None) -> None:
205
+ """Write log entry.
195
206
 
196
- Returns:
197
- Logger configured for IRIS integration
207
+ Args:
208
+ message: Message to log
209
+ level: Log level
210
+ to_console: If True, log to console instead of IRIS
198
211
  """
199
- class_name, method_name = self._log()
200
- return LogManager.get_logger(class_name, method_name, self.log_to_console)
212
+ current_class, current_method = self._log()
213
+ if to_console is None:
214
+ to_console = self.log_to_console
215
+ if level == logging.DEBUG:
216
+ self.logger.debug(message, extra={'to_console': to_console, 'class_name': current_class, 'method_name': current_method})
217
+ elif level == logging.INFO:
218
+ self.logger.info(message, extra={'to_console': to_console, 'class_name': current_class, 'method_name': current_method})
219
+ elif level == logging.CRITICAL:
220
+ self.logger.critical(message, extra={'to_console': to_console, 'class_name': current_class, 'method_name': current_method})
221
+ elif level == logging.WARNING:
222
+ self.logger.warning(message, extra={'to_console': to_console, 'class_name': current_class, 'method_name': current_method})
223
+ elif level == logging.ERROR:
224
+ self.logger.error(message, extra={'to_console': to_console, 'class_name': current_class, 'method_name': current_method})
201
225
 
202
226
  def trace(self, message: str, to_console: Optional[bool] = None) -> None:
203
227
  """Write trace log entry.
@@ -206,8 +230,7 @@ class _Common(metaclass=abc.ABCMeta):
206
230
  message: Message to log
207
231
  to_console: If True, log to console instead of IRIS
208
232
  """
209
- self.logger.debug(message, extra={'to_console': to_console})
210
-
233
+ self._logging(message, logging.DEBUG, to_console)
211
234
 
212
235
  def log_info(self, message: str, to_console: Optional[bool] = None) -> None:
213
236
  """Write info log entry.
@@ -216,7 +239,7 @@ class _Common(metaclass=abc.ABCMeta):
216
239
  message: Message to log
217
240
  to_console: If True, log to console instead of IRIS
218
241
  """
219
- self.logger.info(message, extra={'to_console': to_console})
242
+ self._logging(message, logging.INFO, to_console)
220
243
 
221
244
  def log_alert(self, message: str, to_console: Optional[bool] = None) -> None:
222
245
  """Write alert log entry.
@@ -225,7 +248,7 @@ class _Common(metaclass=abc.ABCMeta):
225
248
  message: Message to log
226
249
  to_console: If True, log to console instead of IRIS
227
250
  """
228
- self.logger.critical(message, extra={'to_console': to_console})
251
+ self._logging(message, logging.CRITICAL, to_console)
229
252
 
230
253
  def log_warning(self, message: str, to_console: Optional[bool] = None) -> None:
231
254
  """Write warning log entry.
@@ -234,7 +257,7 @@ class _Common(metaclass=abc.ABCMeta):
234
257
  message: Message to log
235
258
  to_console: If True, log to console instead of IRIS
236
259
  """
237
- self.logger.warning(message, extra={'to_console': to_console})
260
+ self._logging(message, logging.WARNING, to_console)
238
261
 
239
262
  def log_error(self, message: str, to_console: Optional[bool] = None) -> None:
240
263
  """Write error log entry.
@@ -243,7 +266,7 @@ class _Common(metaclass=abc.ABCMeta):
243
266
  message: Message to log
244
267
  to_console: If True, log to console instead of IRIS
245
268
  """
246
- self.logger.error(message, extra={'to_console': to_console})
269
+ self._logging(message, logging.ERROR, to_console)
247
270
 
248
271
  def log_assert(self, message: str) -> None:
249
272
  """Write a log entry of type "assert". Log entries can be viewed in the management portal.
@@ -0,0 +1,101 @@
1
+ from inspect import signature
2
+ from typing import Any
3
+
4
+ from iop._serialization import serialize_message, serialize_pickle_message, deserialize_message, deserialize_pickle_message
5
+ from iop._message_validator import is_message_instance, is_pickle_message_instance, is_iris_object_instance
6
+
7
+ def dispatch_serializer(message: Any) -> Any:
8
+ """Serializes the message based on its type.
9
+
10
+ Args:
11
+ message: The message to serialize
12
+
13
+ Returns:
14
+ The serialized message
15
+
16
+ Raises:
17
+ TypeError: If message is invalid type
18
+ """
19
+ if message is not None:
20
+ if is_message_instance(message):
21
+ return serialize_message(message)
22
+ elif is_pickle_message_instance(message):
23
+ return serialize_pickle_message(message)
24
+ elif is_iris_object_instance(message):
25
+ return message
26
+
27
+ if message == "" or message is None:
28
+ return message
29
+
30
+ raise TypeError("The message must be an instance of a class that is a subclass of Message or IRISObject %Persistent class.")
31
+
32
+ def dispatch_deserializer(serial: Any) -> Any:
33
+ """Deserializes the message based on its type.
34
+
35
+ Args:
36
+ serial: The serialized message
37
+
38
+ Returns:
39
+ The deserialized message
40
+ """
41
+ if (
42
+ serial is not None
43
+ and type(serial).__module__.startswith('iris')
44
+ and (
45
+ serial._IsA("IOP.Message")
46
+ or serial._IsA("Grongier.PEX.Message")
47
+ )
48
+ ):
49
+ return deserialize_message(serial)
50
+ elif (
51
+ serial is not None
52
+ and type(serial).__module__.startswith('iris')
53
+ and (
54
+ serial._IsA("IOP.PickleMessage")
55
+ or serial._IsA("Grongier.PEX.PickleMessage")
56
+ )
57
+ ):
58
+ return deserialize_pickle_message(serial)
59
+ else:
60
+ return serial
61
+
62
+ def dispach_message(host, request: Any) -> Any:
63
+ """Dispatches the message to the appropriate method.
64
+
65
+ Args:
66
+ request: The request object
67
+
68
+ Returns:
69
+ The response object
70
+ """
71
+ call = 'on_message'
72
+
73
+ module = request.__class__.__module__
74
+ classname = request.__class__.__name__
75
+
76
+ for msg, method in host.DISPATCH:
77
+ if msg == module + "." + classname:
78
+ call = method
79
+
80
+ return getattr(host, call)(request)
81
+
82
+ def create_dispatch(host) -> None:
83
+ """Creates a list of tuples, where each tuple contains the name of a class and the name of a method
84
+ that takes an instance of that class as its only argument.
85
+ """
86
+ if len(host.DISPATCH) == 0:
87
+ method_list = [func for func in dir(host) if callable(getattr(host, func)) and not func.startswith("_")]
88
+ for method in method_list:
89
+ try:
90
+ param = signature(getattr(host, method)).parameters
91
+ except ValueError as e:
92
+ param = ''
93
+ if (len(param) == 1):
94
+ annotation = str(param[list(param)[0]].annotation)
95
+ i = annotation.find("'")
96
+ j = annotation.rfind("'")
97
+ if j == -1:
98
+ j = None
99
+ classname = annotation[i+1:j]
100
+ host.DISPATCH.append((classname, method))
101
+ return
@@ -1,3 +1,4 @@
1
+ import traceback
1
2
  import iris
2
3
  import logging
3
4
  from typing import Optional, Tuple
@@ -6,7 +7,7 @@ class LogManager:
6
7
  """Manages logging integration between Python's logging module and IRIS."""
7
8
 
8
9
  @staticmethod
9
- def get_logger(class_name: str, method_name: Optional[str] = None, to_console: bool = False) -> logging.Logger:
10
+ def get_logger(class_name: str, to_console: bool = False) -> logging.Logger:
10
11
  """Get a logger instance configured for IRIS integration.
11
12
 
12
13
  Args:
@@ -17,11 +18,11 @@ class LogManager:
17
18
  Returns:
18
19
  Logger instance configured for IRIS integration
19
20
  """
20
- logger = logging.getLogger(f"{class_name}.{method_name}" if method_name else class_name)
21
+ logger = logging.Logger(f"{class_name}")
21
22
 
22
23
  # Only add handler if none exists
23
24
  if not logger.handlers:
24
- handler = IRISLogHandler(class_name, method_name, to_console)
25
+ handler = IRISLogHandler(to_console=to_console)
25
26
  formatter = logging.Formatter('%(message)s')
26
27
  handler.setFormatter(formatter)
27
28
  logger.addHandler(handler)
@@ -33,17 +34,9 @@ class LogManager:
33
34
  class IRISLogHandler(logging.Handler):
34
35
  """Custom logging handler that routes Python logs to IRIS logging system."""
35
36
 
36
- def __init__(self, class_name: str, method_name: Optional[str] = None, to_console: bool = False):
37
- """Initialize the handler with context information.
38
-
39
- Args:
40
- class_name: Name of the class logging the message
41
- method_name: Optional name of the method logging the message
42
- console: If True, log to the console instead of IRIS
43
- """
37
+ def __init__(self, to_console: bool = False):
38
+ """Initialize the IRIS logging handler."""
44
39
  super().__init__()
45
- self.class_name = class_name
46
- self.method_name = method_name
47
40
  self.to_console = to_console
48
41
 
49
42
  # Map Python logging levels to IRIS logging methods
@@ -80,10 +73,11 @@ class IRISLogHandler(logging.Handler):
80
73
  Args:
81
74
  record: The logging record to emit
82
75
  """
83
-
84
- log_func = self.level_map.get(record.levelno, iris.cls("Ens.Util.Log").LogInfo)
76
+ class_name = record.class_name if hasattr(record, "class_name") else record.name
77
+ method_name = record.method_name if hasattr(record, "method_name") else record.funcName
85
78
  if self.to_console or (hasattr(record, "to_console") and record.to_console):
86
79
  iris.cls("%SYS.System").WriteToConsoleLog(self.format(record),
87
- 0,self.level_map_console.get(record.levelno, 0),record.name)
80
+ 0,self.level_map_console.get(record.levelno, 0),class_name+"."+method_name)
88
81
  else:
89
- log_func(self.class_name, self.method_name, self.format(record))
82
+ log_func = self.level_map.get(record.levelno, iris.cls("Ens.Util.Log").LogInfo)
83
+ log_func(class_name, method_name, self.format(record))
@@ -7,9 +7,7 @@ import importlib
7
7
  import json
8
8
  import pickle
9
9
  import uuid
10
- from abc import ABC, abstractmethod
11
- from dataclasses import is_dataclass
12
- from typing import Any, Dict, Type, Optional
10
+ from typing import Any, Dict, Type
13
11
 
14
12
  from dacite import Config, from_dict
15
13
  import iris
@@ -7,6 +7,7 @@ import xmltodict
7
7
  import pkg_resources
8
8
  import importlib
9
9
  import json
10
+ from iop._message import _Message, _PydanticMessage
10
11
  from dc_schema import get_schema
11
12
 
12
13
  class _Utils():
@@ -42,7 +43,12 @@ class _Utils():
42
43
 
43
44
  :param cls: The class to register
44
45
  """
45
- schema = get_schema(cls)
46
+ if issubclass(cls,_PydanticMessage):
47
+ schema = cls.model_json_schema()
48
+ elif issubclass(cls,_Message):
49
+ schema = get_schema(cls)
50
+ else:
51
+ raise ValueError("The class must be a subclass of _Message or _PydanticMessage")
46
52
  schema_name = cls.__module__ + '.' + cls.__name__
47
53
  schema_str = json.dumps(schema)
48
54
  categories = schema_name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: iris_pex_embedded_python
3
- Version: 3.4.0b2
3
+ Version: 3.4.0b4
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License
@@ -1,223 +0,0 @@
1
- import codecs
2
- import importlib
3
- from inspect import signature
4
- import json
5
- import pickle
6
- from typing import Any, Dict, List, Type
7
-
8
- import iris
9
- from dacite import Config, from_dict
10
- from pydantic import BaseModel
11
-
12
- from iop._utils import _Utils
13
- from iop._serialization import IrisJSONEncoder, IrisJSONDecoder
14
- from iop._message_validator import is_message_instance, is_pickle_message_instance, is_iris_object_instance
15
-
16
- def serialize_pickle_message(message: Any) -> iris.cls:
17
- """Converts a python dataclass message into an iris iop.message.
18
-
19
- Args:
20
- message: The message to serialize, an instance of a class that is a subclass of Message.
21
-
22
- Returns:
23
- The message in json format.
24
- """
25
- pickle_string = codecs.encode(pickle.dumps(message), "base64").decode()
26
- module = message.__class__.__module__
27
- classname = message.__class__.__name__
28
-
29
- msg = iris.cls('IOP.PickleMessage')._New()
30
- msg.classname = module + "." + classname
31
-
32
- stream = _Utils.string_to_stream(pickle_string)
33
- msg.jstr = stream
34
-
35
- return msg
36
-
37
- def dispatch_serializer(message: Any) -> Any:
38
- """Serializes the message based on its type.
39
-
40
- Args:
41
- message: The message to serialize
42
-
43
- Returns:
44
- The serialized message
45
-
46
- Raises:
47
- TypeError: If message is invalid type
48
- """
49
- if message is not None:
50
- if is_message_instance(message):
51
- return serialize_message(message)
52
- elif is_pickle_message_instance(message):
53
- return serialize_pickle_message(message)
54
- elif is_iris_object_instance(message):
55
- return message
56
-
57
- if message == "" or message is None:
58
- return message
59
-
60
- raise TypeError("The message must be an instance of a class that is a subclass of Message or IRISObject %Persistent class.")
61
-
62
- def serialize_message(message: Any) -> iris.cls:
63
- """Converts a python dataclass message into an iris iop.message.
64
-
65
- Args:
66
- message: The message to serialize, an instance of a class that is a subclass of Message.
67
-
68
- Returns:
69
- The message in json format.
70
- """
71
- json_string = json.dumps(message, cls=IrisJSONEncoder, ensure_ascii=False)
72
- module = message.__class__.__module__
73
- classname = message.__class__.__name__
74
-
75
- msg = iris.cls('IOP.Message')._New()
76
- msg.classname = module + "." + classname
77
-
78
- if hasattr(msg, 'buffer') and len(json_string) > msg.buffer:
79
- msg.json = _Utils.string_to_stream(json_string, msg.buffer)
80
- else:
81
- msg.json = json_string
82
-
83
- return msg
84
-
85
- def deserialize_pickle_message(serial: iris.cls) -> Any:
86
- """Converts an iris iop.message into a python dataclass message.
87
-
88
- Args:
89
- serial: The serialized message
90
-
91
- Returns:
92
- The deserialized message
93
- """
94
- string = _Utils.stream_to_string(serial.jstr)
95
- msg = pickle.loads(codecs.decode(string.encode(), "base64"))
96
- return msg
97
-
98
- def dispatch_deserializer(serial: Any) -> Any:
99
- """Deserializes the message based on its type.
100
-
101
- Args:
102
- serial: The serialized message
103
-
104
- Returns:
105
- The deserialized message
106
- """
107
- if (
108
- serial is not None
109
- and type(serial).__module__.startswith('iris')
110
- and (
111
- serial._IsA("IOP.Message")
112
- or serial._IsA("Grongier.PEX.Message")
113
- )
114
- ):
115
- return deserialize_message(serial)
116
- elif (
117
- serial is not None
118
- and type(serial).__module__.startswith('iris')
119
- and (
120
- serial._IsA("IOP.PickleMessage")
121
- or serial._IsA("Grongier.PEX.PickleMessage")
122
- )
123
- ):
124
- return deserialize_pickle_message(serial)
125
- else:
126
- return serial
127
-
128
- def deserialize_message(serial: iris.cls) -> Any:
129
- """Converts an iris iop.message into a python dataclass message.
130
-
131
- Args:
132
- serial: The serialized message
133
-
134
- Returns:
135
- The deserialized message
136
- """
137
- if (serial.classname is None):
138
- raise ValueError("JSON message malformed, must include classname")
139
- classname = serial.classname
140
-
141
- j = classname.rindex(".")
142
- if (j <= 0):
143
- raise ValueError("Classname must include a module: " + classname)
144
- try:
145
- module = importlib.import_module(classname[:j])
146
- msg = getattr(module, classname[j+1:])
147
- except Exception:
148
- raise ImportError("Class not found: " + classname)
149
-
150
- string = ""
151
- if (serial.type == 'Stream'):
152
- string = _Utils.stream_to_string(serial.json)
153
- else:
154
- string = serial.json
155
-
156
- jdict = json.loads(string, cls=IrisJSONDecoder)
157
- return dataclass_from_dict(msg, jdict)
158
-
159
- def dataclass_from_dict(klass: Type, dikt: Dict) -> Any:
160
- """Converts a dictionary to a dataclass instance.
161
-
162
- Args:
163
- klass: The dataclass to convert to
164
- dikt: The dictionary to convert to a dataclass
165
-
166
- Returns:
167
- A dataclass object with the fields of the dataclass and the fields of the dictionary.
168
- """
169
- if issubclass(klass, BaseModel):
170
- return klass.model_validate(dikt)
171
- else:
172
- ret = from_dict(klass, dikt, Config(check_types=False))
173
-
174
- try:
175
- fieldtypes = klass.__annotations__
176
- except Exception as e:
177
- fieldtypes = []
178
-
179
- for key, val in dikt.items():
180
- if key not in fieldtypes:
181
- setattr(ret, key, val)
182
- return ret
183
-
184
- def dispach_message(host, request: Any) -> Any:
185
- """Dispatches the message to the appropriate method.
186
-
187
- Args:
188
- request: The request object
189
-
190
- Returns:
191
- The response object
192
- """
193
- call = 'on_message'
194
-
195
- module = request.__class__.__module__
196
- classname = request.__class__.__name__
197
-
198
- for msg, method in host.DISPATCH:
199
- if msg == module + "." + classname:
200
- call = method
201
-
202
- return getattr(host, call)(request)
203
-
204
- def create_dispatch(host) -> None:
205
- """Creates a list of tuples, where each tuple contains the name of a class and the name of a method
206
- that takes an instance of that class as its only argument.
207
- """
208
- if len(host.DISPATCH) == 0:
209
- method_list = [func for func in dir(host) if callable(getattr(host, func)) and not func.startswith("_")]
210
- for method in method_list:
211
- try:
212
- param = signature(getattr(host, method)).parameters
213
- except ValueError as e:
214
- param = ''
215
- if (len(param) == 1):
216
- annotation = str(param[list(param)[0]].annotation)
217
- i = annotation.find("'")
218
- j = annotation.rfind("'")
219
- if j == -1:
220
- j = None
221
- classname = annotation[i+1:j]
222
- host.DISPATCH.append((classname, method))
223
- return