ratio1 3.4.91__tar.gz → 3.4.93__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.
Files changed (222) hide show
  1. {ratio1-3.4.91 → ratio1-3.4.93}/PKG-INFO +1 -1
  2. {ratio1-3.4.91 → ratio1-3.4.93}/pyproject.toml +1 -1
  3. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/_ver.py +1 -1
  4. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/generic_session.py +180 -0
  5. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/evm.py +35 -0
  6. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/apps.py +1 -0
  7. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/evm_net.py +13 -0
  8. ratio1-3.4.93/tutorials/ex23_deploy_worker_app.py +114 -0
  9. ratio1-3.4.93/xperimental/_checks/w3_first_closable_job_check.py +22 -0
  10. {ratio1-3.4.91 → ratio1-3.4.93}/.devcontainer/Dockerfile +0 -0
  11. {ratio1-3.4.91 → ratio1-3.4.93}/.devcontainer/devcontainer.json +0 -0
  12. {ratio1-3.4.91 → ratio1-3.4.93}/.gitattributes +0 -0
  13. {ratio1-3.4.91 → ratio1-3.4.93}/.github/workflows/python-publish.yml +0 -0
  14. {ratio1-3.4.91 → ratio1-3.4.93}/.gitignore +0 -0
  15. {ratio1-3.4.91 → ratio1-3.4.93}/.vscode/launch.json +0 -0
  16. {ratio1-3.4.91 → ratio1-3.4.93}/LICENSE +0 -0
  17. {ratio1-3.4.91 → ratio1-3.4.93}/README.md +0 -0
  18. {ratio1-3.4.91 → ratio1-3.4.93}/TODOs.md +0 -0
  19. {ratio1-3.4.91 → ratio1-3.4.93}/__init__.py +0 -0
  20. {ratio1-3.4.91 → ratio1-3.4.93}/r1ctl.MD +0 -0
  21. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/__init__.py +0 -0
  22. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/__init__.py +0 -0
  23. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/distributed_custom_code_presets.py +0 -0
  24. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/instance.py +0 -0
  25. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/payload/__init__.py +0 -0
  26. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/payload/payload.py +0 -0
  27. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/pipeline.py +0 -0
  28. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/plugin_template.py +0 -0
  29. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/responses.py +0 -0
  30. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/transaction.py +0 -0
  31. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/webapp_pipeline.py +0 -0
  32. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base_decentra_object.py +0 -0
  33. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/__init__.py +0 -0
  34. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/base.py +0 -0
  35. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/chain.py +0 -0
  36. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/ec.py +0 -0
  37. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/51.15.142.167.crt +0 -0
  38. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/72.60.187.24.crt +0 -0
  39. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/72.60.81.67.crt +0 -0
  40. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/__init__.py +0 -0
  41. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
  42. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
  43. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
  44. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/README.md +0 -0
  45. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/cli.py +0 -0
  46. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/cli_commands.py +0 -0
  47. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/nodes.py +0 -0
  48. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/oracles.py +0 -0
  49. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/package_update.py +0 -0
  50. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/__init__.py +0 -0
  51. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/base.py +0 -0
  52. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/checker.py +0 -0
  53. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/__init__.py +0 -0
  54. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/amqp_wrapper.py +0 -0
  55. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/base_comm_wrapper.py +0 -0
  56. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/mqtt_wrapper.py +0 -0
  57. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/README.md +0 -0
  58. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/__init__.py +0 -0
  59. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/base.py +0 -0
  60. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/comms.py +0 -0
  61. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/environment.py +0 -0
  62. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/formatter.py +0 -0
  63. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/heartbeat.py +0 -0
  64. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/misc.py +0 -0
  65. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/payload.py +0 -0
  66. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/plugins/deeploy_const.py +0 -0
  67. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/__init__.py +0 -0
  68. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/__init__.py +0 -0
  69. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
  70. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
  71. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
  72. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
  73. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
  74. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
  75. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
  76. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/session/mqtt_session.py +0 -0
  77. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/__init__.py +0 -0
  78. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/base/__init__.py +0 -0
  79. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/base/base_formatter.py +0 -0
  80. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/__init__.py +0 -0
  81. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/a_dummy.py +0 -0
  82. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/aixp1.py +0 -0
  83. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/default.py +0 -0
  84. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/io_formatter_manager.py +0 -0
  85. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/__init__.py +0 -0
  86. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ifps_keygen +0 -0
  87. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
  88. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
  89. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
  90. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
  91. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
  92. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
  93. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
  94. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/r1fs.py +0 -0
  95. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/__init__.py +0 -0
  96. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/base_logger.py +0 -0
  97. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/__init__.py +0 -0
  98. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
  99. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
  100. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
  101. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
  102. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
  103. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
  104. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
  105. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
  106. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
  107. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
  108. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
  109. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
  110. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
  111. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/small_logger.py +0 -0
  112. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/__init__.py +0 -0
  113. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/unix.py +0 -0
  114. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/utils.py +0 -0
  115. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/win32.py +0 -0
  116. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/windows_tz.py +0 -0
  117. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/plugins_manager_mixin.py +0 -0
  118. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/__init__.py +0 -0
  119. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/comm_utils.py +0 -0
  120. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/config.py +0 -0
  121. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/dotenv.py +0 -0
  122. {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
  123. {ratio1-3.4.91 → ratio1-3.4.93}/requirements.txt +0 -0
  124. {ratio1-3.4.91 → ratio1-3.4.93}/template.env +0 -0
  125. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/.example_env +0 -0
  126. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
  127. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
  128. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/_example_pk_sdk.pem +0 -0
  129. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/eth2025/deploy_home_safety.py +0 -0
  130. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
  131. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part1_connect.py +0 -0
  132. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part2_filter.py +0 -0
  133. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part3_adv_filter.py +0 -0
  134. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part1_deploy_webapi.py +0 -0
  135. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part2_deploy_plugin.py +0 -0
  136. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
  137. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
  138. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
  139. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
  140. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
  141. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
  142. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex08_custom_webapi.py +0 -0
  143. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
  144. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex10_telegram_echo_bot.py +0 -0
  145. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
  146. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex12_telegram_smart_bot.py +0 -0
  147. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
  148. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex14_wallets.py +0 -0
  149. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
  150. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
  151. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
  152. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex18_deploy_container_webapi.py +0 -0
  153. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex19_deeploy_container_example.py +0 -0
  154. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
  155. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex21_telegram_community_bot.py +0 -0
  156. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex22_deeploy_custom_code.py +0 -0
  157. {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
  158. {ratio1-3.4.91 → ratio1-3.4.93}/winrun.bat +0 -0
  159. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/README.md +0 -0
  160. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/_show_config_check.py +0 -0
  161. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/cstore_check.py +0 -0
  162. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/dauth_check.py +0 -0
  163. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/keys_check.py +0 -0
  164. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/node_info_check.py +0 -0
  165. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_check.py +0 -0
  166. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_intervals.py +0 -0
  167. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_sign_check.py +0 -0
  168. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/owner_check.py +0 -0
  169. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/payload_check.py +0 -0
  170. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/session_check.py +0 -0
  171. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_auth_check.py +0 -0
  172. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_nodes_licenses.py +0 -0
  173. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_oracles_check.py +0 -0
  174. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_poai_check.py +0 -0
  175. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/whitelist_check.py +0 -0
  176. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/workload_check.py +0 -0
  177. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/ai4e/delete.py +0 -0
  178. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/ai4e/launcher.py +0 -0
  179. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/dates/check_date.py +0 -0
  180. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/debug/close_pipeline.py +0 -0
  181. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example.py +0 -0
  182. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
  183. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
  184. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/checker.py +0 -0
  185. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/checker2.py +0 -0
  186. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/create_request.py +0 -0
  187. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/enc_dec/enc_dec_test.py +0 -0
  188. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/allocate_rewards.py +0 -0
  189. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/balance.py +0 -0
  190. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/eth_sign.py +0 -0
  191. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/info.md +0 -0
  192. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/send.py +0 -0
  193. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/send_many.py +0 -0
  194. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/sign.py +0 -0
  195. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/log.py +0 -0
  196. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/logger/run.py +0 -0
  197. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/lp/lp_checker.py +0 -0
  198. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/multi-enc-dec/multi_test1.py +0 -0
  199. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/multi-enc-dec/multi_test2.py +0 -0
  200. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/netmon/check_netmon.py +0 -0
  201. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/netmon/netmon_data.json +0 -0
  202. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/pipelines/start.py +0 -0
  203. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/pipelines/stop.py +0 -0
  204. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/collect_messages.py +0 -0
  205. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
  206. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
  207. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/simple_payload_checker.py +0 -0
  208. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/test_sign1.py +0 -0
  209. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/test_sign2.py +0 -0
  210. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/test.py +0 -0
  211. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/tokens/get_check.py +0 -0
  212. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/utils/get_documentation.py +0 -0
  213. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/attach_example.py +0 -0
  214. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/ex1.py +0 -0
  215. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/hello.py +0 -0
  216. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/remote_exec.py +0 -0
  217. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/save_images.py +0 -0
  218. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/wl/wl_add.py +0 -0
  219. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
  220. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
  221. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
  222. {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ratio1
3
- Version: 3.4.91
3
+ Version: 3.4.93
4
4
  Summary: `ratio1` or Ration1 SDK is the Python SDK required for client app development for the Ratio1 ecosystem
5
5
  Project-URL: Homepage, https://github.com/Ratio1/ratio1_sdk
6
6
  Project-URL: Bug Tracker, https://github.com/Ratio1/ratio1_sdk/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ratio1"
7
- version = "3.4.91"
7
+ version = "3.4.93"
8
8
  authors = [
9
9
  { name="Andrei Ionut Damian", email="andrei.damian@ratio1.ai" },
10
10
  { name="Cristan Bleotiu", email="cristian.bleotiu@ratio1.ai" },
@@ -1,4 +1,4 @@
1
- __VER__ = "3.4.91"
1
+ __VER__ = "3.4.93"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -3130,6 +3130,186 @@ class GenericSession(BaseDecentrAIObject):
3130
3130
  **kwargs
3131
3131
  )
3132
3132
 
3133
+ def create_worker_web_app(
3134
+ self,
3135
+ *,
3136
+ node,
3137
+ name="Ratio1 Worker Web App",
3138
+ tunnel_engine_enabled=True,
3139
+ tunnel_engine="cloudflare",
3140
+ cloudflare_token=None,
3141
+ ngrok_edge_label=None,
3142
+ extra_debug=False,
3143
+ summary="Ratio1 Worker WebApp created via SDK",
3144
+ description=None,
3145
+ # Worker app specific parameters
3146
+ vcs_data=None,
3147
+ image="node:22",
3148
+ build_and_run_commands=None,
3149
+ cr_data=None,
3150
+ env=None,
3151
+ dynamic_env=None,
3152
+ port=None,
3153
+ endpoint_url=None,
3154
+ endpoint_poll_interval=30,
3155
+ container_resources=None,
3156
+ volumes=None,
3157
+ file_volumes=None,
3158
+ restart_policy="always",
3159
+ image_pull_policy="always",
3160
+ image_poll_interval=300,
3161
+ vcs_poll_interval=60,
3162
+ **kwargs
3163
+ ):
3164
+ """
3165
+ Create a new worker web app on a node.
3166
+
3167
+ Parameters
3168
+ ----------
3169
+
3170
+ node : str
3171
+ Address or Name of the ratio1 Edge Protocol edge node that will handle this web app.
3172
+
3173
+ name : str
3174
+ Name of the worker web app.
3175
+
3176
+ tunnel_engine : str, optional
3177
+ The tunnel engine to use for exposing the web app. Defaults to "cloudflare".
3178
+ It can also be "ngrok" for ngrok tunnel.
3179
+
3180
+ tunnel_engine_enabled : bool, optional
3181
+ If True, will use the specified tunnel engine to expose the web app. Defaults to True.
3182
+
3183
+ ngrok_edge_label : str, optional
3184
+ The label of the edge node that will be used to expose the HTTP server. Defaults to None.
3185
+
3186
+ cloudflare_token : str, optional
3187
+ The Cloudflare token to use for exposing the web app. Defaults to None.
3188
+
3189
+ vcs_data : dict, required
3190
+ Version control system data containing:
3191
+ - PROVIDER: "github" (currently only GitHub is supported)
3192
+ - USERNAME: GitHub username for cloning (if private repo)
3193
+ - TOKEN: GitHub personal access token for cloning (if private repo)
3194
+ - REPO_OWNER: GitHub repository owner (user or org)
3195
+ - REPO_NAME: GitHub repository name
3196
+ - BRANCH: branch to monitor for updates (defaults to "main")
3197
+ - POLL_INTERVAL: seconds between Git commit checks (defaults to 60)
3198
+
3199
+ image : str, optional
3200
+ Docker image to use for the container. Defaults to "node:22".
3201
+
3202
+ build_and_run_commands : list, optional
3203
+ List of commands to run in the container for building and running the app.
3204
+ Defaults to ["npm install", "npm run build", "npm start"].
3205
+
3206
+ cr_data : dict, optional
3207
+ Container registry data containing:
3208
+ - SERVER: container registry URL (defaults to 'docker.io')
3209
+ - USERNAME: registry username
3210
+ - PASSWORD: registry password or token
3211
+
3212
+ env : dict, optional
3213
+ Environment variables for the container.
3214
+
3215
+ dynamic_env : dict, optional
3216
+ Dynamic environment variables for the container.
3217
+
3218
+ port : int, optional
3219
+ Internal container port if it's a web app.
3220
+
3221
+ endpoint_url : str, optional
3222
+ Endpoint to poll for health checks, e.g., "/health" or "/edgenode".
3223
+
3224
+ endpoint_poll_interval : int, optional
3225
+ Seconds between endpoint health checks. Defaults to 30.
3226
+
3227
+ container_resources : dict, optional
3228
+ Container resource limits containing:
3229
+ - cpu: CPU limit (e.g., "0.5" for half a CPU, "1.0" for one CPU core)
3230
+ - gpu: GPU limit (defaults to 0)
3231
+ - memory: Memory limit (e.g., "512m" for 512MB)
3232
+ - ports: List of container ports or dict of host_port: container_port mappings
3233
+
3234
+ volumes : dict, optional
3235
+ Dictionary mapping host paths to container paths for directory volumes.
3236
+ Example: {"/host/data": "/container/data"}
3237
+
3238
+ file_volumes : dict, optional
3239
+ Dictionary mapping logical names to file configurations for creating and mounting
3240
+ files with dynamic content. Each entry should contain:
3241
+ - content: String content to write to the file
3242
+ - mounting_point: Full path where file will be mounted in container
3243
+ Example: {"config": {"content": "port=8080", "mounting_point": "/app/config.txt"}}
3244
+
3245
+ restart_policy : str, optional
3246
+ Container restart policy. Defaults to "always".
3247
+
3248
+ image_pull_policy : str, optional
3249
+ Image pull policy. Defaults to "always".
3250
+
3251
+ image_poll_interval : int, optional
3252
+ Seconds between Docker image checks. Defaults to 300.
3253
+
3254
+ vcs_poll_interval : int, optional
3255
+ Seconds between Git commit checks. Defaults to 60.
3256
+
3257
+ """
3258
+ if vcs_data is None:
3259
+ raise ValueError("vcs_data is required for worker web apps. Please provide repository information.")
3260
+
3261
+ # Set default values
3262
+ if build_and_run_commands is None:
3263
+ build_and_run_commands = ["npm install", "npm run build", "npm start"]
3264
+
3265
+ if cr_data is None:
3266
+ cr_data = {"SERVER": "docker.io", "USERNAME": None, "PASSWORD": None}
3267
+
3268
+ if container_resources is None:
3269
+ container_resources = {"cpu": 1, "gpu": 0, "memory": "512m", "ports": []}
3270
+
3271
+ # Prepare worker app specific configuration
3272
+ worker_config = {
3273
+ "VCS_DATA": {**vcs_data, "POLL_INTERVAL": vcs_poll_interval},
3274
+ "IMAGE": image,
3275
+ "BUILD_AND_RUN_COMMANDS": build_and_run_commands,
3276
+ "CR_DATA": cr_data,
3277
+ "ENV": env or {},
3278
+ "DYNAMIC_ENV": dynamic_env or {},
3279
+ "PORT": port,
3280
+ "ENDPOINT_URL": endpoint_url,
3281
+ "ENDPOINT_POLL_INTERVAL": endpoint_poll_interval,
3282
+ "CONTAINER_RESOURCES": container_resources,
3283
+ "VOLUMES": volumes or {},
3284
+ "FILE_VOLUMES": file_volumes or {},
3285
+ "RESTART_POLICY": restart_policy,
3286
+ "IMAGE_PULL_POLICY": image_pull_policy,
3287
+ "IMAGE_POLL_INTERVAL": image_poll_interval,
3288
+ "CAR_VERBOSE": 100,
3289
+ }
3290
+
3291
+ kwargs = self.maybe_clean_kwargs(
3292
+ _kwargs=kwargs,
3293
+ caller_method_name="create_worker_web_app",
3294
+ solver_method_name="create_web_app",
3295
+ parameters_to_remove=["signature"]
3296
+ )
3297
+
3298
+ return self.create_web_app(
3299
+ node=node,
3300
+ name=name,
3301
+ signature=PLUGIN_SIGNATURES.WORKER_APP_RUNNER,
3302
+ tunnel_engine=tunnel_engine,
3303
+ tunnel_engine_enabled=tunnel_engine_enabled,
3304
+ cloudflare_token=cloudflare_token,
3305
+ ngrok_edge_label=ngrok_edge_label,
3306
+ extra_debug=extra_debug,
3307
+ summary=summary,
3308
+ description=description,
3309
+ **worker_config,
3310
+ **kwargs
3311
+ )
3312
+
3133
3313
  def deeploy_launch_container_app(
3134
3314
  self,
3135
3315
  docker_image: str,
@@ -1561,6 +1561,41 @@ class _EVMMixin:
1561
1561
 
1562
1562
  return result
1563
1563
 
1564
+ def web3_get_first_closable_job_id(
1565
+ self,
1566
+ network: str = None
1567
+ ):
1568
+ """
1569
+ Retrieve the ID of the first job that can be closed using getFirstClosableJobId().
1570
+
1571
+ Parameters
1572
+ ----------
1573
+ network : str, optional
1574
+ The network to use. If None, defaults to self.evm_network.
1575
+
1576
+ Returns
1577
+ -------
1578
+ int or None
1579
+ The ID of the first closable job, or None if no such job exists.
1580
+ """
1581
+ w3vars = self._get_web3_vars(network)
1582
+ network = w3vars.network
1583
+
1584
+ contract = w3vars.w3.eth.contract(
1585
+ address=w3vars.poai_manager_address,
1586
+ abi=EVM_ABI_DATA.POAI_MANAGER_ABI
1587
+ )
1588
+
1589
+ self.P(f"`getFirstClosableJobId` on {network} via {w3vars.rpc_url}", verbosity=2)
1590
+
1591
+ # Call the contract function to get the first closable job ID.
1592
+ result = contract.functions.getFirstClosableJobId().call()
1593
+ if result == 0:
1594
+ result = None
1595
+ self.P(f"First closable job ID: {result}", verbosity=2)
1596
+
1597
+ return result
1598
+
1564
1599
  def web3_get_is_last_epoch_allocated(
1565
1600
  self,
1566
1601
  network: str = None
@@ -14,6 +14,7 @@ class PLUGIN_SIGNATURES:
14
14
  TELEGRAM_CONVERSATIONAL_BOT_01 = 'TELEGRAM_CONVERSATIONAL_BOT_01'
15
15
  NET_CONFIG_MONITOR = 'NET_CONFIG_MONITOR'
16
16
  CONTAINER_APP_RUNNER = 'CONTAINER_APP_RUNNER'
17
+ WORKER_APP_RUNNER = 'WORKER_APP_RUNNER'
17
18
  # INSERT_NEW_PLUGIN_HERE
18
19
 
19
20
 
@@ -417,6 +417,19 @@ _POAI_MANAGER_ABI = [
417
417
  ],
418
418
  "stateMutability": "view",
419
419
  "type": "function"
420
+ },
421
+ {
422
+ "inputs": [],
423
+ "name": "getFirstClosableJobId",
424
+ "outputs": [
425
+ {
426
+ "internalType": "uint256",
427
+ "name": "",
428
+ "type": "uint256"
429
+ }
430
+ ],
431
+ "stateMutability": "view",
432
+ "type": "function"
420
433
  }
421
434
  ]
422
435
 
@@ -0,0 +1,114 @@
1
+ """
2
+ ex23_deploy_worker_app.py
3
+ ---------------------
4
+
5
+ This is a basic example of how to use the ratio1 SDK for deploying a worker web app
6
+ that automatically monitors a Git repository and rebuilds when changes are detected.
7
+
8
+ The example shows how to deploy a worker app that:
9
+ - Clones a Git repository into a container
10
+ - Builds and runs the application
11
+ - Monitors for new commits and automatically restarts
12
+ - Exposes the app via Cloudflare tunnel
13
+
14
+ """
15
+ from ratio1 import Session
16
+
17
+ if __name__ == '__main__':
18
+
19
+ session = Session(silent=False)
20
+
21
+ my_node = "0xai_Avvuy6USRwVfbbxEG2HPiCz85mSJle3zo2MbDh5kBD-g"
22
+
23
+ # Get Cloudflare token from user input
24
+ cloudflare_token = input("Enter your Cloudflare tunnel token (or press Enter to skip): ").strip()
25
+
26
+ if not cloudflare_token:
27
+ session.P("Warning: No Cloudflare token provided. The app will not be accessible via tunnel.")
28
+ cloudflare_token = None
29
+
30
+ # VCS data for the repository to monitor
31
+ vcs_data = {
32
+ "PROVIDER": "github",
33
+ "USERNAME": "vitalii-t12", # Replace with your GitHub username
34
+ "TOKEN": None, # Replace with your GitHub personal access token
35
+ "REPO_OWNER": "vitalii-t12", # Replace with repository owner
36
+ "REPO_NAME": "my-super-react-app", # Replace with repository name
37
+ "BRANCH": "main", # Branch to monitor for updates
38
+ }
39
+
40
+ # Container registry data (if using private registry)
41
+ cr_data = {
42
+ "SERVER": "docker.io",
43
+ "USERNAME": None, # Set if using private registry
44
+ "PASSWORD": None, # Set if using private registry
45
+ }
46
+
47
+ # Environment variables for the app
48
+ env = {
49
+ "NODE_ENV": "production",
50
+ }
51
+
52
+ # Container resource limits
53
+ container_resources = {
54
+ "cpu": 1, # 1 CPU core
55
+ "gpu": 0, # No GPU
56
+ "memory": "512m", # 512MB memory
57
+ # "ports": [3000], # Container port 3000
58
+ }
59
+
60
+ # Build and run commands for the application
61
+ build_and_run_commands = [
62
+ "npm install",
63
+ "npm run build",
64
+ "npm run serve"
65
+ ]
66
+
67
+ # (Optional) Regular volumes - mount directories from host to container
68
+ volumes = {
69
+ # "/host/data": "/app/data", # Mount host directory to container
70
+ }
71
+
72
+ # (Optional) File volumes - create files with dynamic content and mount them
73
+ file_volumes = {}
74
+
75
+ app, _ = session.create_worker_web_app(
76
+ node=my_node,
77
+ name="ratio1_worker_webapp",
78
+ tunnel_engine="cloudflare",
79
+ tunnel_engine_enabled=True,
80
+ cloudflare_token=cloudflare_token,
81
+
82
+ # Worker app specific parameters
83
+ vcs_data=vcs_data,
84
+ image="node:22",
85
+ build_and_run_commands=build_and_run_commands,
86
+ cr_data=cr_data,
87
+ env=env,
88
+ port=4173,
89
+ container_resources=container_resources,
90
+ volumes=volumes, # Directory volumes (optional)
91
+ file_volumes=file_volumes, # File volumes with dynamic content (optional)
92
+ vcs_poll_interval=60, # Check for Git updates every minute
93
+ )
94
+ app.deploy()
95
+ try:
96
+ session.P("Worker webapp deployed")
97
+ session.P("The app will automatically:")
98
+ session.P("- Clone the repository and build the application")
99
+ session.P("- Monitor for new commits and restart when changes are detected")
100
+ session.P("- Expose the app via Cloudflare tunnel")
101
+ except Exception as e:
102
+ session.P("Error deploying worker webapp: ", e)
103
+
104
+ # Observation:
105
+ # next code is not mandatory - it is used to keep the session open and cleanup the resources
106
+ # due to the fact that this is a example/tutorial and maybe we dont want to keep the pipeline
107
+ # active after the session is closed we use close_pipelines=True
108
+ # in production, you would not need this code as the script can close
109
+ # after the pipeline will be sent
110
+ session.wait(
111
+ seconds=300, # we wait the session for 5 minutes to see the app in action
112
+ close_pipelines=True, # we close the pipelines after the session
113
+ close_session=True, # we close the session after the session
114
+ )
@@ -0,0 +1,22 @@
1
+ from ratio1 import Logger
2
+ from ratio1.bc import DefaultBlockEngine
3
+
4
+
5
+ if __name__ == '__main__':
6
+ logger = Logger("ENC")
7
+ engine = DefaultBlockEngine(
8
+ log=logger,
9
+ name="default",
10
+ user_config=True,
11
+ )
12
+
13
+ engine.reset_network("devnet")
14
+
15
+ network = engine.evm_network
16
+ logger.P(f"Checking first closable job on {network}", color='b')
17
+
18
+ try:
19
+ job_id = engine.web3_get_first_closable_job_id()
20
+ logger.P(f"First closable job ID: {job_id}", color='g')
21
+ except Exception as exc:
22
+ logger.P(f"Failed to retrieve first closable job ID: {exc}", color='r')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes