zrb 0.6.0__py3-none-any.whl → 0.6.1__py3-none-any.whl
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/__init__.py +24 -20
- zrb/__main__.py +5 -5
- zrb/action/runner.py +22 -30
- zrb/advertisement.py +10 -9
- zrb/builtin/__init__.py +18 -16
- zrb/builtin/base64.py +13 -18
- zrb/builtin/devtool/__init__.py +14 -3
- zrb/builtin/devtool/devtool_install.py +207 -221
- zrb/builtin/env.py +9 -12
- zrb/builtin/eval.py +9 -9
- zrb/builtin/explain.py +73 -74
- zrb/builtin/generator/__init__.py +7 -11
- zrb/builtin/generator/app_generator/add.py +86 -87
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/add.py +78 -77
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +6 -6
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +32 -32
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +29 -30
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +1 -3
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +5 -4
- zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/add.py +89 -87
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +42 -54
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +34 -32
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +19 -22
- zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +18 -18
- zrb/builtin/generator/app_generator/template/http-port/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +10 -10
- zrb/builtin/generator/app_generator/template/http-port-build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +19 -19
- zrb/builtin/generator/app_generator/template/use-helm/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +12 -14
- zrb/builtin/generator/cmd_task/add.py +23 -25
- zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +3 -5
- zrb/builtin/generator/common/helper.py +15 -20
- zrb/builtin/generator/common/task_factory.py +29 -26
- zrb/builtin/generator/common/task_input.py +97 -91
- zrb/builtin/generator/docker_compose_task/add.py +38 -39
- zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +13 -19
- zrb/builtin/generator/docker_compose_task/template/src/kebab-zrb-task-name/image/main.py +18 -14
- zrb/builtin/generator/fastapp/add.py +94 -90
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_checker.py +28 -27
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_config.py +68 -39
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env.py +24 -22
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env_file.py +12 -12
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_get_start_microservices.py +43 -41
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_helper.py +23 -24
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_input.py +21 -20
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-load-test.sh +1 -1
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-start.sh +1 -1
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-test.sh +2 -2
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +46 -39
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +28 -20
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +21 -27
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +23 -18
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +35 -36
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +68 -58
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +24 -38
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/__main__.py +23 -21
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/_common.py +72 -75
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/app_helper.py +70 -75
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_postgresql_helper.py +18 -21
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_rabbitmq_helper.py +11 -19
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_redpanda_helper.py +18 -15
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_signoz_helper.py +17 -21
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/docker-compose.yml +12 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/loadtest/locustfile.py +10 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/Dockerfile +1 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app.py +35 -30
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_lifespan.py +21 -17
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_state.py +3 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/db_connection.py +18 -20
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/frontend_index.py +5 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/log.py +7 -15
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus.py +38 -34
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/rpc.py +19 -18
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/config.py +68 -103
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/error.py +11 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/__init__.py +2 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/admin.py +38 -35
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/consumer.py +38 -45
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/publisher.py +26 -29
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/messagebus.py +8 -14
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/mock.py +12 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/admin.py +37 -44
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/consumer.py +42 -67
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/publisher.py +32 -55
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/model/repo_model.py +11 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/__init__.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_entity_mixin.py +3 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_repo.py +76 -83
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/repo.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/search_filter.py +1 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/__init__.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/caller.py +17 -19
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/server.py +14 -18
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/rpc.py +15 -28
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/__init__.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/base_schema.py +6 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/__init__.py +1 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/serializer.py +3 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/async_task.py +3 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/conversion.py +10 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/migration.py +6 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/migrate.py +3 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/api.py +7 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/__init__.py +4 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_scheme.py +9 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_util.py +6 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/authorizer.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/bearer_token_scheme.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/model/user_model.py +8 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/password_hasher.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/refresh_token_util.py +7 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/group_repo.py +3 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/permission_repo.py +3 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/user_repo.py +3 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/user.py +12 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py +7 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/scheme.py +7 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/util.py +20 -30
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/authorizer.py +1 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/rpc_authorizer.py +5 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/bcrypt_password_hasher.py +3 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/password_hasher.py +0 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/refresh_token/util.py +15 -21
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py +42 -49
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py +3 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +18 -16
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +26 -41
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/api.py +46 -51
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/model.py +5 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/repo.py +11 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +28 -45
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/table.py +10 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +60 -72
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +32 -61
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +33 -36
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +42 -61
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/event.py +2 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +3 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +11 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +19 -26
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/rpc.py +5 -13
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +6 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +3 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/token.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +4 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/api.py +4 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/model/activity_model.py +3 -9
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/repo/activity_repo.py +3 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/core/historical_repo_model.py +13 -13
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/api.py +22 -23
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +5 -7
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/model.py +2 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/repo.py +8 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +28 -45
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/table.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/event.py +4 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/register_module.py +10 -11
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/rpc.py +3 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +3 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/requirements.txt +12 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +76 -106
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +73 -103
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +92 -122
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +107 -134
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/conftest.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +8 -15
- zrb/builtin/generator/fastapp_crud/add.py +74 -79
- zrb/builtin/generator/fastapp_crud/helper.py +51 -48
- zrb/builtin/generator/fastapp_crud/task_factory.py +17 -14
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/model/snake_zrb_entity_name_model.py +2 -2
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/repo/snake_zrb_entity_name_repo.py +3 -2
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/api.py +58 -40
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/model.py +7 -3
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +9 -4
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +32 -39
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +3 -1
- zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +68 -98
- zrb/builtin/generator/fastapp_field/add.py +143 -85
- zrb/builtin/generator/fastapp_field/helper.py +184 -125
- zrb/builtin/generator/fastapp_module/add.py +90 -67
- zrb/builtin/generator/fastapp_module/helper.py +141 -155
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/api.py +3 -2
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/table.py +3 -3
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/event.py +3 -5
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -4
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +10 -11
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py +3 -5
- zrb/builtin/generator/pip_package/add.py +39 -40
- zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +30 -30
- zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__init__.py +1 -0
- zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__main__.py +1 -0
- zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/util.py +2 -2
- zrb/builtin/generator/plugin/create.py +39 -36
- zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__init__.py +1 -1
- zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__main__.py +1 -0
- zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/task/example_task.py +6 -4
- zrb/builtin/generator/plugin/template/zrb_init.py +27 -27
- zrb/builtin/generator/project/create.py +38 -46
- zrb/builtin/generator/project/template/.flake8 +3 -0
- zrb/builtin/generator/project/template/project.sh +19 -10
- zrb/builtin/generator/project_task/task_factory.py +60 -61
- zrb/builtin/generator/project_task/template/_automate/_project/__init__.py +2 -2
- zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +4 -4
- zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +4 -4
- zrb/builtin/generator/python_task/add.py +25 -33
- zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +8 -7
- zrb/builtin/generator/simple_python_app/add.py +81 -75
- zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/_common.py +14 -15
- zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +46 -61
- zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +34 -32
- zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +19 -22
- zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +23 -25
- zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
- zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/main.py +18 -14
- zrb/builtin/git.py +46 -46
- zrb/builtin/group.py +13 -34
- zrb/builtin/helper/reccuring_action.py +26 -29
- zrb/builtin/md5.py +17 -30
- zrb/builtin/process.py +19 -19
- zrb/builtin/project.py +13 -15
- zrb/builtin/say.py +69 -88
- zrb/builtin/schedule.py +15 -19
- zrb/builtin/ubuntu.py +44 -35
- zrb/builtin/update.py +5 -5
- zrb/builtin/version.py +3 -7
- zrb/builtin/watch_changes.py +24 -25
- zrb/config/config.py +19 -18
- zrb/helper/accessories/color.py +18 -6
- zrb/helper/accessories/icon.py +24 -3
- zrb/helper/accessories/name.py +120 -28
- zrb/helper/advertisement.py +9 -13
- zrb/helper/callable.py +2 -4
- zrb/helper/cli.py +27 -31
- zrb/helper/codemod/add_argument_to_function.py +3 -4
- zrb/helper/codemod/add_argument_to_function_call.py +4 -7
- zrb/helper/codemod/add_assert_resource.py +7 -7
- zrb/helper/codemod/add_function_call.py +3 -5
- zrb/helper/codemod/add_import_module.py +15 -26
- zrb/helper/codemod/add_key_value_to_dict.py +7 -10
- zrb/helper/codemod/add_property_to_class.py +10 -8
- zrb/helper/codemod/add_upstream_to_task.py +21 -33
- zrb/helper/codemod/append_code_to_function.py +6 -13
- zrb/helper/codemod/format_code.py +2 -1
- zrb/helper/default_env.py +25 -25
- zrb/helper/docker_compose/fetch_external_env.py +18 -18
- zrb/helper/docker_compose/file.py +5 -4
- zrb/helper/docstring.py +44 -47
- zrb/helper/env_map/fetch.py +7 -12
- zrb/helper/file/copy_tree.py +12 -17
- zrb/helper/file/match.py +6 -7
- zrb/helper/file/text.py +8 -6
- zrb/helper/git/detect_changes.py +9 -8
- zrb/helper/loader/load_module.py +14 -13
- zrb/helper/log.py +4 -3
- zrb/helper/map/conversion.py +4 -5
- zrb/helper/python_task.py +2 -4
- zrb/helper/render_data.py +25 -18
- zrb/helper/string/constant.py +2 -2
- zrb/helper/string/conversion.py +17 -16
- zrb/helper/string/jinja.py +2 -2
- zrb/helper/typecheck.py +6 -4
- zrb/helper/typing.py +10 -2
- zrb/helper/util.py +44 -40
- zrb/task/any_task.py +251 -251
- zrb/task/base_remote_cmd_task.py +76 -59
- zrb/task/base_task/base_task.py +95 -108
- zrb/task/base_task/component/base_task_model.py +73 -71
- zrb/task/base_task/component/common_task_model.py +42 -29
- zrb/task/base_task/component/pid_model.py +3 -5
- zrb/task/base_task/component/renderer.py +26 -36
- zrb/task/base_task/component/trackers.py +6 -9
- zrb/task/checker.py +14 -9
- zrb/task/cmd_task.py +102 -100
- zrb/task/decorator.py +19 -13
- zrb/task/docker_compose_task.py +127 -98
- zrb/task/flow_task.py +16 -19
- zrb/task/http_checker.py +40 -36
- zrb/task/notifier.py +50 -38
- zrb/task/parallel.py +3 -3
- zrb/task/path_checker.py +34 -27
- zrb/task/path_watcher.py +49 -40
- zrb/task/port_checker.py +33 -26
- zrb/task/recurring_task.py +36 -42
- zrb/task/remote_cmd_task.py +31 -28
- zrb/task/resource_maker.py +66 -52
- zrb/task/rsync_task.py +24 -21
- zrb/task/task.py +4 -3
- zrb/task/time_watcher.py +36 -31
- zrb/task_env/constant.py +1 -1
- zrb/task_env/env.py +33 -31
- zrb/task_env/env_file.py +24 -23
- zrb/task_group/group.py +27 -30
- zrb/task_input/any_input.py +18 -16
- zrb/task_input/base_input.py +26 -26
- zrb/task_input/bool_input.py +6 -6
- zrb/task_input/choice_input.py +11 -9
- zrb/task_input/constant.py +1 -1
- zrb/task_input/float_input.py +6 -5
- zrb/task_input/int_input.py +8 -8
- zrb/task_input/password_input.py +9 -9
- zrb/task_input/str_input.py +8 -8
- zrb/task_input/task_input.py +4 -2
- {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/METADATA +3 -1
- {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/RECORD +316 -315
- {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/LICENSE +0 -0
- {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/WHEEL +0 -0
- {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/entry_points.txt +0 -0
@@ -1,14 +1,15 @@
|
|
1
|
-
from zrb.helper.typecheck import typechecked
|
2
|
-
from zrb.helper.typing import Optional, Union, Tuple
|
3
1
|
import libcst as cst
|
4
2
|
|
3
|
+
from zrb.helper.typecheck import typechecked
|
4
|
+
from zrb.helper.typing import Optional, Tuple, Union
|
5
|
+
|
5
6
|
|
6
7
|
@typechecked
|
7
8
|
def add_import_module(
|
8
9
|
code: str,
|
9
10
|
module_path: str,
|
10
11
|
resource: Optional[str] = None,
|
11
|
-
alias: Optional[str] = None
|
12
|
+
alias: Optional[str] = None,
|
12
13
|
) -> str:
|
13
14
|
"""
|
14
15
|
Parses the given code as a module using `libcst.parse_module()`,
|
@@ -29,16 +30,14 @@ def add_import_module(
|
|
29
30
|
"""
|
30
31
|
module = cst.parse_module(code)
|
31
32
|
new_import = _get_new_import(
|
32
|
-
module_path=module_path,
|
33
|
-
resource=resource,
|
34
|
-
alias=alias
|
33
|
+
module_path=module_path, resource=resource, alias=alias
|
35
34
|
)
|
36
35
|
|
37
36
|
last_import_index = None
|
38
37
|
for i, node in enumerate(module.body):
|
39
38
|
if isinstance(node, cst.SimpleStatementLine) and (
|
40
|
-
isinstance(node.body[0], cst.Import)
|
41
|
-
isinstance(node.body[0], cst.ImportFrom)
|
39
|
+
isinstance(node.body[0], cst.Import)
|
40
|
+
or isinstance(node.body[0], cst.ImportFrom)
|
42
41
|
):
|
43
42
|
last_import_index = i
|
44
43
|
|
@@ -58,44 +57,34 @@ def add_import_module(
|
|
58
57
|
|
59
58
|
|
60
59
|
def _get_new_import(
|
61
|
-
module_path: str,
|
62
|
-
resource: Optional[str] = None,
|
63
|
-
alias: Optional[str] = None
|
60
|
+
module_path: str, resource: Optional[str] = None, alias: Optional[str] = None
|
64
61
|
) -> Union[cst.ImportFrom, cst.Import]:
|
65
62
|
dots, module_path = _split_module_path(module_path)
|
66
63
|
relative = [cst.Dot()] * len(dots)
|
67
64
|
if resource is None:
|
68
65
|
if len(relative) > 0:
|
69
|
-
raise Exception(
|
70
|
-
'Relative import is not allowed, please specify resource'
|
71
|
-
)
|
66
|
+
raise Exception("Relative import is not allowed, please specify resource")
|
72
67
|
return cst.Import(
|
73
68
|
names=[
|
74
69
|
cst.ImportAlias(
|
75
|
-
name=cst.parse_expression(module_path),
|
76
|
-
asname=_get_as_name(alias)
|
70
|
+
name=cst.parse_expression(module_path), asname=_get_as_name(alias)
|
77
71
|
)
|
78
72
|
],
|
79
73
|
)
|
80
74
|
return cst.ImportFrom(
|
81
75
|
module=cst.parse_expression(module_path),
|
82
|
-
names=[
|
83
|
-
|
84
|
-
name=cst.Name(resource),
|
85
|
-
asname=_get_as_name(alias)
|
86
|
-
)
|
87
|
-
],
|
88
|
-
relative=relative
|
76
|
+
names=[cst.ImportAlias(name=cst.Name(resource), asname=_get_as_name(alias))],
|
77
|
+
relative=relative,
|
89
78
|
)
|
90
79
|
|
91
80
|
|
92
81
|
@typechecked
|
93
82
|
def _split_module_path(module_path) -> Tuple[str, str]:
|
94
|
-
prefix =
|
95
|
-
suffix =
|
83
|
+
prefix = ""
|
84
|
+
suffix = ""
|
96
85
|
is_prefix = True
|
97
86
|
for char in module_path:
|
98
|
-
if char !=
|
87
|
+
if char != ".":
|
99
88
|
is_prefix = False
|
100
89
|
if is_prefix:
|
101
90
|
prefix += char
|
@@ -1,13 +1,15 @@
|
|
1
|
-
from zrb.helper.typecheck import typechecked
|
2
1
|
import libcst as cst
|
3
2
|
|
3
|
+
from zrb.helper.typecheck import typechecked
|
4
|
+
|
4
5
|
|
5
6
|
@typechecked
|
6
7
|
class AddKeyValuePairTransformer(cst.CSTTransformer):
|
7
8
|
def __init__(
|
8
|
-
self,
|
9
|
+
self,
|
10
|
+
dict_name: str,
|
9
11
|
key_node: cst.BaseExpression,
|
10
|
-
value_node: cst.BaseExpression
|
12
|
+
value_node: cst.BaseExpression,
|
11
13
|
):
|
12
14
|
self.dict_name = dict_name
|
13
15
|
self.key_node = key_node
|
@@ -24,10 +26,7 @@ class AddKeyValuePairTransformer(cst.CSTTransformer):
|
|
24
26
|
):
|
25
27
|
for element in updated_node.value.elements:
|
26
28
|
key = element.key
|
27
|
-
if (
|
28
|
-
isinstance(key, cst.BaseExpression)
|
29
|
-
and key.value == self.key_node
|
30
|
-
):
|
29
|
+
if isinstance(key, cst.BaseExpression) and key.value == self.key_node:
|
31
30
|
return updated_node
|
32
31
|
new_elements = updated_node.value.elements + (
|
33
32
|
cst.DictElement(self.key_node, self.value_node),
|
@@ -37,9 +36,7 @@ class AddKeyValuePairTransformer(cst.CSTTransformer):
|
|
37
36
|
return updated_node
|
38
37
|
|
39
38
|
|
40
|
-
def add_key_value_to_dict(
|
41
|
-
code: str, dict_name: str, key: str, value: str
|
42
|
-
) -> str:
|
39
|
+
def add_key_value_to_dict(code: str, dict_name: str, key: str, value: str) -> str:
|
43
40
|
module = cst.parse_module(code)
|
44
41
|
key_node = cst.parse_expression(key)
|
45
42
|
value_node = cst.parse_expression(value)
|
@@ -1,6 +1,7 @@
|
|
1
|
+
import libcst as cst
|
2
|
+
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Optional
|
3
|
-
import libcst as cst
|
4
5
|
|
5
6
|
|
6
7
|
@typechecked
|
@@ -10,7 +11,7 @@ class AddPropertyTransformer(cst.CSTTransformer):
|
|
10
11
|
class_name: str,
|
11
12
|
property_name_node: cst.Name,
|
12
13
|
property_type_node: cst.Annotation,
|
13
|
-
property_value_node: Optional[cst.BaseExpression]
|
14
|
+
property_value_node: Optional[cst.BaseExpression],
|
14
15
|
):
|
15
16
|
self.class_name = class_name
|
16
17
|
self.property_name_node = property_name_node
|
@@ -27,9 +28,10 @@ class AddPropertyTransformer(cst.CSTTransformer):
|
|
27
28
|
if not isinstance(original_node.body, cst.EmptyLine):
|
28
29
|
for stmt in original_node.body.body:
|
29
30
|
if (
|
30
|
-
hasattr(stmt,
|
31
|
-
|
32
|
-
|
31
|
+
hasattr(stmt, "body")
|
32
|
+
and not isinstance(stmt.body, cst.IndentedBlock)
|
33
|
+
and len(stmt.body) > 0
|
34
|
+
and isinstance(stmt.body[0], cst.Pass)
|
33
35
|
):
|
34
36
|
continue
|
35
37
|
# Add all old class body except any `pass` statement
|
@@ -59,7 +61,7 @@ def add_property_to_class(
|
|
59
61
|
class_name: str,
|
60
62
|
property_name: str,
|
61
63
|
property_type: str,
|
62
|
-
property_value: Optional[str] = None
|
64
|
+
property_value: Optional[str] = None,
|
63
65
|
) -> str:
|
64
66
|
module = cst.parse_module(code)
|
65
67
|
property_name_node = cst.Name(value=property_name)
|
@@ -70,14 +72,14 @@ def add_property_to_class(
|
|
70
72
|
class_name=class_name,
|
71
73
|
property_name_node=property_name_node,
|
72
74
|
property_type_node=property_type_node,
|
73
|
-
property_value_node=property_value_node
|
75
|
+
property_value_node=property_value_node,
|
74
76
|
)
|
75
77
|
)
|
76
78
|
return transformed_module.code
|
77
79
|
|
78
80
|
|
79
81
|
def _get_property_value_node(
|
80
|
-
property_value: Optional[str]
|
82
|
+
property_value: Optional[str],
|
81
83
|
) -> Optional[cst.BaseExpression]:
|
82
84
|
if property_value is None:
|
83
85
|
return None
|
@@ -1,6 +1,7 @@
|
|
1
|
-
from zrb.helper.typecheck import typechecked
|
2
1
|
import libcst as cst
|
3
2
|
|
3
|
+
from zrb.helper.typecheck import typechecked
|
4
|
+
|
4
5
|
|
5
6
|
@typechecked
|
6
7
|
class TaskTransformer(cst.CSTTransformer):
|
@@ -12,10 +13,7 @@ class TaskTransformer(cst.CSTTransformer):
|
|
12
13
|
self._upstream_added = False
|
13
14
|
|
14
15
|
def _is_task(self, node: cst.Call) -> bool:
|
15
|
-
if (
|
16
|
-
not isinstance(node.func, cst.Name)
|
17
|
-
or node.func.value != "Task"
|
18
|
-
):
|
16
|
+
if not isinstance(node.func, cst.Name) or node.func.value != "Task":
|
19
17
|
return False
|
20
18
|
# Look for name keyword
|
21
19
|
for name_arg in node.args:
|
@@ -33,9 +31,7 @@ class TaskTransformer(cst.CSTTransformer):
|
|
33
31
|
if self._is_task(node):
|
34
32
|
self._on_task_call = True
|
35
33
|
|
36
|
-
def leave_Call(
|
37
|
-
self, original_node: cst.Call, updated_node: cst.Call
|
38
|
-
) -> cst.Call:
|
34
|
+
def leave_Call(self, original_node: cst.Call, updated_node: cst.Call) -> cst.Call:
|
39
35
|
# Remove flags.
|
40
36
|
# If upstreams argument not found (see: self.leave_Arg), add it
|
41
37
|
if not self._is_task(updated_node):
|
@@ -44,16 +40,16 @@ class TaskTransformer(cst.CSTTransformer):
|
|
44
40
|
if self._upstream_added:
|
45
41
|
return updated_node
|
46
42
|
new_args = [arg for arg in updated_node.args]
|
47
|
-
new_args.append(
|
48
|
-
|
49
|
-
|
50
|
-
cst.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
return updated_node.with_changes(
|
55
|
-
args=new_args
|
43
|
+
new_args.append(
|
44
|
+
cst.Arg(
|
45
|
+
keyword=cst.parse_expression("upstreams"),
|
46
|
+
value=cst.List(
|
47
|
+
[cst.Element(cst.parse_expression(self.upstream_task_name))]
|
48
|
+
),
|
49
|
+
)
|
56
50
|
)
|
51
|
+
self._upstream_added = True
|
52
|
+
return updated_node.with_changes(args=new_args)
|
57
53
|
|
58
54
|
def leave_Arg(self, orginnal_node: cst.Arg, updated_node: cst.Arg):
|
59
55
|
# Once the flag was set (see: self.visit_Call), look for
|
@@ -61,25 +57,19 @@ class TaskTransformer(cst.CSTTransformer):
|
|
61
57
|
if (
|
62
58
|
not self._on_task_call
|
63
59
|
or updated_node.keyword is None
|
64
|
-
or updated_node.keyword.value !=
|
60
|
+
or updated_node.keyword.value != "upstreams"
|
65
61
|
):
|
66
62
|
return updated_node
|
67
|
-
new_elements = [
|
68
|
-
|
69
|
-
|
70
|
-
new_elements.append(cst.Element(
|
71
|
-
value=cst.parse_expression(self.upstream_task_name)
|
72
|
-
))
|
73
|
-
self._upstream_added = True
|
74
|
-
return updated_node.with_changes(
|
75
|
-
value=cst.List(new_elements)
|
63
|
+
new_elements = [old_element for old_element in updated_node.value.elements]
|
64
|
+
new_elements.append(
|
65
|
+
cst.Element(value=cst.parse_expression(self.upstream_task_name))
|
76
66
|
)
|
67
|
+
self._upstream_added = True
|
68
|
+
return updated_node.with_changes(value=cst.List(new_elements))
|
77
69
|
|
78
70
|
|
79
71
|
@typechecked
|
80
|
-
def add_upstream_to_task(
|
81
|
-
code: str, task_name: str, upstream_task_name: str
|
82
|
-
) -> str:
|
72
|
+
def add_upstream_to_task(code: str, task_name: str, upstream_task_name: str) -> str:
|
83
73
|
"""
|
84
74
|
Transformer to add an upstream task to a Task object.
|
85
75
|
|
@@ -91,9 +81,7 @@ def add_upstream_to_task(
|
|
91
81
|
Returns:
|
92
82
|
A modified version of the input code with the upstream task added.
|
93
83
|
"""
|
94
|
-
transformer: TaskTransformer = TaskTransformer(
|
95
|
-
task_name, upstream_task_name
|
96
|
-
)
|
84
|
+
transformer: TaskTransformer = TaskTransformer(task_name, upstream_task_name)
|
97
85
|
original_tree: cst.Module = cst.parse_module(code)
|
98
86
|
modified_tree: cst.Module = original_tree.visit(transformer)
|
99
87
|
return modified_tree.code
|
@@ -1,6 +1,7 @@
|
|
1
|
-
from zrb.helper.typecheck import typechecked
|
2
1
|
import libcst as cst
|
3
2
|
|
3
|
+
from zrb.helper.typecheck import typechecked
|
4
|
+
|
4
5
|
|
5
6
|
@typechecked
|
6
7
|
class AppendCodeTransformer(cst.CSTTransformer):
|
@@ -13,21 +14,13 @@ class AppendCodeTransformer(cst.CSTTransformer):
|
|
13
14
|
self, original_node: cst.FunctionDef, updated_node: cst.FunctionDef
|
14
15
|
) -> cst.FunctionDef:
|
15
16
|
if updated_node.name.value == self.function_name:
|
16
|
-
new_body = updated_node.body.body + (
|
17
|
-
|
18
|
-
)
|
19
|
-
return updated_node.with_changes(
|
20
|
-
body=cst.IndentedBlock(body=new_body)
|
21
|
-
)
|
17
|
+
new_body = updated_node.body.body + (cst.parse_statement(self.new_code),)
|
18
|
+
return updated_node.with_changes(body=cst.IndentedBlock(body=new_body))
|
22
19
|
return updated_node
|
23
20
|
|
24
21
|
|
25
22
|
@typechecked
|
26
|
-
def append_code_to_function(
|
27
|
-
code: str, function_name: str, new_code: str
|
28
|
-
) -> str:
|
23
|
+
def append_code_to_function(code: str, function_name: str, new_code: str) -> str:
|
29
24
|
module = cst.parse_module(code)
|
30
|
-
transformed_module = module.visit(
|
31
|
-
AppendCodeTransformer(function_name, new_code)
|
32
|
-
)
|
25
|
+
transformed_module = module.visit(AppendCodeTransformer(function_name, new_code))
|
33
26
|
return transformed_module.code
|
zrb/helper/default_env.py
CHANGED
@@ -1,58 +1,58 @@
|
|
1
|
+
import logging
|
2
|
+
import os
|
3
|
+
from functools import lru_cache
|
4
|
+
|
1
5
|
from zrb.config.config import logging_level
|
2
|
-
from zrb.helper.typecheck import typechecked
|
3
|
-
from zrb.helper.typing import Mapping, Optional
|
4
6
|
from zrb.helper.accessories.color import colored
|
5
7
|
from zrb.helper.log import logger
|
6
|
-
from
|
7
|
-
|
8
|
-
import logging
|
9
|
-
import os
|
8
|
+
from zrb.helper.typecheck import typechecked
|
9
|
+
from zrb.helper.typing import Mapping, Optional
|
10
10
|
|
11
11
|
_PROJECT_DIR_MAP: Mapping[str, str] = {}
|
12
12
|
|
13
13
|
|
14
14
|
def inject_default_env():
|
15
15
|
# Inject PYTHONUNBUFFERED
|
16
|
-
if
|
16
|
+
if "PYTHONUNBUFFERED" not in os.environ:
|
17
17
|
if logging_level <= logging.INFO:
|
18
|
-
logger.info(colored(
|
19
|
-
os.environ[
|
18
|
+
logger.info(colored("Set PYTHONUNBUFFERED to 1", attrs=["dark"]))
|
19
|
+
os.environ["PYTHONUNBUFFERED"] = "1"
|
20
20
|
# Inject ZRB_HOME_DIR
|
21
|
-
if
|
21
|
+
if "ZRB_HOME_DIR" not in os.environ:
|
22
22
|
default_home_dir = os.path.dirname(os.path.dirname(__file__))
|
23
23
|
if logging_level <= logging.INFO:
|
24
|
-
logger.info(
|
25
|
-
f
|
26
|
-
)
|
27
|
-
os.environ[
|
24
|
+
logger.info(
|
25
|
+
colored(f"Set ZRB_HOME_DIR to {default_home_dir}", attrs=["dark"])
|
26
|
+
)
|
27
|
+
os.environ["ZRB_HOME_DIR"] = default_home_dir
|
28
28
|
# Inject ZRB_PROJECT_DIR
|
29
29
|
current_dir = os.getcwd()
|
30
30
|
if current_dir not in _PROJECT_DIR_MAP:
|
31
31
|
if logging_level <= logging.INFO:
|
32
|
-
logger.info(colored(
|
32
|
+
logger.info(colored("Getting project directory", attrs=["dark"]))
|
33
33
|
zrb_project_dir = _get_project_dir(current_dir)
|
34
34
|
if zrb_project_dir is None:
|
35
35
|
zrb_project_dir = current_dir
|
36
36
|
_PROJECT_DIR_MAP[current_dir] = zrb_project_dir
|
37
37
|
if logging_level <= logging.INFO:
|
38
|
-
logger.info(
|
39
|
-
f
|
40
|
-
)
|
41
|
-
os.environ[
|
38
|
+
logger.info(
|
39
|
+
colored(f"Set ZRB_PROJECT_DIR to {zrb_project_dir}", attrs=["dark"])
|
40
|
+
)
|
41
|
+
os.environ["ZRB_PROJECT_DIR"] = zrb_project_dir
|
42
42
|
# Inject ZRB_PROJECT_NAME
|
43
|
-
if
|
43
|
+
if "ZRB_PROJECT_NAME" not in os.environ:
|
44
44
|
zrb_project_name = os.path.basename(zrb_project_dir)
|
45
45
|
if logging_level <= logging.INFO:
|
46
|
-
logger.info(
|
47
|
-
f
|
48
|
-
)
|
49
|
-
os.environ[
|
46
|
+
logger.info(
|
47
|
+
colored(f"Set ZRB_PROJECT_NAME to {zrb_project_name}", attrs=["dark"])
|
48
|
+
)
|
49
|
+
os.environ["ZRB_PROJECT_NAME"] = zrb_project_name
|
50
50
|
|
51
51
|
|
52
52
|
@lru_cache
|
53
53
|
@typechecked
|
54
54
|
def _get_project_dir(project_dir: str) -> Optional[str]:
|
55
|
-
project_script = os.path.join(project_dir,
|
55
|
+
project_script = os.path.join(project_dir, "zrb_init.py")
|
56
56
|
if os.path.isfile(project_script):
|
57
57
|
return project_dir
|
58
58
|
# zrb_init.py not found, look for it on the parent directory
|
@@ -5,15 +5,15 @@ from zrb.helper.typing import Any, List, Mapping
|
|
5
5
|
@typechecked
|
6
6
|
def fetch_compose_file_env_map(data: Any) -> Mapping[str, str]:
|
7
7
|
global_env_dict = {}
|
8
|
-
if
|
8
|
+
if "services" not in data:
|
9
9
|
return global_env_dict
|
10
|
-
for service in data[
|
11
|
-
if
|
10
|
+
for service in data["services"]:
|
11
|
+
if "environment" not in data["services"][service]:
|
12
12
|
continue
|
13
|
-
environments = data[
|
13
|
+
environments = data["services"][service]["environment"]
|
14
14
|
if isinstance(environments, list):
|
15
15
|
for environment in environments:
|
16
|
-
parts: List[str] = environment.split(
|
16
|
+
parts: List[str] = environment.split("=")
|
17
17
|
if len(parts) > 0:
|
18
18
|
env_str = str(parts[1])
|
19
19
|
env_dict = parse_compose_file_env_string(env_str)
|
@@ -30,29 +30,29 @@ def fetch_compose_file_env_map(data: Any) -> Mapping[str, str]:
|
|
30
30
|
def parse_compose_file_env_string(env_str: str) -> Mapping[str, str]:
|
31
31
|
env_dict = {}
|
32
32
|
stack = []
|
33
|
-
key =
|
34
|
-
value =
|
33
|
+
key = ""
|
34
|
+
value = ""
|
35
35
|
index = 0
|
36
36
|
while index < len(env_str):
|
37
37
|
char = env_str[index]
|
38
|
-
if char ==
|
38
|
+
if char == "{":
|
39
39
|
stack.append(index)
|
40
|
-
elif char ==
|
40
|
+
elif char == "}":
|
41
41
|
start = stack.pop()
|
42
42
|
if not stack:
|
43
|
-
segment = env_str[start+1:index]
|
44
|
-
if
|
45
|
-
key, value = segment.split(
|
46
|
-
if value.startswith(
|
43
|
+
segment = env_str[start + 1 : index]
|
44
|
+
if ":-" in segment:
|
45
|
+
key, value = segment.split(":-", 1)
|
46
|
+
if value.startswith("${") and value.endswith("}"):
|
47
47
|
sub_dict = parse_compose_file_env_string(value)
|
48
48
|
env_dict.update(sub_dict)
|
49
49
|
else:
|
50
50
|
key = segment
|
51
|
-
value =
|
52
|
-
if
|
53
|
-
value =
|
51
|
+
value = ""
|
52
|
+
if "${" in value:
|
53
|
+
value = ""
|
54
54
|
env_dict[key] = value
|
55
|
-
key =
|
56
|
-
value =
|
55
|
+
key = ""
|
56
|
+
value = ""
|
57
57
|
index += 1
|
58
58
|
return env_dict
|
@@ -1,12 +1,13 @@
|
|
1
|
+
from ruamel.yaml import YAML, CommentedMap
|
2
|
+
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Mapping
|
3
|
-
from ruamel.yaml import YAML, CommentedMap
|
4
5
|
|
5
6
|
|
6
7
|
@typechecked
|
7
8
|
def read_compose_file(file_name: str) -> Any:
|
8
9
|
yaml = YAML()
|
9
|
-
with open(file_name,
|
10
|
+
with open(file_name, "r") as f:
|
10
11
|
data = yaml.load(f)
|
11
12
|
return data
|
12
13
|
|
@@ -14,7 +15,7 @@ def read_compose_file(file_name: str) -> Any:
|
|
14
15
|
@typechecked
|
15
16
|
def write_compose_file(file_name: str, data: Any):
|
16
17
|
yaml = YAML()
|
17
|
-
with open(file_name,
|
18
|
+
with open(file_name, "w") as f:
|
18
19
|
yaml.dump(data, f)
|
19
20
|
|
20
21
|
|
@@ -22,5 +23,5 @@ def write_compose_file(file_name: str, data: Any):
|
|
22
23
|
def add_services(file_name: str, new_services: Mapping[str, str]):
|
23
24
|
data = read_compose_file(file_name)
|
24
25
|
data = CommentedMap(data)
|
25
|
-
data[
|
26
|
+
data["services"].update(CommentedMap(new_services))
|
26
27
|
write_compose_file(file_name, data)
|