zrb 1.0.0a10__tar.gz → 1.0.0a12__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.
- {zrb-1.0.0a10 → zrb-1.0.0a12}/PKG-INFO +1 -2
- {zrb-1.0.0a10 → zrb-1.0.0a12}/pyproject.toml +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/__init__.py +15 -5
- {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/asdf}/asdf.py +6 -6
- {zrb-1.0.0a10/src/zrb/builtin/setup/system → zrb-1.0.0a12/src/zrb/builtin/setup}/latex/ubuntu.py +1 -1
- {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/tmux}/tmux.py +1 -1
- zrb-1.0.0a12/src/zrb/builtin/setup/tmux/tmux_config.sh +12 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/todo.py +84 -15
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/config.py +1 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/base_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/bool_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/float_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/int_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/option_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/password_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/text_input.py +1 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_app.py +27 -15
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/load.py +4 -1
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/todo.py +152 -34
- zrb-1.0.0a10/src/zrb/builtin/setup/dev/tmux_config.sh +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/README.md +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/__main__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/attr/type.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/git.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/group.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/llm_chat.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/.gitignore +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/README.md +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/config.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/group.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/helper.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/main.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/venv_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/app.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/db_engine.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/db_repository.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/error.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/schema.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/usecase.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/config.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/main.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/migrate.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/alembic.ini +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/api_client.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/base_client.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/direct_client.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/factory.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/README +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/env.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/script.py.mako +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/versions/3093c7336477_add_user_table.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration_metadata.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/route.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/db_repository.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/factory.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/repository.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/usecase.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/alembic.ini +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/README +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/env.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration_metadata.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/route.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/requirements.txt +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/role.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/user.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/template.env +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/create.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/python.py +0 -0
- {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/asdf}/asdf_helper.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/tmux}/tmux_helper.py +0 -0
- {zrb-1.0.0a10/src/zrb/builtin/setup/system → zrb-1.0.0a12/src/zrb/builtin/setup}/ubuntu.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/callback.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/any_context.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/context.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/any_env.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env_file.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env_map.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/any_group.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/group.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/any_input.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/str_input.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/cli.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/controller.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/group_info.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/group_li.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/task_info.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/task_li.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/view.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/controller.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/group_info.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/group_li.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/task_info.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/task_li.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/view.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/static/favicon-32x32.png +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/static/pico.min.css +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/controller.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/common-util.js +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/input.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/main.js +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/show-existing-session.js +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/visualize-history.js +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/view.html +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_util.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/any_session.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/session.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/default_session_state_logger.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/any_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/base_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/http_check.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/llm_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/make_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/task.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/attr.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_class.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_function.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_method.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_key_to_dict.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_param_to_function_call.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_parent_to_class.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_property_to_class.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cron.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/git.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/group.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/llm/tool.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/run.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/format.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/name.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: zrb
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.0a12
|
4
4
|
Summary: Your Automation Powerhouse
|
5
5
|
Home-page: https://github.com/state-alchemists/zrb
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -13,7 +13,6 @@ Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
16
|
-
Classifier: Programming Language :: Python :: 3.13
|
17
16
|
Provides-Extra: rag
|
18
17
|
Requires-Dist: autopep8 (>=2.0.4,<3.0.0)
|
19
18
|
Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
|
@@ -12,14 +12,22 @@ from zrb.builtin.md5 import hash_md5, sum_md5
|
|
12
12
|
from zrb.builtin.project.add.fastapp import add_fastapp_to_project
|
13
13
|
from zrb.builtin.project.create.create import create_project
|
14
14
|
from zrb.builtin.python import format_python_code
|
15
|
-
from zrb.builtin.setup.
|
16
|
-
from zrb.builtin.setup.
|
17
|
-
from zrb.builtin.setup.
|
18
|
-
from zrb.builtin.setup.
|
15
|
+
from zrb.builtin.setup.asdf.asdf import setup_asdf
|
16
|
+
from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
|
17
|
+
from zrb.builtin.setup.tmux.tmux import setup_tmux
|
18
|
+
from zrb.builtin.setup.ubuntu import setup_ubuntu
|
19
19
|
from zrb.builtin.shell.autocomplete.bash import make_bash_autocomplete
|
20
20
|
from zrb.builtin.shell.autocomplete.subcmd import get_shell_subcommands
|
21
21
|
from zrb.builtin.shell.autocomplete.zsh import make_zsh_autocomplete
|
22
|
-
from zrb.builtin.todo import
|
22
|
+
from zrb.builtin.todo import (
|
23
|
+
add_todo,
|
24
|
+
archive_todo,
|
25
|
+
complete_todo,
|
26
|
+
edit_todo,
|
27
|
+
list_todo,
|
28
|
+
log_todo,
|
29
|
+
show_todo,
|
30
|
+
)
|
23
31
|
|
24
32
|
assert create_project
|
25
33
|
assert add_fastapp_to_project
|
@@ -42,9 +50,11 @@ assert git_pull_subtree
|
|
42
50
|
assert git_push_subtree
|
43
51
|
assert list_todo
|
44
52
|
assert add_todo
|
53
|
+
assert archive_todo
|
45
54
|
assert edit_todo
|
46
55
|
assert complete_todo
|
47
56
|
assert log_todo
|
57
|
+
assert show_todo
|
48
58
|
assert setup_ubuntu
|
49
59
|
assert setup_latex_on_ubuntu
|
50
60
|
assert setup_asdf
|
@@ -1,6 +1,12 @@
|
|
1
1
|
import os
|
2
2
|
|
3
3
|
from zrb.builtin.group import setup_group
|
4
|
+
from zrb.builtin.setup.asdf.asdf_helper import (
|
5
|
+
check_inexist_asdf_dir,
|
6
|
+
get_install_prerequisites_cmd,
|
7
|
+
setup_asdf_ps_config,
|
8
|
+
setup_asdf_sh_config,
|
9
|
+
)
|
4
10
|
from zrb.builtin.setup.common_input import (
|
5
11
|
package_manager_input,
|
6
12
|
setup_bash_input,
|
@@ -8,12 +14,6 @@ from zrb.builtin.setup.common_input import (
|
|
8
14
|
setup_zsh_input,
|
9
15
|
use_sudo_input,
|
10
16
|
)
|
11
|
-
from zrb.builtin.setup.dev.asdf_helper import (
|
12
|
-
check_inexist_asdf_dir,
|
13
|
-
get_install_prerequisites_cmd,
|
14
|
-
setup_asdf_ps_config,
|
15
|
-
setup_asdf_sh_config,
|
16
|
-
)
|
17
17
|
from zrb.context.any_context import AnyContext
|
18
18
|
from zrb.task.cmd_task import CmdTask
|
19
19
|
from zrb.task.make_task import make_task
|
@@ -2,7 +2,7 @@ import os
|
|
2
2
|
|
3
3
|
from zrb.builtin.group import setup_group
|
4
4
|
from zrb.builtin.setup.common_input import package_manager_input, use_sudo_input
|
5
|
-
from zrb.builtin.setup.
|
5
|
+
from zrb.builtin.setup.tmux.tmux_helper import get_install_tmux_cmd
|
6
6
|
from zrb.context.any_context import AnyContext
|
7
7
|
from zrb.input.str_input import StrInput
|
8
8
|
from zrb.task.cmd_task import CmdTask
|
@@ -0,0 +1,12 @@
|
|
1
|
+
set -g @plugin 'tmux-plugins/tpm'
|
2
|
+
set -g @plugin 'tmux-plugins/tmux-sensible'
|
3
|
+
run '~/.tmux/plugins/tpm/tpm'
|
4
|
+
|
5
|
+
set-option -sg escape-time 10
|
6
|
+
set-option -g focus-events On
|
7
|
+
set-option -g default-terminal "screen-256color"
|
8
|
+
set-option -sa terminal-overrides ',xterm-256color:RGB'
|
9
|
+
|
10
|
+
bind c new-window -c "#{pane_current_path}"
|
11
|
+
bind '"' split-window -c "#{pane_current_path}"
|
12
|
+
bind % split-window -h -c "#{pane_current_path}"
|
@@ -4,7 +4,7 @@ import os
|
|
4
4
|
from typing import Any
|
5
5
|
|
6
6
|
from zrb.builtin.group import todo_group
|
7
|
-
from zrb.config import TODO_DIR
|
7
|
+
from zrb.config import TODO_DIR, TODO_VISUAL_FILTER
|
8
8
|
from zrb.context.any_context import AnyContext
|
9
9
|
from zrb.input.str_input import StrInput
|
10
10
|
from zrb.input.text_input import TextInput
|
@@ -13,6 +13,7 @@ from zrb.util.todo import (
|
|
13
13
|
TodoTaskModel,
|
14
14
|
add_durations,
|
15
15
|
cascade_todo_task,
|
16
|
+
get_visual_todo_card,
|
16
17
|
get_visual_todo_list,
|
17
18
|
line_to_todo_task,
|
18
19
|
load_todo_list,
|
@@ -23,7 +24,7 @@ from zrb.util.todo import (
|
|
23
24
|
|
24
25
|
|
25
26
|
@make_task(
|
26
|
-
name="todo
|
27
|
+
name="add-todo",
|
27
28
|
input=[
|
28
29
|
StrInput(
|
29
30
|
name="description",
|
@@ -77,20 +78,52 @@ def add_todo(ctx: AnyContext):
|
|
77
78
|
)
|
78
79
|
)
|
79
80
|
save_todo_list(todo_file_path, todo_list)
|
80
|
-
return get_visual_todo_list(todo_list)
|
81
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
81
82
|
|
82
83
|
|
83
|
-
@make_task(name="todo
|
84
|
+
@make_task(name="list-todo", description="📋 List todo", group=todo_group, alias="list")
|
84
85
|
def list_todo(ctx: AnyContext):
|
85
86
|
todo_file_path = os.path.join(TODO_DIR, "todo.txt")
|
86
|
-
|
87
|
+
todo_list: list[TodoTaskModel] = []
|
87
88
|
if os.path.isfile(todo_file_path):
|
88
|
-
|
89
|
-
return get_visual_todo_list(
|
89
|
+
todo_list = load_todo_list(todo_file_path)
|
90
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
90
91
|
|
91
92
|
|
92
93
|
@make_task(
|
93
|
-
name="todo
|
94
|
+
name="show-todo",
|
95
|
+
input=StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
|
96
|
+
description="🔍 Show todo",
|
97
|
+
group=todo_group,
|
98
|
+
alias="show",
|
99
|
+
)
|
100
|
+
def show_todo(ctx: AnyContext):
|
101
|
+
todo_file_path = os.path.join(TODO_DIR, "todo.txt")
|
102
|
+
todo_list: list[TodoTaskModel] = []
|
103
|
+
todo_list: list[TodoTaskModel] = []
|
104
|
+
if os.path.isfile(todo_file_path):
|
105
|
+
todo_list = load_todo_list(todo_file_path)
|
106
|
+
# Get todo task
|
107
|
+
todo_task = select_todo_task(todo_list, ctx.input.keyword)
|
108
|
+
if todo_task is None:
|
109
|
+
ctx.log_error("Task not found")
|
110
|
+
return
|
111
|
+
if todo_task.completed:
|
112
|
+
ctx.log_error("Task already completed")
|
113
|
+
return
|
114
|
+
# Update todo task
|
115
|
+
todo_task = cascade_todo_task(todo_task)
|
116
|
+
task_id = todo_task.keyval.get("id", "")
|
117
|
+
log_work_path = os.path.join(TODO_DIR, "log-work", f"{task_id}.json")
|
118
|
+
log_work_list = []
|
119
|
+
if os.path.isfile(log_work_path):
|
120
|
+
with open(log_work_path, "r") as f:
|
121
|
+
log_work_list = json.loads(f.read())
|
122
|
+
return get_visual_todo_card(todo_task, log_work_list)
|
123
|
+
|
124
|
+
|
125
|
+
@make_task(
|
126
|
+
name="complete-todo",
|
94
127
|
input=StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
|
95
128
|
description="✅ Complete todo",
|
96
129
|
group=todo_group,
|
@@ -105,7 +138,10 @@ def complete_todo(ctx: AnyContext):
|
|
105
138
|
todo_task = select_todo_task(todo_list, ctx.input.keyword)
|
106
139
|
if todo_task is None:
|
107
140
|
ctx.log_error("Task not found")
|
108
|
-
return get_visual_todo_list(todo_list)
|
141
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
142
|
+
if todo_task.completed:
|
143
|
+
ctx.log_error("Task already completed")
|
144
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
109
145
|
# Update todo task
|
110
146
|
todo_task = cascade_todo_task(todo_task)
|
111
147
|
if todo_task.creation_date is not None:
|
@@ -113,11 +149,43 @@ def complete_todo(ctx: AnyContext):
|
|
113
149
|
todo_task.completed = True
|
114
150
|
# Save todo list
|
115
151
|
save_todo_list(todo_file_path, todo_list)
|
116
|
-
return get_visual_todo_list(todo_list)
|
152
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
117
153
|
|
118
154
|
|
119
155
|
@make_task(
|
120
|
-
name="todo
|
156
|
+
name="archive-todo",
|
157
|
+
description="📚 Archive todo",
|
158
|
+
group=todo_group,
|
159
|
+
alias="archive",
|
160
|
+
)
|
161
|
+
def archive_todo(ctx: AnyContext):
|
162
|
+
todo_file_path = os.path.join(TODO_DIR, "todo.txt")
|
163
|
+
todo_list: list[TodoTaskModel] = []
|
164
|
+
if os.path.isfile(todo_file_path):
|
165
|
+
todo_list = load_todo_list(todo_file_path)
|
166
|
+
working_todo_list = [
|
167
|
+
todo_task for todo_task in todo_list if not todo_task.completed
|
168
|
+
]
|
169
|
+
new_archived_todo_list = [
|
170
|
+
todo_task for todo_task in todo_list if todo_task.completed
|
171
|
+
]
|
172
|
+
if len(new_archived_todo_list) == 0:
|
173
|
+
ctx.print("No completed task to archive")
|
174
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
175
|
+
archive_file_path = os.path.join(TODO_DIR, "archive.txt")
|
176
|
+
if not os.path.isdir(TODO_DIR):
|
177
|
+
os.make_dirs(TODO_DIR, exist_ok=True)
|
178
|
+
archived_todo_list = []
|
179
|
+
if os.path.isfile(archive_file_path):
|
180
|
+
archived_todo_list = load_todo_list(archive_file_path)
|
181
|
+
archived_todo_list += new_archived_todo_list
|
182
|
+
save_todo_list(archive_file_path, archived_todo_list)
|
183
|
+
save_todo_list(todo_file_path, working_todo_list)
|
184
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
185
|
+
|
186
|
+
|
187
|
+
@make_task(
|
188
|
+
name="log-todo",
|
121
189
|
input=[
|
122
190
|
StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
|
123
191
|
StrInput(
|
@@ -151,7 +219,7 @@ def log_todo(ctx: AnyContext):
|
|
151
219
|
todo_task = select_todo_task(todo_list, ctx.input.keyword)
|
152
220
|
if todo_task is None:
|
153
221
|
ctx.log_error("Task not found")
|
154
|
-
return get_visual_todo_list(todo_list)
|
222
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
155
223
|
# Update todo task
|
156
224
|
todo_task = cascade_todo_task(todo_task)
|
157
225
|
current_duration = todo_task.keyval.get("duration", "0")
|
@@ -175,7 +243,7 @@ def log_todo(ctx: AnyContext):
|
|
175
243
|
)
|
176
244
|
with open(log_work_file_path, "w") as f:
|
177
245
|
f.write(json.dumps(log_work, indent=2))
|
178
|
-
return get_visual_todo_list(todo_list)
|
246
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
179
247
|
|
180
248
|
|
181
249
|
def _get_default_start() -> str:
|
@@ -183,7 +251,7 @@ def _get_default_start() -> str:
|
|
183
251
|
|
184
252
|
|
185
253
|
@make_task(
|
186
|
-
name="todo
|
254
|
+
name="edit-todo",
|
187
255
|
input=[
|
188
256
|
TextInput(
|
189
257
|
name="text",
|
@@ -207,7 +275,7 @@ def edit_todo(ctx: AnyContext):
|
|
207
275
|
with open(todo_file_path, "w") as f:
|
208
276
|
f.write(new_content)
|
209
277
|
todo_list = load_todo_list(todo_file_path)
|
210
|
-
return get_visual_todo_list(todo_list)
|
278
|
+
return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
|
211
279
|
|
212
280
|
|
213
281
|
def _get_todo_txt_content() -> str:
|
@@ -216,3 +284,4 @@ def _get_todo_txt_content() -> str:
|
|
216
284
|
return ""
|
217
285
|
with open(todo_file_path, "r") as f:
|
218
286
|
return f.read()
|
287
|
+
return f.read()
|
@@ -56,6 +56,7 @@ SESSION_LOG_DIR = os.getenv(
|
|
56
56
|
"ZRB_SESSION_LOG_DIR", os.path.expanduser(os.path.join("~", ".zrb-session"))
|
57
57
|
)
|
58
58
|
TODO_DIR = os.getenv("ZRB_TODO_DIR", os.path.expanduser(os.path.join("~", "todo")))
|
59
|
+
TODO_VISUAL_FILTER = os.getenv("ZRB_TODO_FILTER", "")
|
59
60
|
VERSION = metadata.version("zrb")
|
60
61
|
WEB_HTTP_PORT = int(os.getenv("ZRB_WEB_HTTP_PORT", "21213"))
|
61
62
|
LLM_MODEL = os.getenv("ZRB_LLM_MODEL", "ollama_chat/llama3.1")
|
@@ -16,7 +16,7 @@ class TextInput(BaseInput):
|
|
16
16
|
prompt: str | None = None,
|
17
17
|
default_str: str | Callable[[AnySharedContext], str] = "",
|
18
18
|
auto_render: bool = True,
|
19
|
-
allow_empty: bool =
|
19
|
+
allow_empty: bool = False,
|
20
20
|
editor: str = DEFAULT_EDITOR,
|
21
21
|
extension: str = ".txt",
|
22
22
|
comment_start: str | None = None,
|
@@ -2,7 +2,7 @@ import asyncio
|
|
2
2
|
import os
|
3
3
|
import sys
|
4
4
|
from datetime import datetime, timedelta
|
5
|
-
from typing import Any
|
5
|
+
from typing import Any
|
6
6
|
|
7
7
|
from zrb.config import BANNER, WEB_HTTP_PORT
|
8
8
|
from zrb.context.shared_context import SharedContext
|
@@ -23,7 +23,7 @@ from zrb.util.group import extract_node_from_args, get_node_path
|
|
23
23
|
def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
|
24
24
|
from contextlib import asynccontextmanager
|
25
25
|
|
26
|
-
from fastapi import FastAPI, HTTPException, Request
|
26
|
+
from fastapi import FastAPI, HTTPException, Query, Request
|
27
27
|
from fastapi.responses import FileResponse, HTMLResponse
|
28
28
|
from fastapi.staticfiles import StaticFiles
|
29
29
|
|
@@ -97,7 +97,13 @@ def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
|
|
97
97
|
raise HTTPException(status_code=404, detail="Not Found")
|
98
98
|
|
99
99
|
@app.get("/api/{path:path}", response_model=SessionStateLog | SessionStateLogList)
|
100
|
-
async def get_session(
|
100
|
+
async def get_session(
|
101
|
+
path: str,
|
102
|
+
min_start_query: str = Query(default=None, alias="from"),
|
103
|
+
max_start_query: str = Query(default=None, alias="to"),
|
104
|
+
page: int = Query(default=0, alias="page"),
|
105
|
+
limit: int = Query(default=10, alias="limit"),
|
106
|
+
):
|
101
107
|
"""
|
102
108
|
Getting existing session or sessions
|
103
109
|
"""
|
@@ -106,24 +112,30 @@ def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
|
|
106
112
|
if isinstance(node, AnyTask) and residual_args:
|
107
113
|
if residual_args[0] == "list":
|
108
114
|
task_path = get_node_path(root_group, node)
|
109
|
-
|
115
|
+
max_start_time = (
|
116
|
+
datetime.now()
|
117
|
+
if max_start_query is None
|
118
|
+
else datetime.strptime(max_start_query, "%Y-%m-%d %H:%M:%S")
|
119
|
+
)
|
120
|
+
min_start_time = (
|
121
|
+
max_start_time - timedelta(hours=1)
|
122
|
+
if min_start_query is None
|
123
|
+
else datetime.strptime(min_start_query, "%Y-%m-%d %H:%M:%S")
|
124
|
+
)
|
125
|
+
return list_sessions(
|
126
|
+
task_path, min_start_time, max_start_time, page, limit
|
127
|
+
)
|
110
128
|
else:
|
111
129
|
return read_session(residual_args[0])
|
112
130
|
raise HTTPException(status_code=404, detail="Not Found")
|
113
131
|
|
114
132
|
def list_sessions(
|
115
|
-
task_path:
|
133
|
+
task_path: list[str],
|
134
|
+
min_start_time: datetime,
|
135
|
+
max_start_time: datetime,
|
136
|
+
page: int,
|
137
|
+
limit: int,
|
116
138
|
) -> SessionStateLogList:
|
117
|
-
max_start_time = datetime.now()
|
118
|
-
if "to" in query_params:
|
119
|
-
max_start_time = datetime.strptime(query_params["to"], "%Y-%m-%d %H:%M:%S")
|
120
|
-
min_start_time = max_start_time - timedelta(hours=1)
|
121
|
-
if "from" in query_params:
|
122
|
-
min_start_time = datetime.strptime(
|
123
|
-
query_params["from"], "%Y-%m-%d %H:%M:%S"
|
124
|
-
)
|
125
|
-
page = int(query_params.get("page", 0))
|
126
|
-
limit = int(query_params.get("limit", 10))
|
127
139
|
try:
|
128
140
|
return default_session_state_logger.list(
|
129
141
|
task_path,
|
@@ -3,6 +3,7 @@ import importlib.util
|
|
3
3
|
import os
|
4
4
|
import re
|
5
5
|
import sys
|
6
|
+
from functools import lru_cache
|
6
7
|
from typing import Any
|
7
8
|
|
8
9
|
pattern = re.compile("[^a-zA-Z0-9]")
|
@@ -13,7 +14,7 @@ def load_zrb_init(dir_path: str | None = None):
|
|
13
14
|
dir_path = os.getcwd()
|
14
15
|
script_path = os.path.join(dir_path, "zrb_init.py")
|
15
16
|
if os.path.isfile(script_path):
|
16
|
-
load_file(script_path)
|
17
|
+
load_file(script_path, -1)
|
17
18
|
return
|
18
19
|
new_dir_path = os.path.dirname(dir_path)
|
19
20
|
if new_dir_path == dir_path:
|
@@ -21,6 +22,7 @@ def load_zrb_init(dir_path: str | None = None):
|
|
21
22
|
load_zrb_init(new_dir_path)
|
22
23
|
|
23
24
|
|
25
|
+
@lru_cache()
|
24
26
|
def load_file(script_path: str, sys_path_index: int = 0):
|
25
27
|
if not os.path.isfile(script_path):
|
26
28
|
return
|
@@ -45,6 +47,7 @@ def _get_new_python_path(dir_path: str) -> str:
|
|
45
47
|
return ":".join([current_python_path, dir_path])
|
46
48
|
|
47
49
|
|
50
|
+
@lru_cache()
|
48
51
|
def load_module(module_name: str) -> Any:
|
49
52
|
module = importlib.import_module(module_name)
|
50
53
|
return module
|