iris-pex-embedded-python 3.2.1b3__tar.gz → 3.3.0__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 (151) hide show
  1. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/PKG-INFO +1 -1
  2. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/pyproject.toml +1 -1
  3. iris_pex_embedded_python-3.3.0/src/iop/_async_request.py +62 -0
  4. iris_pex_embedded_python-3.3.0/src/iop/_business_host.py +222 -0
  5. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_business_operation.py +6 -4
  6. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_business_process.py +12 -10
  7. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_business_service.py +3 -2
  8. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_cli.py +4 -2
  9. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_common.py +15 -80
  10. iris_pex_embedded_python-3.3.0/src/iop/_decorators.py +48 -0
  11. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_director.py +4 -3
  12. iris_pex_embedded_python-3.3.0/src/iop/_dispatch.py +219 -0
  13. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_log_manager.py +20 -12
  14. iris_pex_embedded_python-3.3.0/src/iop/_message_validator.py +41 -0
  15. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_private_session_duplex.py +11 -10
  16. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_private_session_process.py +7 -7
  17. iris_pex_embedded_python-3.3.0/src/iop/_serialization.py +196 -0
  18. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_utils.py +27 -19
  19. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Common.cls +6 -1
  20. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Message.cls +1 -0
  21. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/PKG-INFO +1 -1
  22. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +5 -0
  23. iris_pex_embedded_python-3.2.1b3/src/iop/_business_host.py +0 -675
  24. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/LICENSE +0 -0
  25. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/README.md +0 -0
  26. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/setup.cfg +0 -0
  27. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/setup.py +0 -0
  28. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/__init__.py +0 -0
  29. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
  30. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
  31. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
  32. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
  33. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
  34. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
  35. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
  36. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
  37. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
  38. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
  39. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
  40. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
  41. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
  42. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
  43. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
  44. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
  45. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
  46. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
  47. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
  48. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
  49. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/__init__.py +0 -0
  50. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/__main__.py +0 -0
  51. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/_business_host.py +0 -0
  52. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/_cli.py +0 -0
  53. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/_common.py +0 -0
  54. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/_director.py +0 -0
  55. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/_utils.py +0 -0
  56. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/grongier/pex/wsgi/handlers.py +0 -0
  57. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_BufferReader.py +0 -0
  58. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_BufferWriter.py +0 -0
  59. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_ConnectionInformation.py +0 -0
  60. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_ConnectionParameters.py +0 -0
  61. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_Constant.py +0 -0
  62. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_DBList.py +0 -0
  63. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_Device.py +0 -0
  64. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_GatewayContext.py +0 -0
  65. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_GatewayException.py +0 -0
  66. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_GatewayUtility.py +0 -0
  67. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRIS.py +0 -0
  68. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISConnection.py +0 -0
  69. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISEmbedded.py +0 -0
  70. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
  71. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
  72. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISIterator.py +0 -0
  73. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISList.py +0 -0
  74. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISNative.py +0 -0
  75. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISOREF.py +0 -0
  76. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISObject.py +0 -0
  77. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_IRISReference.py +0 -0
  78. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_InStream.py +0 -0
  79. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_LegacyIterator.py +0 -0
  80. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_ListItem.py +0 -0
  81. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_ListReader.py +0 -0
  82. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_ListWriter.py +0 -0
  83. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_LogFileStream.py +0 -0
  84. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_MessageHeader.py +0 -0
  85. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_OutStream.py +0 -0
  86. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_PrintStream.py +0 -0
  87. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_PythonGateway.py +0 -0
  88. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
  89. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/__init__.py +0 -0
  90. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/__main__.py +0 -0
  91. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_Column.py +0 -0
  92. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_DBAPI.py +0 -0
  93. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
  94. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
  95. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_Message.py +0 -0
  96. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
  97. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
  98. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
  99. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
  100. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/__init__.py +0 -0
  101. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
  102. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
  103. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
  104. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
  105. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
  106. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
  107. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
  108. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
  109. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_BusinessService.py +0 -0
  110. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_Common.py +0 -0
  111. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_Director.py +0 -0
  112. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
  113. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
  114. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
  115. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
  116. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
  117. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_Message.py +0 -0
  118. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
  119. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/intersystems_iris/pex/__init__.py +0 -0
  120. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/__init__.py +0 -0
  121. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/__main__.py +0 -0
  122. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_inbound_adapter.py +0 -0
  123. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_message.py +0 -0
  124. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_outbound_adapter.py +0 -0
  125. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/_pickle_message.py +0 -0
  126. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
  127. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
  128. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/BusinessService.cls +0 -0
  129. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Director.cls +0 -0
  130. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
  131. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
  132. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
  133. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
  134. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
  135. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
  136. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PickleMessage.cls +0 -0
  137. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
  138. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
  139. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
  140. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
  141. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
  142. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
  143. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Test.cls +0 -0
  144. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/cls/IOP/Utils.cls +0 -0
  145. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iop/wsgi/handlers.py +0 -0
  146. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
  147. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
  148. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
  149. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
  150. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/src/irisnative/_IRISNative.py +0 -0
  151. {iris_pex_embedded_python-3.2.1b3 → iris_pex_embedded_python-3.3.0}/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.2.1b3
3
+ Version: 3.3.0
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.2.1b3"
6
+ version = "3.3.0"
7
7
  description = "Iris Interoperability based on Embedded Python"
8
8
  readme = "README.md"
9
9
  authors = [
@@ -0,0 +1,62 @@
1
+ import asyncio
2
+ import iris
3
+ from typing import Any, Optional, Union
4
+ from iop._dispatch import dispatch_deserializer, dispatch_serializer
5
+ from iop._message import _Message as Message
6
+
7
+ class AsyncRequest(asyncio.Future):
8
+ _message_header_id: int = 0
9
+ _queue_name: str = ""
10
+ _end_time: int = 0
11
+ _response: Any = None
12
+ _done: bool = False
13
+
14
+ def __init__(self, target: str, request: Union[Message, Any],
15
+ timeout: int = -1, description: Optional[str] = None, host: Optional[Any] = None) -> None:
16
+ super().__init__()
17
+ self.target = target
18
+ self.request = request
19
+ self.timeout = timeout
20
+ self.description = description
21
+ self.host = host
22
+ self._iris_handle = host.iris_handle
23
+ asyncio.create_task(self.send())
24
+
25
+ async def send(self) -> None:
26
+ # init parameters
27
+ message_header_id = iris.ref()
28
+ queue_name = iris.ref()
29
+ end_time = iris.ref()
30
+ request = dispatch_serializer(self.request)
31
+
32
+ # send request
33
+ self._iris_handle.dispatchSendRequestAsyncNG(
34
+ self.target, request, self.timeout, self.description,
35
+ message_header_id, queue_name, end_time)
36
+
37
+ # get byref values
38
+ self._message_header_id = message_header_id.value
39
+ self._queue_name = queue_name.value
40
+ self._end_time = end_time.value
41
+
42
+ while not self._done:
43
+ await asyncio.sleep(0.1)
44
+ self.is_done()
45
+
46
+ self.set_result(self._response)
47
+
48
+ def is_done(self) -> None:
49
+ response = iris.ref()
50
+ status = self._iris_handle.dispatchIsRequestDone(self.timeout, self._end_time,
51
+ self._queue_name, self._message_header_id,
52
+ response)
53
+
54
+ self._response = dispatch_deserializer(response.value)
55
+
56
+ if status == 2: # message found
57
+ self._done = True
58
+ elif status == 1: # message not found
59
+ pass
60
+ else:
61
+ self._done = True
62
+ self.set_exception(RuntimeError(iris.system.Status.GetOneStatusText(status)))
@@ -0,0 +1,222 @@
1
+ from inspect import getsource
2
+ from typing import Any,List, Optional, Tuple, Union
3
+
4
+ import iris
5
+
6
+ from iop._common import _Common
7
+ from iop._message import _Message as Message
8
+ from iop._decorators import input_serializer_param, output_deserializer
9
+ from iop._dispatch import dispatch_serializer, dispatch_deserializer
10
+ from iop._async_request import AsyncRequest
11
+
12
+ class _BusinessHost(_Common):
13
+ """Base class for business components that defines common methods.
14
+
15
+ This is a superclass for BusinessService, BusinessProcess, and BusinessOperation that
16
+ defines common functionality like message serialization/deserialization and request handling.
17
+ """
18
+
19
+ buffer: int = 64000
20
+ DISPATCH: List[Tuple[str, str]] = []
21
+
22
+ @input_serializer_param(1, 'request')
23
+ @output_deserializer
24
+ def send_request_sync(self, target: str, request: Union[Message, Any],
25
+ timeout: int = -1, description: Optional[str] = None) -> Any:
26
+ """Send message synchronously to target component.
27
+
28
+ Args:
29
+ target: Name of target component
30
+ request: Message to send
31
+ timeout: Timeout in seconds, -1 means wait forever
32
+ description: Optional description for logging
33
+
34
+ Returns:
35
+ Response from target component
36
+
37
+ Raises:
38
+ TypeError: If request is invalid type
39
+ """
40
+ return self.iris_handle.dispatchSendRequestSync(target, request, timeout, description)
41
+
42
+ @input_serializer_param(1, 'request')
43
+ def send_request_async(self, target: str, request: Union[Message, Any],
44
+ description: Optional[str] = None) -> None:
45
+ """Send message asynchronously to target component.
46
+
47
+ Args:
48
+ target: Name of target component
49
+ request: Message to send
50
+ description: Optional description for logging
51
+
52
+ Raises:
53
+ TypeError: If request is invalid type
54
+ """
55
+ return self.iris_handle.dispatchSendRequestAsync(target, request, description)
56
+
57
+ async def send_request_async_ng(self, target: str, request: Union[Message, Any],
58
+ timeout: int = -1, description: Optional[str] = None) -> Any:
59
+ """Send message asynchronously to target component with asyncio.
60
+
61
+ Args:
62
+ target: Name of target component
63
+ request: Message to send
64
+ timeout: Timeout in seconds, -1 means wait forever
65
+ description: Optional description for logging
66
+
67
+ Returns:
68
+ Response from target component
69
+ """
70
+ return await AsyncRequest(target, request, timeout, description, self)
71
+
72
+ def send_multi_request_sync(self, target_request: List[Tuple[str, Union[Message, Any]]],
73
+ timeout: int = -1, description: Optional[str] = None) -> List[Tuple[str, Union[Message, Any], Any, int]]:
74
+ """Send multiple messages synchronously to target components.
75
+
76
+ Args:
77
+ target_request: List of tuples (target, request) to send
78
+ timeout: Timeout in seconds, -1 means wait forever
79
+ description: Optional description for logging
80
+
81
+ Returns:
82
+ List of tuples (target, request, response, status)
83
+
84
+ Raises:
85
+ TypeError: If target_request is not a list of tuples
86
+ ValueError: If target_request is empty
87
+ """
88
+ self._validate_target_request(target_request)
89
+
90
+ call_list = [self._create_call_structure(target, request)
91
+ for target, request in target_request]
92
+
93
+ response_list = self.iris_handle.dispatchSendRequestSyncMultiple(call_list, timeout)
94
+
95
+ return [(target_request[i][0],
96
+ target_request[i][1],
97
+ dispatch_deserializer(response_list[i].Response),
98
+ response_list[i].ResponseCode)
99
+ for i in range(len(target_request))]
100
+
101
+ def _validate_target_request(self, target_request: List[Tuple[str, Union[Message, Any]]]) -> None:
102
+ """Validate the target_request parameter structure."""
103
+ if not isinstance(target_request, list):
104
+ raise TypeError("target_request must be a list")
105
+ if not target_request:
106
+ raise ValueError("target_request must not be empty")
107
+ if not all(isinstance(item, tuple) and len(item) == 2 for item in target_request):
108
+ raise TypeError("target_request must contain tuples of (target, request)")
109
+
110
+ def _create_call_structure(self, target: str, request: Union[Message, Any]) -> Any:
111
+ """Create an Ens.CallStructure object for the request."""
112
+ call = iris.cls("Ens.CallStructure")._New()
113
+ call.TargetDispatchName = target
114
+ call.Request = dispatch_serializer(request)
115
+ return call
116
+
117
+ @staticmethod
118
+ def OnGetConnections() -> Optional[List[str]]:
119
+ """The OnGetConnections() method returns all of the targets of any SendRequestSync or SendRequestAsync
120
+ calls for the class. Implement this method to allow connections between components to show up in
121
+ the interoperability UI.
122
+
123
+ Returns:
124
+ An IRISList containing all targets for this class. Default is None.
125
+ """
126
+ return None
127
+
128
+ def SendRequestSync(self, target: str, request: Union[Message, Any],
129
+ timeout: int = -1, description: Optional[str] = None) -> Any:
130
+ """DEPRECATED: use send_request_sync.
131
+
132
+ Args:
133
+ target: The target of the request
134
+ request: The request to send
135
+ timeout: The timeout in seconds, -1 means wait forever
136
+ description: A string that describes the request
137
+
138
+ Returns:
139
+ The response from the target component
140
+ """
141
+ return self.send_request_sync(target, request, timeout, description)
142
+
143
+ def SendRequestAsync(self, target: str, request: Union[Message, Any],
144
+ description: Optional[str] = None) -> None:
145
+ """DEPRECATED: use send_request_async.
146
+
147
+ Args:
148
+ target: The target of the request
149
+ request: The request to send
150
+ description: A string that describes the request
151
+ """
152
+ return self.send_request_async(target, request, description)
153
+
154
+ @staticmethod
155
+ def getAdapterType() -> Optional[str]:
156
+ """DEPRECATED: use get_adapter_type.
157
+
158
+ Returns:
159
+ Name of the registered Adapter
160
+ """
161
+ return
162
+
163
+ @staticmethod
164
+ def get_adapter_type() -> Optional[str]:
165
+ """Returns the name of the registered Adapter.
166
+
167
+ Returns:
168
+ Name of the registered Adapter
169
+ """
170
+ return
171
+
172
+ def on_get_connections(self) -> List[str]:
173
+ """The OnGetConnections() method returns all of the targets of any SendRequestSync or SendRequestAsync
174
+ calls for the class. Implement this method to allow connections between components to show up in
175
+ the interoperability UI.
176
+
177
+ Returns:
178
+ A list containing all targets for this class.
179
+ """
180
+ ## Parse the class code to find all invocations of send_request_sync and send_request_async
181
+ ## and return the targets
182
+ targer_list = []
183
+ # get the source code of the class
184
+ source = getsource(self.__class__)
185
+ # find all invocations of send_request_sync and send_request_async
186
+ for method in ['send_request_sync', 'send_request_async', 'SendRequestSync', 'SendRequestAsync']:
187
+ i = source.find(method)
188
+ while i != -1:
189
+ j = source.find("(", i)
190
+ if j != -1:
191
+ k = source.find(",", j)
192
+ if k != -1:
193
+ target = source[j+1:k]
194
+ if target.find("=") != -1:
195
+ # it's a keyword argument, remove the keyword
196
+ target = target[target.find("=")+1:].strip()
197
+ if target not in targer_list:
198
+ targer_list.append(target)
199
+ i = source.find(method, i+1)
200
+
201
+ for target in targer_list:
202
+ # if target is a string, remove the quotes
203
+ if target[0] == "'" and target[-1] == "'":
204
+ targer_list[targer_list.index(target)] = target[1:-1]
205
+ elif target[0] == '"' and target[-1] == '"':
206
+ targer_list[targer_list.index(target)] = target[1:-1]
207
+ # if target is a variable, try to find the value of the variable
208
+ else:
209
+ self.on_init()
210
+ try:
211
+ if target.find("self.") != -1:
212
+ # it's a class variable
213
+ targer_list[targer_list.index(target)] = getattr(self, target[target.find(".")+1:])
214
+ elif target.find(".") != -1:
215
+ # it's a class variable
216
+ targer_list[targer_list.index(target)] = getattr(getattr(self, target[:target.find(".")]), target[target.find(".")+1:])
217
+ else:
218
+ targer_list[targer_list.index(target)] = getattr(self, target)
219
+ except Exception as e:
220
+ pass
221
+
222
+ return targer_list
@@ -1,6 +1,8 @@
1
1
  import importlib
2
2
  from typing import Any, List, Optional, Union, Tuple
3
3
  from iop._business_host import _BusinessHost
4
+ from iop._decorators import input_deserializer, output_serializer, input_serializer, output_deserializer
5
+ from iop._dispatch import create_dispatch, dispach_message
4
6
 
5
7
  class _BusinessOperation(_BusinessHost):
6
8
  """Business operation component that handles outbound communication.
@@ -45,15 +47,15 @@ class _BusinessOperation(_BusinessHost):
45
47
 
46
48
  def _dispatch_on_init(self, host_object: Any) -> None:
47
49
  """For internal use only."""
48
- self._create_dispatch()
50
+ create_dispatch(self)
49
51
  self.on_init()
50
52
  return
51
53
 
52
- @_BusinessHost.input_deserialzer
53
- @_BusinessHost.output_serialzer
54
+ @input_deserializer
55
+ @output_serializer
54
56
  def _dispatch_on_message(self, request: Any) -> Any:
55
57
  """For internal use only."""
56
- return self._dispach_message(request)
58
+ return dispach_message(self,request)
57
59
 
58
60
  def OnMessage(self, request: Any) -> Any:
59
61
  """DEPRECATED : use on_message
@@ -1,5 +1,7 @@
1
1
  from typing import Any, List, Optional, Union
2
2
  from iop._business_host import _BusinessHost
3
+ from iop._decorators import input_deserializer, input_serializer_param, output_serializer, input_serializer, output_deserializer
4
+ from iop._dispatch import create_dispatch, dispach_message
3
5
 
4
6
  class _BusinessProcess(_BusinessHost):
5
7
  """Business process component that contains routing and transformation logic.
@@ -60,7 +62,7 @@ class _BusinessProcess(_BusinessHost):
60
62
  """
61
63
  return self.OnComplete(request, response)
62
64
 
63
- @_BusinessHost.input_serialzer_param(0,'response')
65
+ @input_serializer_param(0,'response')
64
66
  def reply(self, response: Any) -> None:
65
67
  """Send the specified response to the production component that sent the initial request.
66
68
 
@@ -69,7 +71,7 @@ class _BusinessProcess(_BusinessHost):
69
71
  """
70
72
  return self.iris_handle.dispatchReply(response)
71
73
 
72
- @_BusinessHost.input_serialzer_param(1,'request')
74
+ @input_serializer_param(1,'request')
73
75
  def send_request_async(self, target: str, request: Any, response_required: bool=True, completion_key: Optional[str]=None, description: Optional[str]=None) -> None:
74
76
  """Send the specified message to the target business process or business operation asynchronously.
75
77
 
@@ -139,7 +141,7 @@ class _BusinessProcess(_BusinessHost):
139
141
  def _dispatch_on_init(self, host_object: Any) -> None:
140
142
  """For internal use only."""
141
143
  self._restore_persistent_properties(host_object)
142
- self._create_dispatch()
144
+ create_dispatch(self)
143
145
  self.on_init()
144
146
  self._save_persistent_properties(host_object)
145
147
  return
@@ -151,17 +153,17 @@ class _BusinessProcess(_BusinessHost):
151
153
  self._save_persistent_properties(host_object)
152
154
  return
153
155
 
154
- @_BusinessHost.input_deserialzer
155
- @_BusinessHost.output_serialzer
156
+ @input_deserializer
157
+ @output_serializer
156
158
  def _dispatch_on_request(self, host_object: Any, request: Any) -> Any:
157
159
  """For internal use only."""
158
160
  self._restore_persistent_properties(host_object)
159
- return_object = self._dispach_message(request)
161
+ return_object = dispach_message(self,request)
160
162
  self._save_persistent_properties(host_object)
161
163
  return return_object
162
164
 
163
- @_BusinessHost.input_deserialzer
164
- @_BusinessHost.output_serialzer
165
+ @input_deserializer
166
+ @output_serializer
165
167
  def _dispatch_on_response(self, host_object: Any, request: Any, response: Any, call_request: Any, call_response: Any, completion_key: str) -> Any:
166
168
  """For internal use only."""
167
169
  self._restore_persistent_properties(host_object)
@@ -169,8 +171,8 @@ class _BusinessProcess(_BusinessHost):
169
171
  self._save_persistent_properties(host_object)
170
172
  return return_object
171
173
 
172
- @_BusinessHost.input_deserialzer
173
- @_BusinessHost.output_serialzer
174
+ @input_deserializer
175
+ @output_serializer
174
176
  def _dispatch_on_complete(self, host_object: Any, request: Any, response: Any) -> Any:
175
177
  """For internal use only."""
176
178
  self._restore_persistent_properties(host_object)
@@ -1,5 +1,6 @@
1
1
  import importlib
2
2
  from iop._business_host import _BusinessHost
3
+ from iop._decorators import input_deserializer, output_serializer, input_serializer, output_deserializer
3
4
 
4
5
  class _BusinessService(_BusinessHost):
5
6
  """ This class is responsible for receiving the data from external system and sending it to business processes or business operations in the production.
@@ -36,8 +37,8 @@ class _BusinessService(_BusinessHost):
36
37
  self.Adapter = self.adapter = handle_partner
37
38
  return
38
39
 
39
- @_BusinessHost.input_deserialzer
40
- @_BusinessHost.output_serialzer
40
+ @input_deserializer
41
+ @output_serializer
41
42
  def _dispatch_on_process_input(self, request):
42
43
  """ For internal use only. """
43
44
  return self.on_process_input(request)
@@ -143,8 +143,10 @@ class Command:
143
143
  _Utils.migrate(migrate_path)
144
144
 
145
145
  def _handle_log(self) -> None:
146
- log_name = _Director.get_default_production() if self.args.log == 'not_set' else self.args.log
147
- print(_Director.get_production_log(log_name))
146
+ if self.args.log == 'not_set':
147
+ print(_Director.log_production())
148
+ else:
149
+ print(_Director.log_production_top(self.args.log))
148
150
 
149
151
  def _handle_init(self) -> None:
150
152
  _Utils.setup(None)
@@ -1,11 +1,11 @@
1
1
  import abc
2
- import dataclasses
3
2
  import inspect
4
- import iris
5
3
  import traceback
6
- from typing import Any, ClassVar, Dict, List, Optional, Tuple, Type
7
- from iop._log_manager import LogManager
8
- import logging
4
+ from typing import Any, ClassVar, List, Optional, Tuple
5
+
6
+ import iris
7
+
8
+ from iop._log_manager import LogManager, logging
9
9
 
10
10
  class _Common(metaclass=abc.ABCMeta):
11
11
  """Base class that defines common methods for all component types.
@@ -19,100 +19,34 @@ class _Common(metaclass=abc.ABCMeta):
19
19
  iris_handle: Any = None
20
20
  log_to_console: bool = False
21
21
 
22
+ # Lifecycle methods
22
23
  def on_init(self) -> None:
23
- """Initialize component when started.
24
-
25
- Called when component starts. Use to initialize required structures.
26
- """
27
- return self.OnInit()
24
+ """Initialize component when started."""
25
+ pass
28
26
 
29
27
  def on_tear_down(self) -> None:
30
- """Clean up component before termination.
31
-
32
- Called before component terminates. Use to free resources.
33
- """
34
- return self.OnTearDown()
28
+ """Clean up component before termination."""
29
+ pass
35
30
 
36
31
  def on_connected(self) -> None:
37
- """Handle component connection/reconnection.
38
-
39
- Called when component connects or reconnects after disconnection.
40
- Use to initialize connection-dependent structures.
41
- """
42
- return self.OnConnected()
32
+ """Handle component connection/reconnection."""
33
+ pass
43
34
 
35
+ # Internal dispatch methods
44
36
  def _dispatch_on_connected(self, host_object: Any) -> None:
45
- """Internal dispatch for connection handling."""
46
37
  self.on_connected()
47
- return
48
38
 
49
39
  def _dispatch_on_init(self, host_object: Any) -> None:
50
- """Internal dispatch for initialization."""
51
40
  self.on_init()
52
- return
53
41
 
54
42
  def _dispatch_on_tear_down(self, host_object: Any) -> None:
55
- """Internal dispatch for teardown."""
56
43
  self.on_tear_down()
57
- return
58
44
 
59
45
  def _set_iris_handles(self, handle_current: Any, handle_partner: Any) -> None:
60
46
  """Internal method to set IRIS handles."""
61
47
  pass
62
48
 
63
- @classmethod
64
- def _is_message_instance(cls, obj: Any) -> bool:
65
- """Check if object is a valid Message instance.
66
-
67
- Args:
68
- obj: Object to check
69
-
70
- Returns:
71
- True if object is a Message instance
72
-
73
- Raises:
74
- TypeError: If object is Message class but not a dataclass
75
- """
76
- if cls._is_message_class(type(obj)):
77
- if not dataclasses.is_dataclass(obj):
78
- raise TypeError(f"{type(obj).__module__}.{type(obj).__qualname__} must be a dataclass")
79
- return True
80
- return False
81
-
82
- @classmethod
83
- def _is_pickle_message_instance(cls, obj: Any) -> bool:
84
- """Check if object is a PickleMessage instance."""
85
- if cls._is_pickel_message_class(type(obj)):
86
- return True
87
- return False
88
-
89
- @classmethod
90
- def _is_iris_object_instance(cls, obj: Any) -> bool:
91
- """Check if object is an IRIS persistent object."""
92
- if (obj is not None and type(obj).__module__.find('iris') == 0) and obj._IsA("%Persistent"):
93
- return True
94
- return False
95
-
96
- @classmethod
97
- def _is_message_class(cls, klass: Type) -> bool:
98
- name = klass.__module__ + '.' + klass.__qualname__
99
- if name == "iop.Message" or name == "grongier.pex.Message":
100
- return True
101
- for c in klass.__bases__:
102
- if cls._is_message_class(c):
103
- return True
104
- return False
105
-
106
- @classmethod
107
- def _is_pickel_message_class(cls, klass: Type) -> bool:
108
- name = klass.__module__ + '.' + klass.__qualname__
109
- if name == "iop.PickleMessage" or name == "grongier.pex.PickleMessage":
110
- return True
111
- for c in klass.__bases__:
112
- if cls._is_pickel_message_class(c):
113
- return True
114
- return False
115
-
49
+ # Component information methods
116
50
  @classmethod
117
51
  def _get_info(cls) -> List[str]:
118
52
  """Get component configuration information.
@@ -239,6 +173,7 @@ class _Common(metaclass=abc.ABCMeta):
239
173
  pass
240
174
  return ret
241
175
 
176
+ # Logging methods
242
177
  def _log(self) -> Tuple[str, Optional[str]]:
243
178
  """Get class and method name for logging.
244
179
 
@@ -0,0 +1,48 @@
1
+ from functools import wraps
2
+ from typing import Any, Callable
3
+ from iop._dispatch import dispatch_deserializer, dispatch_serializer
4
+
5
+ def input_serializer(fonction: Callable) -> Callable:
6
+ """Decorator that serializes all input arguments."""
7
+ def _dispatch_serializer(self, *params: Any, **param2: Any) -> Any:
8
+ serialized = [dispatch_serializer(param) for param in params]
9
+ param2 = {key: dispatch_serializer(value) for key, value in param2.items()}
10
+ return fonction(self, *serialized, **param2)
11
+ return _dispatch_serializer
12
+
13
+ def input_serializer_param(position: int, name: str) -> Callable:
14
+ """Decorator that serializes specific parameter by position or name."""
15
+ def _input_serializer_param(fonction: Callable) -> Callable:
16
+ @wraps(fonction)
17
+ def _dispatch_serializer(self, *params: Any, **param2: Any) -> Any:
18
+ serialized = [
19
+ dispatch_serializer(param) if i == position else param
20
+ for i, param in enumerate(params)
21
+ ]
22
+ param2 = {
23
+ key: dispatch_serializer(value) if key == name else value
24
+ for key, value in param2.items()
25
+ }
26
+ return fonction(self, *serialized, **param2)
27
+ return _dispatch_serializer
28
+ return _input_serializer_param
29
+
30
+ def output_deserializer(fonction: Callable) -> Callable:
31
+ """Decorator that deserializes function output."""
32
+ def _dispatch_deserializer(self, *params: Any, **param2: Any) -> Any:
33
+ return dispatch_deserializer(fonction(self, *params, **param2))
34
+ return _dispatch_deserializer
35
+
36
+ def input_deserializer(fonction: Callable) -> Callable:
37
+ """Decorator that deserializes all input arguments."""
38
+ def _dispatch_deserializer(self, *params: Any, **param2: Any) -> Any:
39
+ serialized = [dispatch_deserializer(param) for param in params]
40
+ param2 = {key: dispatch_deserializer(value) for key, value in param2.items()}
41
+ return fonction(self, *serialized, **param2)
42
+ return _dispatch_deserializer
43
+
44
+ def output_serializer(fonction: Callable) -> Callable:
45
+ """Decorator that serializes function output."""
46
+ def _dispatch_serializer(self, *params: Any, **param2: Any) -> Any:
47
+ return dispatch_serializer(fonction(self, *params, **param2))
48
+ return _dispatch_serializer
@@ -7,6 +7,7 @@ import signal
7
7
  from dataclasses import dataclass
8
8
 
9
9
  from iop._business_host import _BusinessHost
10
+ from iop._dispatch import dispatch_deserializer, dispatch_serializer
10
11
  from iop._utils import _Utils
11
12
 
12
13
  class _Director():
@@ -221,7 +222,7 @@ class _Director():
221
222
  await asyncio.sleep(1)
222
223
 
223
224
  @staticmethod
224
- def log_production_top(top):
225
+ def log_production_top(top=10):
225
226
  """
226
227
  Log the top N logs of the production
227
228
  Parameters:
@@ -278,10 +279,10 @@ class _Director():
278
279
  message.json = _Utils.string_to_stream("{}")
279
280
  # serialize the message
280
281
  business_host = _BusinessHost()
281
- serial_message = business_host._dispatch_serializer(message)
282
+ serial_message = dispatch_serializer(message)
282
283
  response = iris.cls('IOP.Utils').dispatchTestComponent(target,serial_message)
283
284
  try:
284
- deserialized_response = business_host._dispatch_deserializer(response)
285
+ deserialized_response = dispatch_deserializer(response)
285
286
  except ImportError as e:
286
287
  # can't import the class, return the string
287
288
  deserialized_response = f'{response.classname} : {_Utils.stream_to_string(response.jstr)}'