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
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/user.py
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
from module.auth.schema.user import User
|
2
1
|
from config import (
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
app_auth_admin_email,
|
3
|
+
app_auth_admin_password,
|
4
|
+
app_auth_admin_phone,
|
5
|
+
app_auth_admin_user_id,
|
6
|
+
app_auth_admin_username,
|
7
|
+
app_auth_guest_email,
|
8
|
+
app_auth_guest_phone,
|
9
|
+
app_auth_guest_user_id,
|
10
|
+
app_auth_guest_username,
|
7
11
|
)
|
12
|
+
from module.auth.schema.user import User
|
8
13
|
|
9
14
|
admin_user_password = app_auth_admin_password
|
10
15
|
|
@@ -15,7 +20,7 @@ admin_user = User(
|
|
15
20
|
phone=app_auth_admin_phone,
|
16
21
|
groups=[],
|
17
22
|
permissions=[],
|
18
|
-
description=
|
23
|
+
description="System administrator",
|
19
24
|
)
|
20
25
|
|
21
26
|
guest_user = User(
|
@@ -25,5 +30,5 @@ guest_user = User(
|
|
25
30
|
phone=app_auth_guest_phone,
|
26
31
|
groups=[],
|
27
32
|
permissions=[],
|
28
|
-
description=
|
33
|
+
description="Visitor",
|
29
34
|
)
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py
CHANGED
@@ -1,18 +1,13 @@
|
|
1
|
+
from module.auth.core.access_token.scheme import (
|
2
|
+
AccessTokenScheme,
|
3
|
+
create_oauth2_bearer_access_token_scheme,
|
4
|
+
)
|
5
|
+
from module.auth.core.access_token.util import AccessTokenUtil, JWTAccessTokenUtil
|
1
6
|
from module.auth.core.authorizer.authorizer import Authorizer
|
2
7
|
from module.auth.core.authorizer.rpc_authorizer import RPCAuthorizer
|
8
|
+
from module.auth.core.password_hasher.bcrypt_password_hasher import BcryptPasswordHasher
|
3
9
|
from module.auth.core.password_hasher.password_hasher import PasswordHasher
|
4
|
-
from module.auth.core.
|
5
|
-
BcryptPasswordHasher
|
6
|
-
)
|
7
|
-
from module.auth.core.access_token.scheme import (
|
8
|
-
AccessTokenScheme, create_oauth2_bearer_access_token_scheme
|
9
|
-
)
|
10
|
-
from module.auth.core.access_token.util import (
|
11
|
-
AccessTokenUtil, JWTAccessTokenUtil
|
12
|
-
)
|
13
|
-
from module.auth.core.refresh_token.util import (
|
14
|
-
RefreshTokenUtil, JWTRefreshTokenUtil
|
15
|
-
)
|
10
|
+
from module.auth.core.refresh_token.util import JWTRefreshTokenUtil, RefreshTokenUtil
|
16
11
|
|
17
12
|
assert Authorizer
|
18
13
|
assert RPCAuthorizer
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from typing import Callable, Optional
|
2
|
-
|
2
|
+
|
3
3
|
from fastapi import Depends
|
4
4
|
from fastapi.security import OAuth2PasswordBearer
|
5
|
+
from module.auth.core.access_token.util import AccessTokenUtil
|
5
6
|
from module.auth.schema.token import AccessTokenData
|
6
7
|
from module.auth.schema.user import User
|
7
|
-
from
|
8
|
+
from starlette.requests import Request
|
8
9
|
|
9
10
|
AccessTokenScheme = Callable[[Request], AccessTokenData]
|
10
11
|
|
@@ -13,25 +14,19 @@ def create_oauth2_bearer_access_token_scheme(
|
|
13
14
|
guest_user: User,
|
14
15
|
access_token_util: AccessTokenUtil,
|
15
16
|
token_url: str,
|
16
|
-
token_cookie_key: str
|
17
|
+
token_cookie_key: str,
|
17
18
|
) -> AccessTokenScheme:
|
18
|
-
|
19
|
-
oauth2_scheme = OAuth2PasswordBearer(
|
20
|
-
tokenUrl=token_url, auto_error=False
|
21
|
-
)
|
19
|
+
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=token_url, auto_error=False)
|
22
20
|
|
23
21
|
async def oauth2_bearer_token_scheme(
|
24
|
-
request: Request,
|
25
|
-
token: Optional[str] = Depends(oauth2_scheme)
|
22
|
+
request: Request, token: Optional[str] = Depends(oauth2_scheme)
|
26
23
|
) -> AccessTokenData:
|
27
24
|
token: Optional[str] = await oauth2_scheme(request)
|
28
25
|
if token is None:
|
29
26
|
token = request.cookies.get(token_cookie_key, None)
|
30
27
|
if token is None:
|
31
28
|
return AccessTokenData(
|
32
|
-
user_id=guest_user.id,
|
33
|
-
username=guest_user.username,
|
34
|
-
expire_seconds=300
|
29
|
+
user_id=guest_user.id, username=guest_user.username, expire_seconds=300
|
35
30
|
)
|
36
31
|
return access_token_util.decode(token, parse_expired_token=False)
|
37
32
|
|
@@ -1,15 +1,14 @@
|
|
1
|
-
from typing import Any, Mapping
|
2
1
|
from abc import ABC, abstractmethod
|
3
|
-
from core.error import HTTPAPIException
|
4
|
-
from module.auth.schema.token import AccessTokenData
|
5
2
|
from datetime import datetime, timedelta
|
6
|
-
from
|
3
|
+
from typing import Any, Mapping
|
7
4
|
|
8
5
|
import jsons
|
6
|
+
from core.error import HTTPAPIException
|
7
|
+
from jose import jwt
|
8
|
+
from module.auth.schema.token import AccessTokenData
|
9
9
|
|
10
10
|
|
11
11
|
class AccessTokenUtil(ABC):
|
12
|
-
|
13
12
|
@abstractmethod
|
14
13
|
def encode(self, token_data: AccessTokenData) -> str:
|
15
14
|
pass
|
@@ -22,48 +21,39 @@ class AccessTokenUtil(ABC):
|
|
22
21
|
|
23
22
|
|
24
23
|
class JWTAccessTokenUtil(AccessTokenUtil):
|
25
|
-
|
26
|
-
def __init__(self, secret_key: str, algorithm: str = 'HS256'):
|
24
|
+
def __init__(self, secret_key: str, algorithm: str = "HS256"):
|
27
25
|
self.secret_key = secret_key
|
28
26
|
self.algorithm = algorithm
|
29
27
|
|
30
28
|
def encode(self, data: AccessTokenData) -> str:
|
31
|
-
expire_time = datetime.utcnow() + timedelta(
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
data_dict = {'sub': sub, 'exp': expire_time}
|
36
|
-
encoded_jwt = jwt.encode(
|
37
|
-
data_dict, self.secret_key, algorithm=self.algorithm
|
38
|
-
)
|
29
|
+
expire_time = datetime.utcnow() + timedelta(seconds=data.expire_seconds)
|
30
|
+
sub = jsons.dumps(data.model_dump())
|
31
|
+
data_dict = {"sub": sub, "exp": expire_time}
|
32
|
+
encoded_jwt = jwt.encode(data_dict, self.secret_key, algorithm=self.algorithm)
|
39
33
|
return encoded_jwt
|
40
34
|
|
41
|
-
def decode(
|
42
|
-
self, token: str, parse_expired_token: bool = False
|
43
|
-
) -> AccessTokenData:
|
35
|
+
def decode(self, token: str, parse_expired_token: bool = False) -> AccessTokenData:
|
44
36
|
try:
|
45
37
|
decoded_data = jwt.decode(
|
46
38
|
token,
|
47
39
|
self.secret_key,
|
48
40
|
algorithms=[self.algorithm],
|
49
|
-
options=self._get_decode_options(parse_expired_token)
|
41
|
+
options=self._get_decode_options(parse_expired_token),
|
50
42
|
)
|
51
|
-
sub = jsons.loads(decoded_data[
|
52
|
-
token_data = AccessTokenData.
|
43
|
+
sub = jsons.loads(decoded_data["sub"])
|
44
|
+
token_data = AccessTokenData.model_validate(sub)
|
53
45
|
if not parse_expired_token:
|
54
|
-
expire_time = decoded_data[
|
55
|
-
token_data.expire_seconds = (
|
46
|
+
expire_time = decoded_data["exp"]
|
47
|
+
token_data.expire_seconds = (
|
56
48
|
datetime.fromtimestamp(expire_time) - datetime.utcnow()
|
57
|
-
).total_seconds()
|
49
|
+
).total_seconds()
|
58
50
|
if token_data.expire_seconds < 0:
|
59
|
-
raise HTTPAPIException(422,
|
51
|
+
raise HTTPAPIException(422, "Expired token")
|
60
52
|
return token_data
|
61
53
|
except jwt.JWTError:
|
62
|
-
raise HTTPAPIException(422,
|
54
|
+
raise HTTPAPIException(422, "Invalid token")
|
63
55
|
|
64
|
-
def _get_decode_options(
|
65
|
-
self, parse_expired_token: bool
|
66
|
-
) -> Mapping[str, Any]:
|
56
|
+
def _get_decode_options(self, parse_expired_token: bool) -> Mapping[str, Any]:
|
67
57
|
if parse_expired_token:
|
68
|
-
return {
|
58
|
+
return {"verify_exp": False}
|
69
59
|
return {}
|
@@ -1,9 +1,8 @@
|
|
1
|
-
from module.auth.core.authorizer.authorizer import Authorizer
|
2
1
|
from core.rpc import Caller
|
2
|
+
from module.auth.core.authorizer.authorizer import Authorizer
|
3
3
|
|
4
4
|
|
5
5
|
class RPCAuthorizer(Authorizer):
|
6
|
-
|
7
6
|
def __init__(
|
8
7
|
self,
|
9
8
|
rpc_caller: Caller,
|
@@ -17,22 +16,16 @@ class RPCAuthorizer(Authorizer):
|
|
17
16
|
self.is_user_authorized_rpc_name = is_user_authorized_rpc_name
|
18
17
|
|
19
18
|
async def is_admin(self, user_id: str) -> bool:
|
20
|
-
return await self.rpc_caller.call(
|
21
|
-
self.is_admin_rpc_name, user_id
|
22
|
-
)
|
19
|
+
return await self.rpc_caller.call(self.is_admin_rpc_name, user_id)
|
23
20
|
|
24
21
|
async def is_guest(self, user_id: str) -> bool:
|
25
|
-
return await self.rpc_caller.call(
|
26
|
-
self.is_guest_rpc_name, user_id
|
27
|
-
)
|
22
|
+
return await self.rpc_caller.call(self.is_guest_rpc_name, user_id)
|
28
23
|
|
29
|
-
async def is_having_permission(
|
30
|
-
self, user_id: str, *permission_name: str
|
31
|
-
) -> bool:
|
24
|
+
async def is_having_permission(self, user_id: str, *permission_name: str) -> bool:
|
32
25
|
permission_map = await self.rpc_caller.call(
|
33
26
|
self.is_user_authorized_rpc_name,
|
34
27
|
id=user_id,
|
35
|
-
permission_name=permission_name
|
28
|
+
permission_name=permission_name,
|
36
29
|
)
|
37
30
|
for permission in permission_map:
|
38
31
|
if not permission_map[permission]:
|
@@ -1,15 +1,10 @@
|
|
1
|
-
from module.auth.core.password_hasher.password_hasher import PasswordHasher
|
2
1
|
import bcrypt
|
2
|
+
from module.auth.core.password_hasher.password_hasher import PasswordHasher
|
3
3
|
|
4
4
|
|
5
5
|
class BcryptPasswordHasher(PasswordHasher):
|
6
|
-
|
7
6
|
def hash_password(self, password: str) -> str:
|
8
|
-
return bcrypt.hashpw(
|
9
|
-
password.encode('utf-8'), bcrypt.gensalt()
|
10
|
-
).decode('utf-8')
|
7
|
+
return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
|
11
8
|
|
12
9
|
def check_password(self, password: str, hashed_password: str) -> bool:
|
13
|
-
return bcrypt.checkpw(
|
14
|
-
password.encode('utf-8'), hashed_password.encode('utf-8')
|
15
|
-
)
|
10
|
+
return bcrypt.checkpw(password.encode("utf-8"), hashed_password.encode("utf-8"))
|
@@ -1,14 +1,13 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
|
-
from core.error import HTTPAPIException
|
3
|
-
from module.auth.schema.token import RefreshTokenData
|
4
2
|
from datetime import datetime, timedelta
|
5
|
-
from jose import jwt
|
6
3
|
|
7
4
|
import jsons
|
5
|
+
from core.error import HTTPAPIException
|
6
|
+
from jose import jwt
|
7
|
+
from module.auth.schema.token import RefreshTokenData
|
8
8
|
|
9
9
|
|
10
10
|
class RefreshTokenUtil(ABC):
|
11
|
-
|
12
11
|
@abstractmethod
|
13
12
|
def encode(self, token_data: RefreshTokenData) -> str:
|
14
13
|
pass
|
@@ -19,20 +18,15 @@ class RefreshTokenUtil(ABC):
|
|
19
18
|
|
20
19
|
|
21
20
|
class JWTRefreshTokenUtil(RefreshTokenUtil):
|
22
|
-
|
23
|
-
def __init__(self, secret_key: str, algorithm: str = 'HS256'):
|
21
|
+
def __init__(self, secret_key: str, algorithm: str = "HS256"):
|
24
22
|
self.secret_key = secret_key
|
25
23
|
self.algorithm = algorithm
|
26
24
|
|
27
25
|
def encode(self, data: RefreshTokenData) -> str:
|
28
|
-
expire_time = datetime.utcnow() + timedelta(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
data_dict = {'sub': sub, 'exp': expire_time}
|
33
|
-
encoded_jwt = jwt.encode(
|
34
|
-
data_dict, self.secret_key, algorithm=self.algorithm
|
35
|
-
)
|
26
|
+
expire_time = datetime.utcnow() + timedelta(seconds=data.expire_seconds)
|
27
|
+
sub = jsons.dumps(data.model_dump())
|
28
|
+
data_dict = {"sub": sub, "exp": expire_time}
|
29
|
+
encoded_jwt = jwt.encode(data_dict, self.secret_key, algorithm=self.algorithm)
|
36
30
|
return encoded_jwt
|
37
31
|
|
38
32
|
def decode(self, token: str) -> RefreshTokenData:
|
@@ -40,14 +34,14 @@ class JWTRefreshTokenUtil(RefreshTokenUtil):
|
|
40
34
|
decoded_data = jwt.decode(
|
41
35
|
token, self.secret_key, algorithms=[self.algorithm]
|
42
36
|
)
|
43
|
-
sub = jsons.loads(decoded_data[
|
44
|
-
token_data = RefreshTokenData.
|
45
|
-
expire_time = decoded_data[
|
46
|
-
token_data.expire_seconds = (
|
37
|
+
sub = jsons.loads(decoded_data["sub"])
|
38
|
+
token_data = RefreshTokenData.model_validate(sub)
|
39
|
+
expire_time = decoded_data["exp"]
|
40
|
+
token_data.expire_seconds = (
|
47
41
|
datetime.fromtimestamp(expire_time) - datetime.utcnow()
|
48
|
-
).total_seconds()
|
42
|
+
).total_seconds()
|
49
43
|
if token_data.expire_seconds < 0:
|
50
|
-
raise HTTPAPIException(422,
|
44
|
+
raise HTTPAPIException(422, "Expired token")
|
51
45
|
return token_data
|
52
46
|
except jwt.JWTError:
|
53
|
-
raise HTTPAPIException(422,
|
47
|
+
raise HTTPAPIException(422, "Invalid token")
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py
CHANGED
@@ -1,14 +1,13 @@
|
|
1
|
-
from fastapi import FastAPI, Depends
|
2
1
|
from logging import Logger
|
2
|
+
|
3
|
+
from core.error import HTTPAPIException
|
3
4
|
from core.messagebus import Publisher
|
4
5
|
from core.rpc import Caller
|
5
|
-
from
|
6
|
+
from fastapi import Depends, FastAPI
|
7
|
+
from module.auth.component import access_token_scheme
|
6
8
|
from module.auth.core import Authorizer
|
7
|
-
from module.auth.schema.group import
|
8
|
-
Group, GroupData, GroupResult
|
9
|
-
)
|
9
|
+
from module.auth.schema.group import Group, GroupData, GroupResult
|
10
10
|
from module.auth.schema.token import AccessTokenData
|
11
|
-
from module.auth.component import access_token_scheme
|
12
11
|
|
13
12
|
|
14
13
|
def register_api(
|
@@ -16,108 +15,102 @@ def register_api(
|
|
16
15
|
app: FastAPI,
|
17
16
|
authorizer: Authorizer,
|
18
17
|
rpc_caller: Caller,
|
19
|
-
publisher: Publisher
|
18
|
+
publisher: Publisher,
|
20
19
|
):
|
21
20
|
logger.info('🥪 Register API for "auth.group"')
|
22
21
|
|
23
|
-
@app.get(
|
24
|
-
'/api/v1/auth/groups', response_model=GroupResult
|
25
|
-
)
|
22
|
+
@app.get("/api/v1/auth/groups", response_model=GroupResult)
|
26
23
|
async def get_groups(
|
27
|
-
keyword: str =
|
24
|
+
keyword: str = "",
|
25
|
+
limit: int = 100,
|
26
|
+
offset: int = 0,
|
28
27
|
user_token_data: AccessTokenData = Depends(access_token_scheme),
|
29
28
|
):
|
30
29
|
if not await authorizer.is_having_permission(
|
31
|
-
user_token_data.user_id,
|
30
|
+
user_token_data.user_id, "auth:permission:get"
|
32
31
|
):
|
33
|
-
raise HTTPAPIException(403,
|
32
|
+
raise HTTPAPIException(403, "Unauthorized")
|
34
33
|
try:
|
35
34
|
result_dict = await rpc_caller.call(
|
36
|
-
|
35
|
+
"auth_get_group",
|
37
36
|
keyword=keyword,
|
38
37
|
criterion={},
|
39
38
|
limit=limit,
|
40
39
|
offset=offset,
|
41
|
-
user_token_data=user_token_data.
|
40
|
+
user_token_data=user_token_data.model_dump(),
|
42
41
|
)
|
43
42
|
return GroupResult(**result_dict)
|
44
43
|
except Exception as e:
|
45
44
|
raise HTTPAPIException(error=e)
|
46
45
|
|
47
|
-
@app.get(
|
48
|
-
'/api/v1/auth/groups/{id}', response_model=Group
|
49
|
-
)
|
46
|
+
@app.get("/api/v1/auth/groups/{id}", response_model=Group)
|
50
47
|
async def get_group_by_id(
|
51
48
|
id: str, user_token_data: AccessTokenData = Depends(access_token_scheme)
|
52
49
|
):
|
53
50
|
if not await authorizer.is_having_permission(
|
54
|
-
user_token_data.user_id,
|
51
|
+
user_token_data.user_id, "auth:group:get_by_id"
|
55
52
|
):
|
56
|
-
raise HTTPAPIException(403,
|
53
|
+
raise HTTPAPIException(403, "Unauthorized")
|
57
54
|
try:
|
58
55
|
result_dict = await rpc_caller.call(
|
59
|
-
|
60
|
-
id=id,
|
56
|
+
"auth_get_group_by_id",
|
57
|
+
id=id,
|
58
|
+
user_token_data=user_token_data.model_dump(),
|
61
59
|
)
|
62
60
|
return Group(**result_dict)
|
63
61
|
except Exception as e:
|
64
62
|
raise HTTPAPIException(error=e)
|
65
63
|
|
66
|
-
@app.post(
|
67
|
-
'/api/v1/auth/groups', response_model=Group
|
68
|
-
)
|
64
|
+
@app.post("/api/v1/auth/groups", response_model=Group)
|
69
65
|
async def insert_group(
|
70
|
-
data: GroupData,
|
71
|
-
user_token_data: AccessTokenData = Depends(access_token_scheme)
|
66
|
+
data: GroupData, user_token_data: AccessTokenData = Depends(access_token_scheme)
|
72
67
|
):
|
73
68
|
if not await authorizer.is_having_permission(
|
74
|
-
user_token_data.user_id,
|
69
|
+
user_token_data.user_id, "auth:group:insert"
|
75
70
|
):
|
76
|
-
raise HTTPAPIException(403,
|
71
|
+
raise HTTPAPIException(403, "Unauthorized")
|
77
72
|
try:
|
78
73
|
result_dict = await rpc_caller.call(
|
79
|
-
|
80
|
-
data=data.
|
74
|
+
"auth_insert_group",
|
75
|
+
data=data.model_dump(),
|
76
|
+
user_token_data=user_token_data.model_dump(),
|
81
77
|
)
|
82
78
|
return Group(**result_dict)
|
83
79
|
except Exception as e:
|
84
80
|
raise HTTPAPIException(error=e)
|
85
81
|
|
86
|
-
@app.put(
|
87
|
-
'/api/v1/auth/groups/{id}', response_model=Group
|
88
|
-
)
|
82
|
+
@app.put("/api/v1/auth/groups/{id}", response_model=Group)
|
89
83
|
async def update_group(
|
90
|
-
id: str,
|
91
|
-
|
84
|
+
id: str,
|
85
|
+
data: GroupData,
|
86
|
+
user_token_data: AccessTokenData = Depends(access_token_scheme),
|
92
87
|
):
|
93
88
|
if not await authorizer.is_having_permission(
|
94
|
-
user_token_data.user_id,
|
89
|
+
user_token_data.user_id, "auth:group:update"
|
95
90
|
):
|
96
|
-
raise HTTPAPIException(403,
|
91
|
+
raise HTTPAPIException(403, "Unauthorized")
|
97
92
|
try:
|
98
93
|
result_dict = await rpc_caller.call(
|
99
|
-
|
100
|
-
id=id,
|
94
|
+
"auth_update_group",
|
95
|
+
id=id,
|
96
|
+
data=data.model_dump(),
|
97
|
+
user_token_data=user_token_data.model_dump(),
|
101
98
|
)
|
102
99
|
return Group(**result_dict)
|
103
100
|
except Exception as e:
|
104
101
|
raise HTTPAPIException(error=e)
|
105
102
|
|
106
|
-
@app.delete(
|
107
|
-
'/api/v1/auth/groups/{id}', response_model=Group
|
108
|
-
)
|
103
|
+
@app.delete("/api/v1/auth/groups/{id}", response_model=Group)
|
109
104
|
async def delete_group(
|
110
|
-
id: str,
|
111
|
-
user_token_data: AccessTokenData = Depends(access_token_scheme)
|
105
|
+
id: str, user_token_data: AccessTokenData = Depends(access_token_scheme)
|
112
106
|
):
|
113
107
|
if not await authorizer.is_having_permission(
|
114
|
-
user_token_data.user_id,
|
108
|
+
user_token_data.user_id, "auth:group:delete"
|
115
109
|
):
|
116
|
-
raise HTTPAPIException(403,
|
110
|
+
raise HTTPAPIException(403, "Unauthorized")
|
117
111
|
try:
|
118
112
|
result_dict = await rpc_caller.call(
|
119
|
-
|
120
|
-
id=id, user_token_data=user_token_data.dict()
|
113
|
+
"auth_delete_group", id=id, user_token_data=user_token_data.model_dump()
|
121
114
|
)
|
122
115
|
return Group(**result_dict)
|
123
116
|
except Exception as e:
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
+
from module.auth.schema.group import Group, GroupData, GroupResult
|
1
2
|
from module.log.core.historical_repo_model import HistoricalRepoModel
|
2
|
-
from module.auth.schema.group import (
|
3
|
-
Group, GroupData, GroupResult
|
4
|
-
)
|
5
3
|
|
6
4
|
|
7
|
-
class GroupModel(
|
8
|
-
HistoricalRepoModel[Group, GroupData, GroupResult]
|
9
|
-
):
|
5
|
+
class GroupModel(HistoricalRepoModel[Group, GroupData, GroupResult]):
|
10
6
|
schema_result_cls = GroupResult
|
11
|
-
log_entity_name =
|
7
|
+
log_entity_name = "group"
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
from typing import Any, Mapping
|
2
1
|
from abc import ABC
|
3
|
-
from
|
4
|
-
|
5
|
-
from core.repo import
|
6
|
-
from module.auth.schema.group import Group, GroupData
|
2
|
+
from typing import Any, Mapping
|
3
|
+
|
4
|
+
from core.repo import DBEntityMixin, DBRepo, Repo
|
7
5
|
from module.auth.component import Base
|
8
|
-
from module.auth.entity.table import group_permission
|
9
6
|
from module.auth.entity.permission.repo import DBEntityPermission
|
7
|
+
from module.auth.entity.table import group_permission
|
8
|
+
from module.auth.schema.group import Group, GroupData
|
9
|
+
from sqlalchemy import Column, String
|
10
|
+
from sqlalchemy.orm import Session, relationship
|
10
11
|
|
11
12
|
|
12
13
|
class DBEntityGroup(Base, DBEntityMixin):
|
14
|
+
class Config:
|
15
|
+
orm_mode = True
|
16
|
+
from_attributes = True
|
17
|
+
|
13
18
|
__tablename__ = "groups"
|
14
19
|
name = Column(String)
|
15
20
|
description = Column(String)
|
16
|
-
permissions = relationship(
|
17
|
-
"DBEntityPermission",
|
18
|
-
secondary=group_permission
|
19
|
-
)
|
21
|
+
permissions = relationship("DBEntityPermission", secondary=group_permission)
|
20
22
|
|
21
23
|
|
22
24
|
class GroupRepo(Repo[Group, GroupData], ABC):
|
23
25
|
pass
|
24
26
|
|
25
27
|
|
26
|
-
class GroupDBRepo(
|
27
|
-
DBRepo[Group, GroupData], GroupRepo
|
28
|
-
):
|
28
|
+
class GroupDBRepo(DBRepo[Group, GroupData], GroupRepo):
|
29
29
|
schema_cls = Group
|
30
30
|
db_entity_cls = DBEntityGroup
|
31
31
|
|
@@ -34,7 +34,9 @@ class GroupDBRepo(
|
|
34
34
|
) -> Mapping[str, Any]:
|
35
35
|
db_entity_map = super()._schema_data_to_db_entity_map(db, group_data)
|
36
36
|
# Transform permissions
|
37
|
-
db_entity_map[
|
38
|
-
|
39
|
-
|
37
|
+
db_entity_map["permissions"] = (
|
38
|
+
db.query(DBEntityPermission)
|
39
|
+
.filter(DBEntityPermission.id.in_(group_data.permissions))
|
40
|
+
.all()
|
41
|
+
)
|
40
42
|
return db_entity_map
|