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,260 +1,233 @@
|
|
1
1
|
from typing import AsyncIterator
|
2
|
-
|
3
|
-
from src.config import app_auth_admin_username, app_auth_admin_password
|
2
|
+
|
4
3
|
import pytest
|
4
|
+
from httpx import AsyncClient
|
5
|
+
from src.config import app_auth_admin_password, app_auth_admin_username
|
5
6
|
|
6
7
|
|
7
8
|
@pytest.mark.asyncio
|
8
9
|
async def test_admin_user_login_success(
|
9
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
10
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
10
11
|
):
|
11
12
|
async for client in test_client_generator:
|
12
13
|
login_response = await client.post(
|
13
|
-
|
14
|
+
"/api/v1/auth/login",
|
14
15
|
json={
|
15
|
-
|
16
|
-
|
17
|
-
}
|
16
|
+
"identity": app_auth_admin_username,
|
17
|
+
"password": app_auth_admin_password,
|
18
|
+
},
|
18
19
|
)
|
19
20
|
assert login_response.status_code == 200
|
20
21
|
json_login_response = login_response.json()
|
21
|
-
assert json_login_response.get(
|
22
|
-
assert json_login_response.get(
|
22
|
+
assert json_login_response.get("token_type", "") == "bearer"
|
23
|
+
assert json_login_response.get("access_token", "") != ""
|
23
24
|
|
24
25
|
|
25
26
|
@pytest.mark.asyncio
|
26
27
|
async def test_admin_user_login_empty_identity_failed(
|
27
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
28
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
28
29
|
):
|
29
30
|
async for client in test_client_generator:
|
30
31
|
login_response = await client.post(
|
31
|
-
|
32
|
-
json={
|
33
|
-
'identity': '',
|
34
|
-
'password': app_auth_admin_password
|
35
|
-
}
|
32
|
+
"/api/v1/auth/login",
|
33
|
+
json={"identity": "", "password": app_auth_admin_password},
|
36
34
|
)
|
37
35
|
assert login_response.status_code == 422
|
38
36
|
|
39
37
|
|
40
38
|
@pytest.mark.asyncio
|
41
39
|
async def test_admin_user_login_invalid_identity_failed(
|
42
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
40
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
43
41
|
):
|
44
42
|
async for client in test_client_generator:
|
45
43
|
login_response = await client.post(
|
46
|
-
|
47
|
-
json={
|
48
|
-
'identity': 'invalid-identity',
|
49
|
-
'password': app_auth_admin_password
|
50
|
-
}
|
44
|
+
"/api/v1/auth/login",
|
45
|
+
json={"identity": "invalid-identity", "password": app_auth_admin_password},
|
51
46
|
)
|
52
47
|
assert login_response.status_code == 404
|
53
48
|
|
54
49
|
|
55
50
|
@pytest.mark.asyncio
|
56
51
|
async def test_admin_user_failed_invalid_password(
|
57
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
52
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
58
53
|
):
|
59
54
|
async for client in test_client_generator:
|
60
55
|
login_response = await client.post(
|
61
|
-
|
62
|
-
json={
|
63
|
-
'identity': app_auth_admin_username,
|
64
|
-
'password': 'invalid-password'
|
65
|
-
}
|
56
|
+
"/api/v1/auth/login",
|
57
|
+
json={"identity": app_auth_admin_username, "password": "invalid-password"},
|
66
58
|
)
|
67
59
|
assert login_response.status_code == 404
|
68
60
|
|
69
61
|
|
70
62
|
@pytest.mark.asyncio
|
71
63
|
async def test_create_normal_user_and_login_with_username_success(
|
72
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
64
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
73
65
|
):
|
74
66
|
async for client in test_client_generator:
|
75
67
|
# login
|
76
68
|
login_admin_response = await client.post(
|
77
|
-
|
69
|
+
"/api/v1/auth/login",
|
78
70
|
json={
|
79
|
-
|
80
|
-
|
81
|
-
}
|
71
|
+
"identity": app_auth_admin_username,
|
72
|
+
"password": app_auth_admin_password,
|
73
|
+
},
|
82
74
|
)
|
83
75
|
assert login_admin_response.status_code == 200
|
84
|
-
admin_access_token = login_admin_response.json().get(
|
85
|
-
|
86
|
-
)
|
87
|
-
assert admin_access_token != ''
|
76
|
+
admin_access_token = login_admin_response.json().get("access_token", "")
|
77
|
+
assert admin_access_token != ""
|
88
78
|
# create user
|
89
79
|
create_response = await client.post(
|
90
|
-
|
91
|
-
json={
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
80
|
+
"/api/v1/auth/users",
|
81
|
+
json={
|
82
|
+
"username": "test-login-user-with-username-success",
|
83
|
+
"password": "test-password",
|
84
|
+
"phone": "+628123456789",
|
85
|
+
"email": "test-login-user-with-username-success@test.com",
|
86
|
+
"groups": [],
|
87
|
+
"permissions": [],
|
88
|
+
"description": "",
|
99
89
|
},
|
100
|
-
headers={
|
101
|
-
'Authorization': 'Bearer ' + admin_access_token
|
102
|
-
}
|
90
|
+
headers={"Authorization": "Bearer " + admin_access_token},
|
103
91
|
)
|
104
92
|
assert create_response.status_code == 200
|
105
93
|
# login
|
106
94
|
login_admin_response = await client.post(
|
107
|
-
|
95
|
+
"/api/v1/auth/login",
|
108
96
|
json={
|
109
|
-
|
110
|
-
|
111
|
-
}
|
97
|
+
"identity": "test-login-user-with-username-success",
|
98
|
+
"password": "test-password",
|
99
|
+
},
|
112
100
|
)
|
113
101
|
assert login_admin_response.status_code == 200
|
114
102
|
json_login_response = login_admin_response.json()
|
115
|
-
assert json_login_response.get(
|
116
|
-
assert json_login_response.get(
|
103
|
+
assert json_login_response.get("token_type", "") == "bearer"
|
104
|
+
assert json_login_response.get("access_token", "") != ""
|
117
105
|
|
118
106
|
|
119
107
|
@pytest.mark.asyncio
|
120
108
|
async def test_create_normal_user_and_login_with_phone_success(
|
121
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
109
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
122
110
|
):
|
123
111
|
async for client in test_client_generator:
|
124
112
|
# login
|
125
113
|
login_admin_response = await client.post(
|
126
|
-
|
114
|
+
"/api/v1/auth/login",
|
127
115
|
json={
|
128
|
-
|
129
|
-
|
130
|
-
}
|
116
|
+
"identity": app_auth_admin_username,
|
117
|
+
"password": app_auth_admin_password,
|
118
|
+
},
|
131
119
|
)
|
132
120
|
assert login_admin_response.status_code == 200
|
133
|
-
admin_access_token = login_admin_response.json().get(
|
134
|
-
|
135
|
-
)
|
136
|
-
assert admin_access_token != ''
|
121
|
+
admin_access_token = login_admin_response.json().get("access_token", "")
|
122
|
+
assert admin_access_token != ""
|
137
123
|
# create user
|
138
124
|
create_response = await client.post(
|
139
|
-
|
140
|
-
json={
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
125
|
+
"/api/v1/auth/users",
|
126
|
+
json={
|
127
|
+
"username": "test-login-user-with-phone-success",
|
128
|
+
"password": "test-password",
|
129
|
+
"phone": "+628123456789",
|
130
|
+
"email": "test-login-user-with-phone-success@test.com",
|
131
|
+
"groups": [],
|
132
|
+
"permissions": [],
|
133
|
+
"description": "",
|
148
134
|
},
|
149
|
-
headers={
|
150
|
-
'Authorization': 'Bearer ' + admin_access_token
|
151
|
-
}
|
135
|
+
headers={"Authorization": "Bearer " + admin_access_token},
|
152
136
|
)
|
153
137
|
assert create_response.status_code == 200
|
154
138
|
# login
|
155
139
|
login_admin_response = await client.post(
|
156
|
-
|
157
|
-
json={
|
158
|
-
'identity': '+628123456789',
|
159
|
-
'password': 'test-password'
|
160
|
-
}
|
140
|
+
"/api/v1/auth/login",
|
141
|
+
json={"identity": "+628123456789", "password": "test-password"},
|
161
142
|
)
|
162
143
|
assert login_admin_response.status_code == 200
|
163
144
|
json_login_response = login_admin_response.json()
|
164
|
-
assert json_login_response.get(
|
165
|
-
assert json_login_response.get(
|
145
|
+
assert json_login_response.get("token_type", "") == "bearer"
|
146
|
+
assert json_login_response.get("access_token", "") != ""
|
166
147
|
|
167
148
|
|
168
149
|
@pytest.mark.asyncio
|
169
150
|
async def test_create_normal_user_and_login_with_email_success(
|
170
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
151
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
171
152
|
):
|
172
153
|
async for client in test_client_generator:
|
173
154
|
# login
|
174
155
|
login_admin_response = await client.post(
|
175
|
-
|
156
|
+
"/api/v1/auth/login",
|
176
157
|
json={
|
177
|
-
|
178
|
-
|
179
|
-
}
|
158
|
+
"identity": app_auth_admin_username,
|
159
|
+
"password": app_auth_admin_password,
|
160
|
+
},
|
180
161
|
)
|
181
162
|
assert login_admin_response.status_code == 200
|
182
|
-
admin_access_token = login_admin_response.json().get(
|
183
|
-
|
184
|
-
)
|
185
|
-
assert admin_access_token != ''
|
163
|
+
admin_access_token = login_admin_response.json().get("access_token", "")
|
164
|
+
assert admin_access_token != ""
|
186
165
|
# create user
|
187
166
|
create_response = await client.post(
|
188
|
-
|
189
|
-
json={
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
167
|
+
"/api/v1/auth/users",
|
168
|
+
json={
|
169
|
+
"username": "test-login-user-with-email-success",
|
170
|
+
"password": "test-password",
|
171
|
+
"phone": "+628123456789",
|
172
|
+
"email": "test-login-user-with-email-success@test.com",
|
173
|
+
"groups": [],
|
174
|
+
"permissions": [],
|
175
|
+
"description": "",
|
197
176
|
},
|
198
|
-
headers={
|
199
|
-
'Authorization': 'Bearer ' + admin_access_token
|
200
|
-
}
|
177
|
+
headers={"Authorization": "Bearer " + admin_access_token},
|
201
178
|
)
|
202
179
|
assert create_response.status_code == 200
|
203
180
|
# login
|
204
181
|
login_admin_response = await client.post(
|
205
|
-
|
182
|
+
"/api/v1/auth/login",
|
206
183
|
json={
|
207
|
-
|
208
|
-
|
209
|
-
}
|
184
|
+
"identity": "test-login-user-with-email-success@test.com",
|
185
|
+
"password": "test-password",
|
186
|
+
},
|
210
187
|
)
|
211
188
|
assert login_admin_response.status_code == 200
|
212
189
|
json_login_response = login_admin_response.json()
|
213
|
-
assert json_login_response.get(
|
214
|
-
assert json_login_response.get(
|
190
|
+
assert json_login_response.get("token_type", "") == "bearer"
|
191
|
+
assert json_login_response.get("access_token", "") != ""
|
215
192
|
|
216
193
|
|
217
194
|
@pytest.mark.asyncio
|
218
195
|
async def test_create_normal_user_and_login_failed(
|
219
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
196
|
+
test_client_generator: AsyncIterator[AsyncClient],
|
220
197
|
):
|
221
198
|
async for client in test_client_generator:
|
222
199
|
# login
|
223
200
|
login_admin_response = await client.post(
|
224
|
-
|
201
|
+
"/api/v1/auth/login",
|
225
202
|
json={
|
226
|
-
|
227
|
-
|
228
|
-
}
|
203
|
+
"identity": app_auth_admin_username,
|
204
|
+
"password": app_auth_admin_password,
|
205
|
+
},
|
229
206
|
)
|
230
207
|
assert login_admin_response.status_code == 200
|
231
|
-
admin_access_token = login_admin_response.json().get(
|
232
|
-
|
233
|
-
)
|
234
|
-
assert admin_access_token != ''
|
208
|
+
admin_access_token = login_admin_response.json().get("access_token", "")
|
209
|
+
assert admin_access_token != ""
|
235
210
|
# create user
|
236
211
|
create_response = await client.post(
|
237
|
-
|
238
|
-
json={
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
212
|
+
"/api/v1/auth/users",
|
213
|
+
json={
|
214
|
+
"username": "test-login-user-with-email-failed",
|
215
|
+
"password": "test-password",
|
216
|
+
"phone": "+628123456789",
|
217
|
+
"email": "test-login-user-with-email-failed@test.com",
|
218
|
+
"groups": [],
|
219
|
+
"permissions": [],
|
220
|
+
"description": "",
|
246
221
|
},
|
247
|
-
headers={
|
248
|
-
'Authorization': 'Bearer ' + admin_access_token
|
249
|
-
}
|
222
|
+
headers={"Authorization": "Bearer " + admin_access_token},
|
250
223
|
)
|
251
224
|
assert create_response.status_code == 200
|
252
225
|
# login
|
253
226
|
login_admin_response = await client.post(
|
254
|
-
|
227
|
+
"/api/v1/auth/login",
|
255
228
|
json={
|
256
|
-
|
257
|
-
|
258
|
-
}
|
229
|
+
"identity": "test-login-user-with-email-failed",
|
230
|
+
"password": "invalid-password",
|
231
|
+
},
|
259
232
|
)
|
260
233
|
assert login_admin_response.status_code == 404
|
@@ -1,11 +1,11 @@
|
|
1
|
+
import pytest
|
1
2
|
from asgi_lifespan import LifespanManager
|
2
3
|
from httpx import AsyncClient
|
3
4
|
from src.main import app
|
4
|
-
import pytest
|
5
5
|
|
6
6
|
|
7
7
|
@pytest.fixture()
|
8
|
-
async def test_client_generator(scope=
|
8
|
+
async def test_client_generator(scope="module"):
|
9
9
|
async with LifespanManager(app):
|
10
10
|
async with AsyncClient(app=app, base_url="http://localhost") as ac:
|
11
11
|
yield ac
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py
CHANGED
@@ -1,42 +1,35 @@
|
|
1
1
|
from typing import AsyncIterator
|
2
|
+
|
3
|
+
import pytest
|
2
4
|
from httpx import AsyncClient
|
3
5
|
from src.config import zrb_app_name
|
4
|
-
import pytest
|
5
6
|
|
6
7
|
|
7
8
|
@pytest.mark.asyncio
|
8
|
-
async def test_get_liveness(
|
9
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
10
|
-
):
|
9
|
+
async def test_get_liveness(test_client_generator: AsyncIterator[AsyncClient]):
|
11
10
|
async for client in test_client_generator:
|
12
11
|
response = await client.get("/liveness")
|
13
12
|
assert response.status_code == 200
|
14
|
-
assert response.json() == {
|
13
|
+
assert response.json() == {"app": zrb_app_name, "alive": True}
|
15
14
|
|
16
15
|
|
17
16
|
@pytest.mark.asyncio
|
18
|
-
async def test_head_liveness(
|
19
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
20
|
-
):
|
17
|
+
async def test_head_liveness(test_client_generator: AsyncIterator[AsyncClient]):
|
21
18
|
async for client in test_client_generator:
|
22
19
|
response = await client.head("/liveness")
|
23
20
|
assert response.status_code == 200
|
24
21
|
|
25
22
|
|
26
23
|
@pytest.mark.asyncio
|
27
|
-
async def test_get_readiness(
|
28
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
29
|
-
):
|
24
|
+
async def test_get_readiness(test_client_generator: AsyncIterator[AsyncClient]):
|
30
25
|
async for client in test_client_generator:
|
31
26
|
response = await client.get("/readiness")
|
32
27
|
assert response.status_code == 200
|
33
|
-
assert response.json() == {
|
28
|
+
assert response.json() == {"app": zrb_app_name, "ready": True}
|
34
29
|
|
35
30
|
|
36
31
|
@pytest.mark.asyncio
|
37
|
-
async def test_head_readiness(
|
38
|
-
test_client_generator: AsyncIterator[AsyncClient]
|
39
|
-
):
|
32
|
+
async def test_head_readiness(test_client_generator: AsyncIterator[AsyncClient]):
|
40
33
|
async for client in test_client_generator:
|
41
34
|
response = await client.head("/readiness")
|
42
35
|
assert response.status_code == 200
|