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.
- {ratio1-3.4.91 → ratio1-3.4.93}/PKG-INFO +1 -1
- {ratio1-3.4.91 → ratio1-3.4.93}/pyproject.toml +1 -1
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/_ver.py +1 -1
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/generic_session.py +180 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/evm.py +35 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/apps.py +1 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/evm_net.py +13 -0
- ratio1-3.4.93/tutorials/ex23_deploy_worker_app.py +114 -0
- ratio1-3.4.93/xperimental/_checks/w3_first_closable_job_check.py +22 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.devcontainer/Dockerfile +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.devcontainer/devcontainer.json +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.gitattributes +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.github/workflows/python-publish.yml +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.gitignore +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/.vscode/launch.json +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/LICENSE +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/README.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/TODOs.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/r1ctl.MD +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/distributed_custom_code_presets.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/instance.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/payload/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/payload/payload.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/pipeline.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/plugin_template.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/responses.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/transaction.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base/webapp_pipeline.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/base_decentra_object.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/base.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/chain.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/bc/ec.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/51.15.142.167.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/72.60.187.24.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/72.60.81.67.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/README.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/cli.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/cli_commands.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/nodes.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/oracles.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/cli/package_update.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/base.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/code_cheker/checker.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/amqp_wrapper.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/base_comm_wrapper.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/comm/mqtt_wrapper.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/README.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/base.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/comms.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/environment.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/formatter.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/heartbeat.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/misc.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/payload.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/const/plugins/deeploy_const.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/session/mqtt_session.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/base/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/base/base_formatter.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/a_dummy.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/aixp1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/default/default.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/io_formatter/io_formatter_manager.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ifps_keygen +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/ipfs/r1fs.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/base_logger.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/small_logger.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/unix.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/utils.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/win32.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/logging/tzlocal/windows_tz.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/plugins_manager_mixin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/__init__.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/comm_utils.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/config.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/dotenv.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/requirements.txt +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/template.env +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/.example_env +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/_example_pk_sdk.pem +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/eth2025/deploy_home_safety.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part1_connect.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part2_filter.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex01_part3_adv_filter.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part1_deploy_webapi.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part2_deploy_plugin.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex08_custom_webapi.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex10_telegram_echo_bot.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex12_telegram_smart_bot.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex14_wallets.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex18_deploy_container_webapi.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex19_deeploy_container_example.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex21_telegram_community_bot.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/ex22_deeploy_custom_code.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/winrun.bat +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/README.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/_show_config_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/cstore_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/dauth_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/keys_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/node_info_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_intervals.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/ora_sign_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/owner_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/payload_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/session_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_auth_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_nodes_licenses.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_oracles_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/w3_poai_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/whitelist_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/_checks/workload_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/ai4e/delete.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/ai4e/launcher.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/dates/check_date.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/debug/close_pipeline.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/checker.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/checker2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/deeploy/create_request.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/enc_dec/enc_dec_test.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/allocate_rewards.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/balance.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/eth_sign.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/info.md +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/send.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/send_many.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/eth/sign.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/log.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/logger/run.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/lp/lp_checker.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/multi-enc-dec/multi_test1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/multi-enc-dec/multi_test2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/netmon/check_netmon.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/netmon/netmon_data.json +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/pipelines/start.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/pipelines/stop.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/collect_messages.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/simple_payload_checker.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/test_sign1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/sign/test_sign2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/test.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/tokens/get_check.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/utils/get_documentation.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/attach_example.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/ex1.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/hello.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/remote_exec.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/various/save_images.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/wl/wl_add.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
- {ratio1-3.4.91 → ratio1-3.4.93}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ratio1-3.4.91 → ratio1-3.4.93}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py
RENAMED
|
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
|