iris-pex-embedded-python 3.1.0__tar.gz → 3.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of iris-pex-embedded-python might be problematic. Click here for more details.

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