zrb 1.0.0b7__tar.gz → 1.0.0b9__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.0b7 → zrb-1.0.0b9}/PKG-INFO +2 -1
- {zrb-1.0.0b7 → zrb-1.0.0b9}/pyproject.toml +2 -1
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/__main__.py +3 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/git.py +15 -15
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/git_subtree.py +6 -6
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +1 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +1 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service.py +5 -5
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +1 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +8 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +9 -2
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py → zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +11 -49
- zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +58 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +27 -11
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +32 -27
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +15 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +22 -5
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +21 -0
- zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +202 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +3 -4
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +15 -14
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +4 -4
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +24 -5
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +14 -12
- zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +246 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +28 -11
- zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +344 -0
- zrb-1.0.0b9/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +35 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +27 -2
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +2 -1
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +1 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +13 -12
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +55 -12
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/cmd_task.py +4 -7
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cmd/command.py +41 -50
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/git.py +18 -18
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/git_subtree.py +6 -6
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -160
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -212
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -137
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -7
- zrb-1.0.0b7/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/session.py +0 -48
- {zrb-1.0.0b7 → zrb-1.0.0b9}/README.md +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/attr/type.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/group.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/llm_chat.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_api_client.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_direct_client.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/script.py.mako +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/migrate.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/python.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/random.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/callback/callback.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/config.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/context/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/context/any_context.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/context/context.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/env/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/env/any_env.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/env/env.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/env/env_file.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/env/env_map.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/group/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/group/any_group.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/group/group.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/any_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/base_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/float_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/int_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/option_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/password_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/str_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/input/text_input.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/cli.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_config/config.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_config/config_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session/any_session.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session/session.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/any_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/base_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/http_check.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/llm_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/make_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/task.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/attr.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/append_code_to_class.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/append_code_to_function.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/append_code_to_method.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/append_key_to_dict.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/append_param_to_function_call.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/prepend_code_to_module.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/prepend_parent_to_class.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/codemod/prepend_property_to_class.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/cron.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/file.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/group.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/llm/tool.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/load.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/run.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/string/format.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/string/name.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/util/todo.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.0.0b7 → zrb-1.0.0b9}/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.0b9
|
4
4
|
Summary: Your Automation Powerhouse
|
5
5
|
Home-page: https://github.com/state-alchemists/zrb
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -23,6 +23,7 @@ Requires-Dist: fastembed (>=0.5.1,<0.6.0)
|
|
23
23
|
Requires-Dist: isort (>=5.13.2,<5.14.0)
|
24
24
|
Requires-Dist: libcst (>=1.5.0,<2.0.0)
|
25
25
|
Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag"
|
26
|
+
Requires-Dist: psutil (>=6.1.1,<7.0.0)
|
26
27
|
Requires-Dist: pydantic-ai (>=0.0.19,<0.0.20)
|
27
28
|
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
28
29
|
Requires-Dist: python-jose[cryptography] (>=3.3.0,<4.0.0)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "zrb"
|
3
|
-
version = "1.0.
|
3
|
+
version = "1.0.0b9"
|
4
4
|
description = "Your Automation Powerhouse"
|
5
5
|
authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
|
6
6
|
license = "AGPL-3.0-or-later"
|
@@ -52,6 +52,7 @@ python-jose = {extras = ["cryptography"], version = "^3.3.0"}
|
|
52
52
|
ulid-py = "^1.1.0"
|
53
53
|
pydantic-ai = "^0.0.19"
|
54
54
|
fastembed = "^0.5.1"
|
55
|
+
psutil = "^6.1.1"
|
55
56
|
|
56
57
|
[tool.poetry.extras]
|
57
58
|
# poetry install -E rag
|
@@ -16,8 +16,11 @@ def serve_cli():
|
|
16
16
|
cli.run(sys.argv[1:])
|
17
17
|
except KeyboardInterrupt:
|
18
18
|
print(stylize_warning("\nStopped"), file=sys.stderr)
|
19
|
+
sys.exit(1)
|
19
20
|
except RuntimeError as e:
|
20
21
|
if f"{e}".lower() != "event loop is closed":
|
21
22
|
raise e
|
23
|
+
sys.exit(1)
|
22
24
|
except NodeNotFoundError as e:
|
23
25
|
print(stylize_error(f"{e}"), file=sys.stderr)
|
26
|
+
sys.exit(1)
|
@@ -57,9 +57,9 @@ from zrb.util.git import (
|
|
57
57
|
)
|
58
58
|
async def get_git_diff(ctx: AnyContext):
|
59
59
|
ctx.print(stylize_faint("Get directory"))
|
60
|
-
repo_dir = await get_repo_dir(
|
60
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
61
61
|
diff = await get_diff(
|
62
|
-
repo_dir, ctx.input.source, ctx.input.current,
|
62
|
+
repo_dir, ctx.input.source, ctx.input.current, print_method=ctx.print
|
63
63
|
)
|
64
64
|
result = []
|
65
65
|
decorated = []
|
@@ -88,17 +88,17 @@ async def get_git_diff(ctx: AnyContext):
|
|
88
88
|
)
|
89
89
|
async def prune_local_branches(ctx: AnyContext):
|
90
90
|
ctx.print(stylize_faint("Get directory"))
|
91
|
-
repo_dir = await get_repo_dir(
|
91
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
92
92
|
ctx.print(stylize_faint("Get existing branches"))
|
93
|
-
branches = await get_branches(repo_dir,
|
93
|
+
branches = await get_branches(repo_dir, print_method=ctx.print)
|
94
94
|
ctx.print(stylize_faint("Get current branch"))
|
95
|
-
current_branch = await get_current_branch(repo_dir,
|
95
|
+
current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
|
96
96
|
for branch in branches:
|
97
97
|
if branch == current_branch or branch == "main" or branch == "master":
|
98
98
|
continue
|
99
99
|
ctx.print(stylize_faint(f"Removing local branch: {branch}"))
|
100
100
|
try:
|
101
|
-
await delete_branch(repo_dir, branch,
|
101
|
+
await delete_branch(repo_dir, branch, print_method=ctx.print)
|
102
102
|
except Exception as e:
|
103
103
|
ctx.log_error(e)
|
104
104
|
|
@@ -117,11 +117,11 @@ async def prune_local_branches(ctx: AnyContext):
|
|
117
117
|
)
|
118
118
|
async def git_commit(ctx: AnyContext):
|
119
119
|
ctx.print(stylize_faint("Get directory"))
|
120
|
-
repo_dir = await get_repo_dir(
|
120
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
121
121
|
ctx.print(stylize_faint("Add changes to staging"))
|
122
|
-
await add(repo_dir,
|
122
|
+
await add(repo_dir, print_method=ctx.print)
|
123
123
|
ctx.print(stylize_faint("Commit changes"))
|
124
|
-
await commit(repo_dir, ctx.input.message,
|
124
|
+
await commit(repo_dir, ctx.input.message, print_method=ctx.print)
|
125
125
|
|
126
126
|
|
127
127
|
@make_task(
|
@@ -139,12 +139,12 @@ async def git_commit(ctx: AnyContext):
|
|
139
139
|
)
|
140
140
|
async def git_pull(ctx: AnyContext):
|
141
141
|
ctx.print(stylize_faint("Get directory"))
|
142
|
-
repo_dir = await get_repo_dir(
|
142
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
143
143
|
ctx.print(stylize_faint("Get current branch"))
|
144
|
-
current_branch = await get_current_branch(repo_dir,
|
144
|
+
current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
|
145
145
|
remote = ctx.input.remote
|
146
146
|
ctx.print(stylize_faint(f"Pulling from {remote}/{current_branch}"))
|
147
|
-
await pull(repo_dir, remote, current_branch,
|
147
|
+
await pull(repo_dir, remote, current_branch, print_method=ctx.print)
|
148
148
|
|
149
149
|
|
150
150
|
@make_task(
|
@@ -161,9 +161,9 @@ async def git_pull(ctx: AnyContext):
|
|
161
161
|
alias="push",
|
162
162
|
)
|
163
163
|
async def git_push(ctx: AnyContext):
|
164
|
-
repo_dir = await get_repo_dir(
|
164
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
165
165
|
ctx.print(stylize_faint("Get current branch"))
|
166
|
-
current_branch = await get_current_branch(repo_dir,
|
166
|
+
current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
|
167
167
|
remote = ctx.input.remote
|
168
168
|
ctx.print(stylize_faint(f"Pushing to {remote}/{current_branch}"))
|
169
|
-
await push(repo_dir, remote, current_branch,
|
169
|
+
await push(repo_dir, remote, current_branch, print_method=ctx.print)
|
@@ -35,7 +35,7 @@ from zrb.util.git_subtree import add_subtree, load_config, pull_subtree, push_su
|
|
35
35
|
)
|
36
36
|
async def git_add_subtree(ctx: AnyContext):
|
37
37
|
ctx.print(stylize_faint("Get directory"))
|
38
|
-
repo_dir = await get_repo_dir(
|
38
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
39
39
|
ctx.print(stylize_faint("Add subtree"))
|
40
40
|
await add_subtree(
|
41
41
|
repo_dir=repo_dir,
|
@@ -43,7 +43,7 @@ async def git_add_subtree(ctx: AnyContext):
|
|
43
43
|
repo_url=ctx.input["repo-url"],
|
44
44
|
branch=ctx.input["repo-branch"],
|
45
45
|
prefix=ctx.input["repo-prefix"],
|
46
|
-
|
46
|
+
print_method=ctx.print,
|
47
47
|
)
|
48
48
|
|
49
49
|
|
@@ -56,7 +56,7 @@ async def git_add_subtree(ctx: AnyContext):
|
|
56
56
|
)
|
57
57
|
async def git_pull_subtree(ctx: AnyContext):
|
58
58
|
ctx.print(stylize_faint("Get directory"))
|
59
|
-
repo_dir = await get_repo_dir(
|
59
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
60
60
|
config = load_config(repo_dir)
|
61
61
|
if not config.data:
|
62
62
|
raise ValueError("No subtree config found")
|
@@ -69,7 +69,7 @@ async def git_pull_subtree(ctx: AnyContext):
|
|
69
69
|
prefix=detail.prefix,
|
70
70
|
repo_url=detail.repo_url,
|
71
71
|
branch=detail.branch,
|
72
|
-
|
72
|
+
print_method=ctx.print,
|
73
73
|
)
|
74
74
|
except Exception as e:
|
75
75
|
if first_err is None:
|
@@ -88,7 +88,7 @@ async def git_pull_subtree(ctx: AnyContext):
|
|
88
88
|
)
|
89
89
|
async def git_push_subtree(ctx: AnyContext):
|
90
90
|
ctx.print(stylize_faint("Get directory"))
|
91
|
-
repo_dir = await get_repo_dir(
|
91
|
+
repo_dir = await get_repo_dir(print_method=ctx.print)
|
92
92
|
config = load_config(repo_dir)
|
93
93
|
if not config.data:
|
94
94
|
raise ValueError("No subtree config found")
|
@@ -101,7 +101,7 @@ async def git_push_subtree(ctx: AnyContext):
|
|
101
101
|
prefix=detail.prefix,
|
102
102
|
repo_url=detail.repo_url,
|
103
103
|
branch=detail.branch,
|
104
|
-
|
104
|
+
print_method=ctx.print,
|
105
105
|
)
|
106
106
|
except Exception as e:
|
107
107
|
if first_err is None:
|
@@ -57,6 +57,7 @@ scaffold_fastapp = Scaffolder(
|
|
57
57
|
"my_app_name": "{to_snake_case(ctx.input.app)}",
|
58
58
|
"MY_APP_NAME": "{to_snake_case(ctx.input.app).upper()}",
|
59
59
|
"my-secure-password": lambda _: get_random_name(),
|
60
|
+
"my-secret-key": lambda _: get_random_name(),
|
60
61
|
},
|
61
62
|
),
|
62
63
|
# Register fastapp's tasks to project's zrb_init (project_dir/zrb_init.py)
|
@@ -67,11 +67,11 @@ class MyEntityService(BaseService):
|
|
67
67
|
@BaseService.route(
|
68
68
|
"/api/v1/my-entities/bulk",
|
69
69
|
methods=["put"],
|
70
|
-
response_model=MyEntityResponse,
|
70
|
+
response_model=list[MyEntityResponse],
|
71
71
|
)
|
72
72
|
async def update_my_entity_bulk(
|
73
73
|
self, my_entity_ids: list[str], data: MyEntityUpdateWithAudit
|
74
|
-
) -> MyEntityResponse:
|
74
|
+
) -> list[MyEntityResponse]:
|
75
75
|
await self.my_entity_repository.update_bulk(my_entity_ids, data)
|
76
76
|
return await self.my_entity_repository.get_by_ids(my_entity_ids)
|
77
77
|
|
@@ -89,11 +89,11 @@ class MyEntityService(BaseService):
|
|
89
89
|
@BaseService.route(
|
90
90
|
"/api/v1/my-entities/bulk",
|
91
91
|
methods=["delete"],
|
92
|
-
response_model=MyEntityResponse,
|
92
|
+
response_model=list[MyEntityResponse],
|
93
93
|
)
|
94
94
|
async def delete_my_entity_bulk(
|
95
95
|
self, my_entity_ids: list[str], deleted_by: str
|
96
|
-
) -> MyEntityResponse:
|
96
|
+
) -> list[MyEntityResponse]:
|
97
97
|
my_entities = await self.my_entity_repository.get_by_ids(my_entity_ids)
|
98
98
|
await self.my_entity_repository.delete_bulk(my_entity_ids)
|
99
99
|
return my_entities
|
@@ -106,6 +106,6 @@ class MyEntityService(BaseService):
|
|
106
106
|
async def delete_my_entity(
|
107
107
|
self, my_entity_id: str, deleted_by: str
|
108
108
|
) -> MyEntityResponse:
|
109
|
-
my_entity = await self.my_entity_repository.get_by_id(
|
109
|
+
my_entity = await self.my_entity_repository.get_by_id(my_entity_id)
|
110
110
|
await self.my_entity_repository.delete(my_entity_id)
|
111
111
|
return my_entity
|
@@ -39,6 +39,7 @@ class MultipleMyEntityResponse(BaseModel):
|
|
39
39
|
|
40
40
|
|
41
41
|
class MyEntity(SQLModel, table=True):
|
42
|
+
__tablename__ = "my_entities"
|
42
43
|
id: str = Field(default_factory=lambda: ulid.new().str, primary_key=True)
|
43
44
|
created_at: datetime.datetime = Field(index=True)
|
44
45
|
created_by: str = Field(index=True)
|
@@ -3,6 +3,14 @@ from my_app_name._zrb.util import get_existing_module_names, get_existing_schema
|
|
3
3
|
from zrb import OptionInput, StrInput
|
4
4
|
from zrb.util.string.conversion import pluralize
|
5
5
|
|
6
|
+
run_env_input = OptionInput(
|
7
|
+
name="env",
|
8
|
+
description="Running environment",
|
9
|
+
prompt="Running Environment",
|
10
|
+
options=["dev", "prod"],
|
11
|
+
default_str="prod",
|
12
|
+
)
|
13
|
+
|
6
14
|
new_module_input = StrInput(
|
7
15
|
name="module", description="Module name", prompt="New module name"
|
8
16
|
)
|
@@ -9,8 +9,14 @@ from my_app_name._zrb.group import (
|
|
9
9
|
app_migrate_group,
|
10
10
|
app_run_group,
|
11
11
|
)
|
12
|
+
from my_app_name._zrb.input import run_env_input
|
12
13
|
from my_app_name._zrb.module.add_module_task import add_my_app_name_module
|
13
|
-
from my_app_name._zrb.
|
14
|
+
from my_app_name._zrb.task_util import (
|
15
|
+
create_migration,
|
16
|
+
migrate_module,
|
17
|
+
run_microservice,
|
18
|
+
run_my_app_name,
|
19
|
+
)
|
14
20
|
from my_app_name._zrb.venv_task import prepare_venv
|
15
21
|
|
16
22
|
from zrb import CmdTask, EnvFile, EnvMap, Task
|
@@ -52,6 +58,7 @@ run_monolith = app_run_group.add_task(
|
|
52
58
|
CmdTask(
|
53
59
|
name="run-monolith-my-app-name",
|
54
60
|
description="🗿 Run My App Name as a monolith",
|
61
|
+
input=run_env_input,
|
55
62
|
env=[
|
56
63
|
EnvFile(path=os.path.join(APP_DIR, "template.env")),
|
57
64
|
EnvMap(vars=MONOLITH_ENV_VARS),
|
@@ -59,7 +66,7 @@ run_monolith = app_run_group.add_task(
|
|
59
66
|
cwd=APP_DIR,
|
60
67
|
cmd=[
|
61
68
|
ACTIVATE_VENV_SCRIPT,
|
62
|
-
|
69
|
+
run_my_app_name,
|
63
70
|
],
|
64
71
|
render_cmd=False,
|
65
72
|
retries=2,
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import os
|
2
|
-
import platform
|
3
2
|
|
4
3
|
from my_app_name._zrb.config import (
|
5
4
|
ACTIVATE_VENV_SCRIPT,
|
@@ -7,9 +6,17 @@ from my_app_name._zrb.config import (
|
|
7
6
|
MICROSERVICES_ENV_VARS,
|
8
7
|
MONOLITH_ENV_VARS,
|
9
8
|
)
|
9
|
+
from my_app_name._zrb.input import run_env_input
|
10
|
+
from my_app_name._zrb.util import (
|
11
|
+
cd_module_script,
|
12
|
+
run_my_app_name,
|
13
|
+
set_create_migration_db_url_env,
|
14
|
+
set_env,
|
15
|
+
set_module_env,
|
16
|
+
)
|
10
17
|
|
11
18
|
from zrb import Cmd, CmdTask, EnvFile, EnvMap, StrInput, Task
|
12
|
-
from zrb.util.string.conversion import
|
19
|
+
from zrb.util.string.conversion import to_snake_case
|
13
20
|
|
14
21
|
|
15
22
|
def create_migration(name: str, module: str) -> Task:
|
@@ -72,6 +79,7 @@ def run_microservice(name: str, port: int, module: str) -> Task:
|
|
72
79
|
return CmdTask(
|
73
80
|
name=f"run-my-app-name-{name}",
|
74
81
|
description=f"🧩 Run My App Name {name.capitalize()}",
|
82
|
+
input=run_env_input,
|
75
83
|
env=[
|
76
84
|
EnvFile(path=os.path.join(APP_DIR, "template.env")),
|
77
85
|
EnvMap(
|
@@ -85,54 +93,8 @@ def run_microservice(name: str, port: int, module: str) -> Task:
|
|
85
93
|
ACTIVATE_VENV_SCRIPT,
|
86
94
|
set_env("MY_APP_NAME_MODULES", module),
|
87
95
|
set_env("MY_APP_NAME_PORT", f"{port}"),
|
88
|
-
|
96
|
+
run_my_app_name,
|
89
97
|
],
|
90
98
|
render_cmd=False,
|
91
99
|
retries=2,
|
92
100
|
)
|
93
|
-
|
94
|
-
|
95
|
-
def get_existing_module_names() -> list[str]:
|
96
|
-
module_dir_path = os.path.join(APP_DIR, "module")
|
97
|
-
return [entry.name for entry in os.scandir(module_dir_path) if entry.is_dir()]
|
98
|
-
|
99
|
-
|
100
|
-
def get_existing_schema_names() -> list[str]:
|
101
|
-
module_dir_path = os.path.join(APP_DIR, "schema")
|
102
|
-
return [
|
103
|
-
os.path.splitext(entry.name)[0]
|
104
|
-
for entry in os.scandir(module_dir_path)
|
105
|
-
if entry.is_file() and entry.name.endswith(".py")
|
106
|
-
]
|
107
|
-
|
108
|
-
|
109
|
-
def set_create_migration_db_url_env(module_name: str) -> str:
|
110
|
-
return set_env(
|
111
|
-
"MY_APP_NAME_DB_URL",
|
112
|
-
f"sqlite:///{APP_DIR}/.migration.{to_snake_case(module_name)}.db",
|
113
|
-
)
|
114
|
-
|
115
|
-
|
116
|
-
def set_module_env(module_name: str) -> str:
|
117
|
-
return (set_env("MY_APP_NAME_MODULES", to_snake_case(module_name)),)
|
118
|
-
|
119
|
-
|
120
|
-
def cd_module_script(module_name: str) -> str:
|
121
|
-
module_dir_path = os.path.join(APP_DIR, "module", to_snake_case(module_name))
|
122
|
-
return f"cd {module_dir_path}"
|
123
|
-
|
124
|
-
|
125
|
-
def set_env(var_name: str, var_value: str) -> str:
|
126
|
-
"""
|
127
|
-
Generates a script to set an environment variable depending on the OS.
|
128
|
-
:param var_name: Name of the environment variable.
|
129
|
-
:param var_value: Value of the environment variable.
|
130
|
-
:return: A string containing the appropriate script.
|
131
|
-
"""
|
132
|
-
if platform.system() == "Windows":
|
133
|
-
# PowerShell script for Windows
|
134
|
-
script = f'[Environment]::SetEnvironmentVariable({double_quote(var_name)}, {double_quote(var_value)}, "User")' # noqa
|
135
|
-
else:
|
136
|
-
# Bash script for Unix-like systems
|
137
|
-
script = f"export {var_name}={double_quote(var_value)}"
|
138
|
-
return script
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import os
|
2
|
+
import platform
|
3
|
+
|
4
|
+
from my_app_name._zrb.config import APP_DIR
|
5
|
+
|
6
|
+
from zrb import AnyContext
|
7
|
+
from zrb.util.string.conversion import double_quote, to_snake_case
|
8
|
+
|
9
|
+
|
10
|
+
def run_my_app_name(ctx: AnyContext) -> str:
|
11
|
+
subcommand = "dev" if ctx.input.env == "dev" else "run"
|
12
|
+
return f'fastapi {subcommand} main.py --port "${{MY_APP_NAME_PORT}}"'
|
13
|
+
|
14
|
+
|
15
|
+
def get_existing_module_names() -> list[str]:
|
16
|
+
module_dir_path = os.path.join(APP_DIR, "module")
|
17
|
+
return [entry.name for entry in os.scandir(module_dir_path) if entry.is_dir()]
|
18
|
+
|
19
|
+
|
20
|
+
def get_existing_schema_names() -> list[str]:
|
21
|
+
module_dir_path = os.path.join(APP_DIR, "schema")
|
22
|
+
return [
|
23
|
+
os.path.splitext(entry.name)[0]
|
24
|
+
for entry in os.scandir(module_dir_path)
|
25
|
+
if entry.is_file() and entry.name.endswith(".py")
|
26
|
+
]
|
27
|
+
|
28
|
+
|
29
|
+
def set_create_migration_db_url_env(module_name: str) -> str:
|
30
|
+
return set_env(
|
31
|
+
"MY_APP_NAME_DB_URL",
|
32
|
+
f"sqlite:///{APP_DIR}/.migration.{to_snake_case(module_name)}.db",
|
33
|
+
)
|
34
|
+
|
35
|
+
|
36
|
+
def set_module_env(module_name: str) -> str:
|
37
|
+
return (set_env("MY_APP_NAME_MODULES", to_snake_case(module_name)),)
|
38
|
+
|
39
|
+
|
40
|
+
def cd_module_script(module_name: str) -> str:
|
41
|
+
module_dir_path = os.path.join(APP_DIR, "module", to_snake_case(module_name))
|
42
|
+
return f"cd {module_dir_path}"
|
43
|
+
|
44
|
+
|
45
|
+
def set_env(var_name: str, var_value: str) -> str:
|
46
|
+
"""
|
47
|
+
Generates a script to set an environment variable depending on the OS.
|
48
|
+
:param var_name: Name of the environment variable.
|
49
|
+
:param var_value: Value of the environment variable.
|
50
|
+
:return: A string containing the appropriate script.
|
51
|
+
"""
|
52
|
+
if platform.system() == "Windows":
|
53
|
+
# PowerShell script for Windows
|
54
|
+
script = f'[Environment]::SetEnvironmentVariable({double_quote(var_name)}, {double_quote(var_value)}, "User")' # noqa
|
55
|
+
else:
|
56
|
+
# Bash script for Unix-like systems
|
57
|
+
script = f"export {var_name}={double_quote(var_value)}"
|
58
|
+
return script
|
@@ -122,9 +122,19 @@ class BaseDBRepository(Generic[DBModel, ResponseModel, CreateModel, UpdateModel]
|
|
122
122
|
return self._ensure_one(rows)
|
123
123
|
|
124
124
|
async def get_by_ids(self, id_list: list[str]) -> list[ResponseModel]:
|
125
|
-
|
125
|
+
rows = await self._select_to_response(
|
126
126
|
lambda q: q.where(self.db_model.id.in_(id_list))
|
127
127
|
)
|
128
|
+
# raise error if any id not in id_list
|
129
|
+
existing_id_list = [row.id for row in rows]
|
130
|
+
inexist_id_list = [id for id in id_list if id not in existing_id_list]
|
131
|
+
if len(inexist_id_list) > 0:
|
132
|
+
raise NotFoundError(
|
133
|
+
f"{self.entity_name} not found, inexist ids: {', '.join(inexist_id_list)}"
|
134
|
+
)
|
135
|
+
# sort rows
|
136
|
+
row_dict = {row.id: row for row in rows}
|
137
|
+
return [row_dict[id] for id in id_list]
|
128
138
|
|
129
139
|
async def count(self, filter: str | None = None) -> int:
|
130
140
|
count_statement = select(func.count(1)).select_from(self.db_model)
|
@@ -184,21 +194,22 @@ class BaseDBRepository(Generic[DBModel, ResponseModel, CreateModel, UpdateModel]
|
|
184
194
|
|
185
195
|
async def create_bulk(self, data_list: list[CreateModel]) -> list[DBModel]:
|
186
196
|
now = datetime.datetime.now(datetime.timezone.utc)
|
187
|
-
|
197
|
+
data_dict_list = [
|
188
198
|
self._model_to_data_dict(data, created_at=now, id=ulid.new().str)
|
189
199
|
for data in data_list
|
190
200
|
]
|
201
|
+
id_list = [data_dict["id"] for data_dict in data_dict_list]
|
191
202
|
async with self._session_scope() as session:
|
192
203
|
await self._execute_statement(
|
193
|
-
session, insert(self.db_model).values(
|
204
|
+
session, insert(self.db_model).values(data_dict_list)
|
194
205
|
)
|
195
|
-
id_list = [d["id"] for d in data_dicts]
|
196
206
|
statement = select(self.db_model).where(self.db_model.id.in_(id_list))
|
197
207
|
result = await self._execute_statement(session, statement)
|
198
|
-
|
199
|
-
self.db_model(**entity.model_dump())
|
208
|
+
row_dict = {
|
209
|
+
entity.id: self.db_model(**entity.model_dump())
|
200
210
|
for entity in result.scalars().all()
|
201
|
-
|
211
|
+
}
|
212
|
+
return [row_dict[id] for id in id_list]
|
202
213
|
|
203
214
|
async def delete(self, id: str) -> DBModel:
|
204
215
|
async with self._session_scope() as session:
|
@@ -220,11 +231,15 @@ class BaseDBRepository(Generic[DBModel, ResponseModel, CreateModel, UpdateModel]
|
|
220
231
|
await self._execute_statement(
|
221
232
|
session, delete(self.db_model).where(self.db_model.id.in_(id_list))
|
222
233
|
)
|
223
|
-
|
234
|
+
row_dict = {
|
235
|
+
entity.id: self.db_model(**entity.model_dump()) for entity in entities
|
236
|
+
}
|
237
|
+
return [row_dict[id] for id in id_list]
|
224
238
|
|
225
239
|
async def update(self, id: str, data: UpdateModel) -> DBModel:
|
226
240
|
now = datetime.datetime.now(datetime.timezone.utc)
|
227
241
|
update_data = self._model_to_data_dict(data, updated_at=now)
|
242
|
+
update_data = {k: v for k, v in update_data.items() if v is not None}
|
228
243
|
async with self._session_scope() as session:
|
229
244
|
statement = (
|
230
245
|
update(self.db_model)
|
@@ -256,7 +271,8 @@ class BaseDBRepository(Generic[DBModel, ResponseModel, CreateModel, UpdateModel]
|
|
256
271
|
result = await self._execute_statement(
|
257
272
|
session, select(self.db_model).where(self.db_model.id.in_(id_list))
|
258
273
|
)
|
259
|
-
|
260
|
-
self.db_model(**entity.model_dump())
|
274
|
+
row_dict = {
|
275
|
+
entity.id: self.db_model(**entity.model_dump())
|
261
276
|
for entity in result.scalars().all()
|
262
|
-
|
277
|
+
}
|
278
|
+
return [row_dict[id] for id in id_list]
|
@@ -56,7 +56,6 @@ class BaseService:
|
|
56
56
|
response_model: Any = None,
|
57
57
|
status_code: int | None = None,
|
58
58
|
tags: list[str | Enum] | None = None,
|
59
|
-
dependencies: Sequence[params.Depends] | None = None,
|
60
59
|
summary: str | None = None,
|
61
60
|
description: str = None,
|
62
61
|
deprecated: bool | None = None,
|
@@ -160,56 +159,62 @@ def _create_direct_client_method(logger: Logger, func: Callable, service: BaseSe
|
|
160
159
|
return client_method
|
161
160
|
|
162
161
|
|
163
|
-
def _create_api_client_method(logger: Logger,
|
162
|
+
def _create_api_client_method(logger: Logger, route_param: RouteParam, base_url: str):
|
164
163
|
async def client_method(*args, **kwargs):
|
165
|
-
url = base_url +
|
164
|
+
url = base_url + route_param.path
|
166
165
|
method = (
|
167
|
-
|
168
|
-
if isinstance(
|
169
|
-
else
|
166
|
+
route_param.methods[0].lower()
|
167
|
+
if isinstance(route_param.methods, list)
|
168
|
+
else route_param.methods.lower()
|
170
169
|
)
|
171
170
|
# Get the signature of the original function
|
172
|
-
sig = inspect.signature(
|
171
|
+
sig = inspect.signature(route_param.func)
|
173
172
|
# Bind the arguments to the signature
|
174
173
|
bound_args = sig.bind(*args, **kwargs)
|
175
174
|
bound_args.apply_defaults()
|
176
175
|
# Analyze parameters
|
177
|
-
|
178
|
-
|
179
|
-
p
|
180
|
-
for p in
|
181
|
-
if
|
176
|
+
function_params = list(sig.parameters.values())
|
177
|
+
body_param_names = [
|
178
|
+
p.name
|
179
|
+
for p in function_params
|
180
|
+
if (
|
181
|
+
p.name != "self"
|
182
|
+
and f"{{{p.name}}}" not in route_param.path
|
183
|
+
and p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
|
184
|
+
and (
|
185
|
+
method not in ["get", "delete"]
|
186
|
+
or (method == "delete" and p.annotation not in [str, float, bool])
|
187
|
+
)
|
188
|
+
)
|
182
189
|
]
|
183
190
|
# Prepare the request
|
184
191
|
path_params = {}
|
185
192
|
query_params = {}
|
186
|
-
|
193
|
+
body_params = {}
|
187
194
|
for name, value in bound_args.arguments.items():
|
188
195
|
if name == "self":
|
189
196
|
continue
|
190
|
-
if f"{{{name}}}" in
|
197
|
+
if f"{{{name}}}" in route_param.path:
|
191
198
|
path_params[name] = value
|
192
|
-
elif
|
193
|
-
body = _parse_api_param(value)
|
194
|
-
elif method in ["get", "delete"]:
|
199
|
+
elif name not in body_param_names:
|
195
200
|
query_params[name] = _parse_api_param(value)
|
196
|
-
elif len(
|
201
|
+
elif len(body_param_names) == 1 and name == body_param_names[0]:
|
197
202
|
# If there's only one body parameter, use its value directly
|
198
|
-
|
203
|
+
body_params = _parse_api_param(value)
|
199
204
|
else:
|
200
|
-
|
205
|
+
body_params[name] = _parse_api_param(value)
|
201
206
|
# Format the URL with path parameters
|
202
207
|
url = url.format(**path_params)
|
203
208
|
logger.info(
|
204
|
-
f"Sending request to {url} with method {method}, json={
|
209
|
+
f"Sending request to {url} with method {method}, json={body_params}, params={query_params}" # noqa
|
205
210
|
)
|
206
211
|
async with httpx.AsyncClient() as client:
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
212
|
+
response = await client.request(
|
213
|
+
method=method,
|
214
|
+
url=url,
|
215
|
+
params=query_params,
|
216
|
+
json=None if method == "get" else body_params,
|
217
|
+
)
|
213
218
|
logger.info(
|
214
219
|
f"Received response: status={response.status_code}, content={response.content}"
|
215
220
|
)
|
@@ -8,11 +8,26 @@ class NotFoundError(HTTPException):
|
|
8
8
|
super().__init__(404, {"message": message}, headers)
|
9
9
|
|
10
10
|
|
11
|
+
class ForbiddenError(HTTPException):
|
12
|
+
def __init__(self, message: str, headers: Dict[str, str] | None = None) -> None:
|
13
|
+
super().__init__(403, {"message": message}, headers)
|
14
|
+
|
15
|
+
|
16
|
+
class UnauthorizedError(HTTPException):
|
17
|
+
def __init__(self, message: str, headers: Dict[str, str] | None = None) -> None:
|
18
|
+
super().__init__(401, {"message": message}, headers)
|
19
|
+
|
20
|
+
|
11
21
|
class InvalidValueError(HTTPException):
|
12
22
|
def __init__(self, message: str, headers: Dict[str, str] | None = None) -> None:
|
13
23
|
super().__init__(422, {"message": message}, headers)
|
14
24
|
|
15
25
|
|
26
|
+
class InternalServerError(HTTPException):
|
27
|
+
def __init__(self, message: str, headers: Dict[str, str] | None = None) -> None:
|
28
|
+
super().__init__(500, {"message": message}, headers)
|
29
|
+
|
30
|
+
|
16
31
|
class ClientAPIError(HTTPException):
|
17
32
|
def __init__(
|
18
33
|
self, status_code: int, message: str, headers: Dict[str, str] | None = None
|