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,30 +1,42 @@
|
|
1
|
+
import datetime
|
2
|
+
import logging
|
3
|
+
import os
|
4
|
+
import sys
|
5
|
+
from functools import lru_cache
|
6
|
+
|
7
|
+
from zrb.config.config import env_prefix, logging_level, show_time
|
8
|
+
from zrb.helper.accessories.color import colored
|
9
|
+
from zrb.helper.log import logger
|
10
|
+
from zrb.helper.string.conversion import to_variable_name
|
11
|
+
from zrb.helper.string.modification import double_quote
|
12
|
+
from zrb.helper.typecheck import typechecked
|
1
13
|
from zrb.helper.typing import (
|
2
|
-
Any,
|
14
|
+
Any,
|
15
|
+
Callable,
|
16
|
+
Iterable,
|
17
|
+
JinjaTemplate,
|
18
|
+
List,
|
19
|
+
Mapping,
|
20
|
+
Optional,
|
21
|
+
Union,
|
3
22
|
)
|
4
|
-
from zrb.helper.typecheck import typechecked
|
5
|
-
from zrb.config.config import show_time, logging_level
|
6
23
|
from zrb.task.any_task import AnyTask
|
7
24
|
from zrb.task.any_task_event_handler import (
|
8
|
-
|
25
|
+
OnFailed,
|
26
|
+
OnReady,
|
27
|
+
OnRetry,
|
28
|
+
OnSkipped,
|
29
|
+
OnStarted,
|
30
|
+
OnTriggered,
|
31
|
+
OnWaiting,
|
9
32
|
)
|
10
|
-
from zrb.helper.log import logger
|
11
|
-
from zrb.helper.accessories.color import colored
|
12
|
-
from zrb.task_input.any_input import AnyInput
|
13
|
-
from zrb.task_group.group import Group
|
14
|
-
from zrb.task_env.env import Env
|
15
|
-
from zrb.task_env.env_file import EnvFile
|
16
33
|
from zrb.task.base_task.component.common_task_model import CommonTaskModel
|
17
34
|
from zrb.task.base_task.component.pid_model import PidModel
|
18
35
|
from zrb.task.base_task.component.trackers import TimeTracker
|
19
|
-
from zrb.
|
20
|
-
from zrb.
|
21
|
-
from zrb.
|
22
|
-
from
|
23
|
-
|
24
|
-
import datetime
|
25
|
-
import logging
|
26
|
-
import os
|
27
|
-
import sys
|
36
|
+
from zrb.task_env.env import Env
|
37
|
+
from zrb.task_env.env_file import EnvFile
|
38
|
+
from zrb.task_group.group import Group
|
39
|
+
from zrb.task_input.any_input import AnyInput
|
28
40
|
|
29
41
|
LOG_NAME_LENGTH = 20
|
30
42
|
|
@@ -35,7 +47,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
35
47
|
self,
|
36
48
|
name: str,
|
37
49
|
group: Optional[Group] = None,
|
38
|
-
description: str =
|
50
|
+
description: str = "",
|
39
51
|
inputs: List[AnyInput] = [],
|
40
52
|
envs: Iterable[Env] = [],
|
41
53
|
env_files: Iterable[EnvFile] = [],
|
@@ -55,7 +67,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
55
67
|
on_retry: Optional[OnRetry] = None,
|
56
68
|
on_failed: Optional[OnFailed] = None,
|
57
69
|
should_execute: Union[bool, JinjaTemplate, Callable[..., bool]] = True,
|
58
|
-
return_upstream_result: bool = False
|
70
|
+
return_upstream_result: bool = False,
|
59
71
|
):
|
60
72
|
self.__rjust_full_cli_name: Optional[str] = None
|
61
73
|
self.__has_cli_interface = False
|
@@ -84,7 +96,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
84
96
|
on_retry=on_retry,
|
85
97
|
on_failed=on_failed,
|
86
98
|
should_execute=should_execute,
|
87
|
-
return_upstream_result=return_upstream_result
|
99
|
+
return_upstream_result=return_upstream_result,
|
88
100
|
)
|
89
101
|
PidModel.__init__(self)
|
90
102
|
TimeTracker.__init__(self)
|
@@ -92,77 +104,67 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
92
104
|
self.__kwargs: Mapping[str, Any] = {}
|
93
105
|
|
94
106
|
def _set_args(self, args: Iterable[Any]):
|
95
|
-
|
107
|
+
"""
|
96
108
|
Set args that will be shown at the end of the execution
|
97
|
-
|
109
|
+
"""
|
98
110
|
self.__args = list(args)
|
99
111
|
|
100
112
|
def _set_kwargs(self, kwargs: Mapping[str, Any]):
|
101
|
-
|
113
|
+
"""
|
102
114
|
Set kwargs that will be shown at the end of the execution
|
103
|
-
|
115
|
+
"""
|
104
116
|
self.__kwargs = kwargs
|
105
117
|
|
106
118
|
def log_debug(self, message: Any):
|
107
119
|
if logging_level > logging.DEBUG:
|
108
120
|
return
|
109
121
|
prefix = self.__get_log_prefix()
|
110
|
-
colored_message = colored(
|
111
|
-
f'{prefix} • {message}', attrs=['dark']
|
112
|
-
)
|
122
|
+
colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
|
113
123
|
logger.debug(colored_message)
|
114
124
|
|
115
125
|
def log_warn(self, message: Any):
|
116
126
|
if logging_level > logging.WARNING:
|
117
127
|
return
|
118
128
|
prefix = self.__get_log_prefix()
|
119
|
-
colored_message = colored(
|
120
|
-
f'{prefix} • {message}', attrs=['dark']
|
121
|
-
)
|
129
|
+
colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
|
122
130
|
logger.warning(colored_message)
|
123
131
|
|
124
132
|
def log_info(self, message: Any):
|
125
133
|
if logging_level > logging.INFO:
|
126
134
|
return
|
127
135
|
prefix = self.__get_log_prefix()
|
128
|
-
colored_message = colored(
|
129
|
-
f'{prefix} • {message}', attrs=['dark']
|
130
|
-
)
|
136
|
+
colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
|
131
137
|
logger.info(colored_message)
|
132
138
|
|
133
139
|
def log_error(self, message: Any):
|
134
140
|
if logging_level > logging.ERROR:
|
135
141
|
return
|
136
142
|
prefix = self.__get_log_prefix()
|
137
|
-
colored_message = colored(
|
138
|
-
f'{prefix} • {message}', color='red', attrs=['bold']
|
139
|
-
)
|
143
|
+
colored_message = colored(f"{prefix} • {message}", color="red", attrs=["bold"])
|
140
144
|
logger.error(colored_message, exc_info=True)
|
141
145
|
|
142
146
|
def log_critical(self, message: Any):
|
143
147
|
if logging_level > logging.CRITICAL:
|
144
148
|
return
|
145
149
|
prefix = self.__get_log_prefix()
|
146
|
-
colored_message = colored(
|
147
|
-
f'{prefix} • {message}', color='red', attrs=['bold']
|
148
|
-
)
|
150
|
+
colored_message = colored(f"{prefix} • {message}", color="red", attrs=["bold"])
|
149
151
|
logger.critical(colored_message, exc_info=True)
|
150
152
|
|
151
153
|
def print_out(self, message: Any, trim_message: bool = True):
|
152
154
|
prefix = self.__get_colored_print_prefix()
|
153
|
-
message_str = f
|
154
|
-
print(f
|
155
|
+
message_str = f"{message}".rstrip() if trim_message else f"{message}"
|
156
|
+
print(f"🤖 ○ {prefix} • {message_str}", file=sys.stderr)
|
155
157
|
sys.stderr.flush()
|
156
158
|
|
157
159
|
def print_err(self, message: Any, trim_message: bool = True):
|
158
160
|
prefix = self.__get_colored_print_prefix()
|
159
|
-
message_str = f
|
160
|
-
print(f
|
161
|
+
message_str = f"{message}".rstrip() if trim_message else f"{message}"
|
162
|
+
print(f"🤖 △ {prefix} • {message_str}", file=sys.stderr)
|
161
163
|
sys.stderr.flush()
|
162
164
|
|
163
165
|
def print_out_dark(self, message: Any, trim_message: bool = True):
|
164
|
-
message_str = f
|
165
|
-
self.print_out(colored(message_str, attrs=[
|
166
|
+
message_str = f"{message}"
|
167
|
+
self.print_out(colored(message_str, attrs=["dark"]), trim_message)
|
166
168
|
|
167
169
|
def _print_result(self, result: Any):
|
168
170
|
if result is None:
|
@@ -180,19 +182,19 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
180
182
|
print(result)
|
181
183
|
|
182
184
|
def _play_bell(self):
|
183
|
-
print(
|
185
|
+
print("\a", end="", file=sys.stderr, flush=True)
|
184
186
|
|
185
187
|
def _show_done_info(self):
|
186
188
|
elapsed_time = self._get_elapsed_time()
|
187
|
-
self.print_out_dark(f
|
189
|
+
self.print_out_dark(f"Completed in {elapsed_time} seconds")
|
188
190
|
self._play_bell()
|
189
191
|
|
190
192
|
def _show_env_prefix(self):
|
191
|
-
if env_prefix ==
|
193
|
+
if env_prefix == "":
|
192
194
|
return
|
193
|
-
colored_env_prefix = colored(env_prefix, color=
|
194
|
-
colored_label = colored(
|
195
|
-
print(colored(f
|
195
|
+
colored_env_prefix = colored(env_prefix, color="yellow")
|
196
|
+
colored_label = colored("Your current environment: ", attrs=["dark"])
|
197
|
+
print(colored(f"{colored_label}{colored_env_prefix}"), file=sys.stderr)
|
196
198
|
|
197
199
|
def _show_run_command(self):
|
198
200
|
if not self.__has_cli_interface:
|
@@ -204,15 +206,15 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
204
206
|
key = task_input.get_name()
|
205
207
|
kwarg_key = to_variable_name(key)
|
206
208
|
quoted_value = double_quote(str(self.__kwargs[kwarg_key]))
|
207
|
-
params.append(f
|
209
|
+
params.append(f"--{key} {quoted_value}")
|
208
210
|
run_cmd = self._get_full_cli_name()
|
209
211
|
run_cmd_with_param = run_cmd
|
210
212
|
if len(params) > 0:
|
211
|
-
param_str =
|
212
|
-
run_cmd_with_param +=
|
213
|
-
colored_command = colored(run_cmd_with_param, color=
|
214
|
-
colored_label = colored(
|
215
|
-
print(colored(f
|
213
|
+
param_str = " ".join(params)
|
214
|
+
run_cmd_with_param += " " + param_str
|
215
|
+
colored_command = colored(run_cmd_with_param, color="yellow")
|
216
|
+
colored_label = colored("To run again: ", attrs=["dark"])
|
217
|
+
print(colored(f"{colored_label}{colored_command}"), file=sys.stderr)
|
216
218
|
|
217
219
|
def __get_colored_print_prefix(self) -> str:
|
218
220
|
return self.__get_colored(self.__get_print_prefix())
|
@@ -225,51 +227,51 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
|
|
225
227
|
icon = self.get_icon()
|
226
228
|
length = LOG_NAME_LENGTH - len(icon)
|
227
229
|
rjust_cli_name = self.__get_rjust_full_cli_name(length)
|
228
|
-
return f
|
230
|
+
return f"{common_prefix} {icon} {rjust_cli_name}"
|
229
231
|
|
230
232
|
def __get_log_prefix(self) -> str:
|
231
233
|
common_prefix = self.__get_common_prefix(show_time=False)
|
232
234
|
icon = self.get_icon()
|
233
235
|
length = LOG_NAME_LENGTH - len(icon)
|
234
236
|
filled_name = self.__get_rjust_full_cli_name(length)
|
235
|
-
return f
|
237
|
+
return f"{common_prefix} {icon} {filled_name}"
|
236
238
|
|
237
239
|
def __get_common_prefix(self, show_time: bool) -> str:
|
238
240
|
attempt = self._get_attempt()
|
239
241
|
max_attempt = self._get_max_attempt()
|
240
242
|
pid = str(self._get_task_pid()).rjust(6)
|
241
243
|
if show_time:
|
242
|
-
now = datetime.datetime.now().strftime(
|
243
|
-
return f
|
244
|
-
return f
|
244
|
+
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
245
|
+
return f"◷ {now} ❁ {pid} → {attempt}/{max_attempt}"
|
246
|
+
return f"❁ {pid} → {attempt}/{max_attempt}"
|
245
247
|
|
246
248
|
@lru_cache
|
247
249
|
def __get_rjust_full_cli_name(self, length: int) -> str:
|
248
250
|
if self.__rjust_full_cli_name is not None:
|
249
251
|
return self.__rjust_full_cli_name
|
250
252
|
complete_name = self._get_full_cli_name()
|
251
|
-
self.__rjust_full_cli_name = complete_name.rjust(length,
|
253
|
+
self.__rjust_full_cli_name = complete_name.rjust(length, " ")
|
252
254
|
return self.__rjust_full_cli_name
|
253
255
|
|
254
256
|
@lru_cache
|
255
257
|
def __get_executable_name(self) -> str:
|
256
|
-
if len(sys.argv) > 0 and sys.argv[0] !=
|
258
|
+
if len(sys.argv) > 0 and sys.argv[0] != "":
|
257
259
|
return os.path.basename(sys.argv[0])
|
258
|
-
return
|
260
|
+
return "zrb"
|
259
261
|
|
260
262
|
@lru_cache
|
261
263
|
def _get_full_cli_name(self) -> str:
|
262
264
|
if self.__complete_name is not None:
|
263
265
|
return self.__complete_name
|
264
|
-
executable_prefix =
|
266
|
+
executable_prefix = ""
|
265
267
|
if self.__has_cli_interface:
|
266
|
-
executable_prefix += self.__get_executable_name() +
|
268
|
+
executable_prefix += self.__get_executable_name() + " "
|
267
269
|
cli_name = self.get_cli_name()
|
268
270
|
if self._group is None:
|
269
|
-
self.__complete_name = f
|
271
|
+
self.__complete_name = f"{executable_prefix}{cli_name}"
|
270
272
|
return self.__complete_name
|
271
273
|
group_cli_name = self._group._get_full_cli_name()
|
272
|
-
self.__complete_name = f
|
274
|
+
self.__complete_name = f"{executable_prefix}{group_cli_name} {cli_name}" # noqa
|
273
275
|
return self.__complete_name
|
274
276
|
|
275
277
|
def _set_has_cli_interface(self):
|
@@ -1,31 +1,44 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.accessories.color import get_random_color
|
4
|
+
from zrb.helper.accessories.icon import get_random_icon
|
5
|
+
from zrb.helper.string.conversion import to_cli_name
|
6
|
+
from zrb.helper.typecheck import typechecked
|
1
7
|
from zrb.helper.typing import (
|
2
|
-
Any,
|
8
|
+
Any,
|
9
|
+
Callable,
|
10
|
+
Iterable,
|
11
|
+
JinjaTemplate,
|
12
|
+
List,
|
13
|
+
Mapping,
|
14
|
+
Optional,
|
15
|
+
Union,
|
3
16
|
)
|
4
|
-
from zrb.helper.
|
17
|
+
from zrb.helper.util import coalesce_str
|
18
|
+
from zrb.task.any_task import AnyTask
|
5
19
|
from zrb.task.any_task_event_handler import (
|
6
|
-
|
20
|
+
OnFailed,
|
21
|
+
OnReady,
|
22
|
+
OnRetry,
|
23
|
+
OnSkipped,
|
24
|
+
OnStarted,
|
25
|
+
OnTriggered,
|
26
|
+
OnWaiting,
|
7
27
|
)
|
8
|
-
from zrb.task.any_task import AnyTask
|
9
|
-
from zrb.helper.string.conversion import to_cli_name
|
10
|
-
from zrb.helper.accessories.color import get_random_color
|
11
|
-
from zrb.helper.accessories.icon import get_random_icon
|
12
|
-
from zrb.helper.util import coalesce_str
|
13
|
-
from zrb.task_input.any_input import AnyInput
|
14
|
-
from zrb.task_group.group import Group
|
15
28
|
from zrb.task_env.constant import RESERVED_ENV_NAMES
|
16
29
|
from zrb.task_env.env import Env
|
17
30
|
from zrb.task_env.env_file import EnvFile
|
18
|
-
|
19
|
-
import
|
31
|
+
from zrb.task_group.group import Group
|
32
|
+
from zrb.task_input.any_input import AnyInput
|
20
33
|
|
21
34
|
|
22
35
|
@typechecked
|
23
|
-
class CommonTaskModel
|
36
|
+
class CommonTaskModel:
|
24
37
|
def __init__(
|
25
38
|
self,
|
26
39
|
name: str,
|
27
40
|
group: Optional[Group] = None,
|
28
|
-
description: str =
|
41
|
+
description: str = "",
|
29
42
|
inputs: List[AnyInput] = [],
|
30
43
|
envs: Iterable[Env] = [],
|
31
44
|
env_files: Iterable[EnvFile] = [],
|
@@ -45,7 +58,7 @@ class CommonTaskModel():
|
|
45
58
|
on_retry: Optional[OnRetry] = None,
|
46
59
|
on_failed: Optional[OnFailed] = None,
|
47
60
|
should_execute: Union[bool, JinjaTemplate, Callable[..., bool]] = True,
|
48
|
-
return_upstream_result: bool = False
|
61
|
+
return_upstream_result: bool = False,
|
49
62
|
):
|
50
63
|
self._name = name
|
51
64
|
self._group = group
|
@@ -72,7 +85,7 @@ class CommonTaskModel():
|
|
72
85
|
self._on_failed = on_failed
|
73
86
|
self._should_execute = should_execute
|
74
87
|
self._return_upstream_result = return_upstream_result
|
75
|
-
self.__execution_id =
|
88
|
+
self.__execution_id = ""
|
76
89
|
self.__allow_add_envs = True
|
77
90
|
self.__allow_add_env_files = True
|
78
91
|
self.__allow_add_inputs = True
|
@@ -88,7 +101,7 @@ class CommonTaskModel():
|
|
88
101
|
self.__allow_add_upstreams = False
|
89
102
|
|
90
103
|
def _set_execution_id(self, execution_id: str):
|
91
|
-
if self.__execution_id ==
|
104
|
+
if self.__execution_id == "":
|
92
105
|
self.__execution_id = execution_id
|
93
106
|
|
94
107
|
def _propagate_execution_id(self):
|
@@ -142,12 +155,12 @@ class CommonTaskModel():
|
|
142
155
|
|
143
156
|
def insert_input(self, *inputs: AnyInput):
|
144
157
|
if not self.__allow_add_inputs:
|
145
|
-
raise Exception(f
|
158
|
+
raise Exception(f"Cannot insert inputs for `{self.get_name()}`")
|
146
159
|
self._inputs = list(inputs) + list(self._inputs)
|
147
160
|
|
148
161
|
def add_input(self, *inputs: AnyInput):
|
149
162
|
if not self.__allow_add_inputs:
|
150
|
-
raise Exception(f
|
163
|
+
raise Exception(f"Cannot add inputs for `{self.get_name()}`")
|
151
164
|
self._inputs = list(self._inputs) + list(inputs)
|
152
165
|
|
153
166
|
def inject_inputs(self):
|
@@ -160,9 +173,9 @@ class CommonTaskModel():
|
|
160
173
|
return list(self._inputs)
|
161
174
|
|
162
175
|
def _get_combined_inputs(self) -> Iterable[AnyInput]:
|
163
|
-
'
|
176
|
+
"""'
|
164
177
|
Getting all inputs of this task and all its upstream, non-duplicated.
|
165
|
-
|
178
|
+
"""
|
166
179
|
if self.__all_inputs is not None:
|
167
180
|
return self.__all_inputs
|
168
181
|
self.__all_inputs: List[AnyInput] = []
|
@@ -197,12 +210,12 @@ class CommonTaskModel():
|
|
197
210
|
|
198
211
|
def insert_env(self, *envs: Env):
|
199
212
|
if not self.__allow_add_envs:
|
200
|
-
raise Exception(f
|
213
|
+
raise Exception(f"Cannot insert envs to `{self.get_name()}`")
|
201
214
|
self._envs = list(envs) + list(self._envs)
|
202
215
|
|
203
216
|
def add_env(self, *envs: Env):
|
204
217
|
if not self.__allow_add_envs:
|
205
|
-
raise Exception(f
|
218
|
+
raise Exception(f"Cannot add envs to `{self.get_name()}`")
|
206
219
|
self._envs = list(self._envs) + list(envs)
|
207
220
|
|
208
221
|
def inject_envs(self):
|
@@ -233,12 +246,12 @@ class CommonTaskModel():
|
|
233
246
|
|
234
247
|
def insert_env_file(self, *env_files: EnvFile):
|
235
248
|
if not self.__allow_add_env_files:
|
236
|
-
raise Exception(f
|
249
|
+
raise Exception(f"Cannot insert env_files to `{self.get_name()}`")
|
237
250
|
self._env_files = list(env_files) + list(self._env_files)
|
238
251
|
|
239
252
|
def add_env_file(self, *env_files: EnvFile):
|
240
253
|
if not self.__allow_add_env_files:
|
241
|
-
raise Exception(f
|
254
|
+
raise Exception(f"Cannot add env_files to `{self.get_name()}`")
|
242
255
|
self._env_files = list(self._env_files) + list(env_files)
|
243
256
|
|
244
257
|
def inject_env_files(self):
|
@@ -246,12 +259,12 @@ class CommonTaskModel():
|
|
246
259
|
|
247
260
|
def insert_upstream(self, *upstreams: AnyTask):
|
248
261
|
if not self.__allow_add_upstreams:
|
249
|
-
raise Exception(f
|
262
|
+
raise Exception(f"Cannot insert upstreams to `{self.get_name()}`")
|
250
263
|
self._upstreams = list(upstreams) + list(self._upstreams)
|
251
264
|
|
252
265
|
def add_upstream(self, *upstreams: AnyTask):
|
253
266
|
if not self.__allow_add_upstreams:
|
254
|
-
raise Exception(f
|
267
|
+
raise Exception(f"Cannot add upstreams to `{self.get_name()}`")
|
255
268
|
self._upstreams = list(self._upstreams) + list(upstreams)
|
256
269
|
|
257
270
|
def inject_upstreams(self):
|
@@ -277,13 +290,13 @@ class CommonTaskModel():
|
|
277
290
|
|
278
291
|
def insert_checker(self, *checkers: AnyTask):
|
279
292
|
if not self.__allow_add_checkers:
|
280
|
-
raise Exception(f
|
293
|
+
raise Exception(f"Cannot insert checkers to `{self.get_name()}`")
|
281
294
|
additional_checkers = [checker.copy() for checker in checkers]
|
282
295
|
self._checkers = additional_checkers + self._checkers
|
283
296
|
|
284
297
|
def add_checker(self, *checkers: AnyTask):
|
285
298
|
if not self.__allow_add_checkers:
|
286
|
-
raise Exception(f
|
299
|
+
raise Exception(f"Cannot add checkers to `{self.get_name()}`")
|
287
300
|
additional_checkers = [checker.copy() for checker in checkers]
|
288
301
|
self._checkers = self._checkers + additional_checkers
|
289
302
|
|
@@ -1,11 +1,10 @@
|
|
1
|
-
from zrb.helper.typecheck import typechecked
|
2
|
-
|
3
1
|
import os
|
4
2
|
|
3
|
+
from zrb.helper.typecheck import typechecked
|
4
|
+
|
5
5
|
|
6
6
|
@typechecked
|
7
|
-
class PidModel
|
8
|
-
|
7
|
+
class PidModel:
|
9
8
|
def __init__(self):
|
10
9
|
self.__task_pid: int = os.getpid()
|
11
10
|
|
@@ -14,4 +13,3 @@ class PidModel():
|
|
14
13
|
|
15
14
|
def _get_task_pid(self) -> int:
|
16
15
|
return self.__task_pid
|
17
|
-
|
@@ -1,28 +1,28 @@
|
|
1
|
-
from zrb.task.any_task import AnyTask
|
2
|
-
from zrb.helper.typing import Any, JinjaTemplate, Mapping, Optional, Union
|
3
|
-
from zrb.helper.typecheck import typechecked
|
4
|
-
from zrb.helper.string.conversion import to_boolean
|
5
|
-
from zrb.helper.string.jinja import is_probably_jinja
|
6
|
-
from zrb.helper.render_data import DEFAULT_RENDER_DATA
|
7
|
-
|
8
1
|
import os
|
2
|
+
|
9
3
|
import jinja2
|
10
4
|
|
5
|
+
from zrb.helper.render_data import DEFAULT_RENDER_DATA
|
6
|
+
from zrb.helper.string.conversion import to_boolean
|
7
|
+
from zrb.helper.string.jinja import is_probably_jinja
|
8
|
+
from zrb.helper.typecheck import typechecked
|
9
|
+
from zrb.helper.typing import Any, JinjaTemplate, Mapping, Optional, Union
|
10
|
+
from zrb.task.any_task import AnyTask
|
11
|
+
|
11
12
|
|
12
13
|
class AnyExtensionFileSystemLoader(jinja2.FileSystemLoader):
|
13
14
|
def get_source(self, environment, template):
|
14
15
|
for search_dir in self.searchpath:
|
15
16
|
file_path = os.path.join(search_dir, template)
|
16
17
|
if os.path.exists(file_path):
|
17
|
-
with open(file_path,
|
18
|
+
with open(file_path, "r") as file:
|
18
19
|
contents = file.read()
|
19
20
|
return contents, file_path, lambda: False
|
20
21
|
raise jinja2.TemplateNotFound(template)
|
21
22
|
|
22
23
|
|
23
24
|
@typechecked
|
24
|
-
class Renderer
|
25
|
-
|
25
|
+
class Renderer:
|
26
26
|
def __init__(self):
|
27
27
|
self.__input_map: Mapping[str, Any] = {}
|
28
28
|
self.__task: Optional[AnyTask] = None
|
@@ -47,9 +47,7 @@ class Renderer():
|
|
47
47
|
def _set_env_map(self, key: str, val: str):
|
48
48
|
self.__env_map[key] = val
|
49
49
|
|
50
|
-
def render_any(
|
51
|
-
self, value: Any, data: Optional[Mapping[str, Any]] = None
|
52
|
-
) -> Any:
|
50
|
+
def render_any(self, value: Any, data: Optional[Mapping[str, Any]] = None) -> Any:
|
53
51
|
if isinstance(value, str):
|
54
52
|
return self.render_str(value, data)
|
55
53
|
return value
|
@@ -57,16 +55,14 @@ class Renderer():
|
|
57
55
|
def render_float(
|
58
56
|
self,
|
59
57
|
value: Union[JinjaTemplate, float],
|
60
|
-
data: Optional[Mapping[str, Any]] = None
|
58
|
+
data: Optional[Mapping[str, Any]] = None,
|
61
59
|
) -> float:
|
62
60
|
if isinstance(value, str):
|
63
61
|
return float(self.render_str(value, data))
|
64
62
|
return value
|
65
63
|
|
66
64
|
def render_int(
|
67
|
-
self,
|
68
|
-
value: Union[JinjaTemplate, int],
|
69
|
-
data: Optional[Mapping[str, Any]] = None
|
65
|
+
self, value: Union[JinjaTemplate, int], data: Optional[Mapping[str, Any]] = None
|
70
66
|
) -> int:
|
71
67
|
if isinstance(value, str):
|
72
68
|
return int(self.render_str(value, data))
|
@@ -75,16 +71,14 @@ class Renderer():
|
|
75
71
|
def render_bool(
|
76
72
|
self,
|
77
73
|
value: Union[JinjaTemplate, bool],
|
78
|
-
data: Optional[Mapping[str, Any]] = None
|
74
|
+
data: Optional[Mapping[str, Any]] = None,
|
79
75
|
) -> bool:
|
80
76
|
if isinstance(value, str):
|
81
77
|
return to_boolean(self.render_str(value, data))
|
82
78
|
return value
|
83
79
|
|
84
80
|
def render_str(
|
85
|
-
self,
|
86
|
-
value: JinjaTemplate,
|
87
|
-
data: Optional[Mapping[str, Any]] = None
|
81
|
+
self, value: JinjaTemplate, data: Optional[Mapping[str, Any]] = None
|
88
82
|
) -> str:
|
89
83
|
if value in self.__rendered_str:
|
90
84
|
return self.__rendered_str[value]
|
@@ -95,24 +89,18 @@ class Renderer():
|
|
95
89
|
try:
|
96
90
|
rendered_text = template.render(render_data)
|
97
91
|
except Exception:
|
98
|
-
raise Exception(
|
99
|
-
f'Fail to render "{value}" with data: {render_data}'
|
100
|
-
)
|
92
|
+
raise Exception(f'Fail to render "{value}" with data: {render_data}')
|
101
93
|
self.__rendered_str[value] = rendered_text
|
102
94
|
return rendered_text
|
103
95
|
|
104
96
|
def render_file(
|
105
|
-
self,
|
106
|
-
path: JinjaTemplate,
|
107
|
-
data: Optional[Mapping[str, Any]] = None
|
97
|
+
self, path: JinjaTemplate, data: Optional[Mapping[str, Any]] = None
|
108
98
|
) -> str:
|
109
99
|
location_dir = os.path.dirname(path)
|
110
|
-
env = jinja2.Environment(
|
111
|
-
loader=AnyExtensionFileSystemLoader([location_dir])
|
112
|
-
)
|
100
|
+
env = jinja2.Environment(loader=AnyExtensionFileSystemLoader([location_dir]))
|
113
101
|
template = env.get_template(path)
|
114
102
|
render_data = self.__get_render_data(additional_data=data)
|
115
|
-
render_data[
|
103
|
+
render_data["TEMPLATE_DIR"] = location_dir
|
116
104
|
rendered_text = template.render(render_data)
|
117
105
|
return rendered_text
|
118
106
|
|
@@ -128,10 +116,12 @@ class Renderer():
|
|
128
116
|
if self.__render_data is not None:
|
129
117
|
return self.__render_data
|
130
118
|
render_data = dict(DEFAULT_RENDER_DATA)
|
131
|
-
render_data.update(
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
119
|
+
render_data.update(
|
120
|
+
{
|
121
|
+
"env": self.__env_map,
|
122
|
+
"input": self.__input_map,
|
123
|
+
"task": self.__task,
|
124
|
+
}
|
125
|
+
)
|
136
126
|
self.__render_data = render_data
|
137
127
|
return render_data
|
@@ -1,15 +1,14 @@
|
|
1
|
-
from zrb.helper.typing import Optional
|
2
|
-
from zrb.helper.typecheck import typechecked
|
3
|
-
|
4
1
|
import asyncio
|
5
2
|
import time
|
6
3
|
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.typing import Optional
|
6
|
+
|
7
7
|
LOG_NAME_LENGTH = 20
|
8
8
|
|
9
9
|
|
10
10
|
@typechecked
|
11
|
-
class TimeTracker
|
12
|
-
|
11
|
+
class TimeTracker:
|
13
12
|
def __init__(self):
|
14
13
|
self.__start_time: float = 0
|
15
14
|
self.__end_time: float = 0
|
@@ -25,8 +24,7 @@ class TimeTracker():
|
|
25
24
|
|
26
25
|
|
27
26
|
@typechecked
|
28
|
-
class AttemptTracker
|
29
|
-
|
27
|
+
class AttemptTracker:
|
30
28
|
def __init__(self, retry: int = 2):
|
31
29
|
self.__retry = retry
|
32
30
|
self.__attempt: int = 1
|
@@ -52,8 +50,7 @@ class AttemptTracker():
|
|
52
50
|
|
53
51
|
|
54
52
|
@typechecked
|
55
|
-
class FinishTracker
|
56
|
-
|
53
|
+
class FinishTracker:
|
57
54
|
def __init__(self):
|
58
55
|
self.__execution_queue: Optional[asyncio.Queue] = None
|
59
56
|
self.__counter = 0
|