zrb 0.23.4__py3-none-any.whl → 0.26.0__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 +2 -0
- zrb/action/runner.py +8 -5
- zrb/advertisement.py +1 -2
- zrb/builtin/__init__.py +4 -0
- zrb/builtin/base64/decode.py +1 -1
- zrb/builtin/base64/encode.py +1 -1
- zrb/builtin/devtool/install/_helper.py +2 -1
- zrb/builtin/devtool/install/_input.py +2 -2
- zrb/builtin/docker/prune.py +11 -3
- zrb/builtin/env/get.py +3 -2
- zrb/builtin/eval.py +2 -1
- zrb/builtin/git/get_file_changes.py +2 -1
- zrb/builtin/md5/hash.py +1 -1
- zrb/builtin/md5/sum.py +1 -1
- zrb/builtin/monorepo/__init__.py +7 -0
- zrb/builtin/monorepo/_config.py +11 -0
- zrb/builtin/monorepo/_group.py +3 -0
- zrb/builtin/monorepo/_task.py +99 -0
- zrb/builtin/monorepo/add.py +40 -0
- zrb/builtin/monorepo/pull.py +23 -0
- zrb/builtin/monorepo/push.py +35 -0
- zrb/builtin/project/_helper.py +3 -3
- zrb/builtin/project/_input.py +2 -2
- zrb/builtin/project/add/app/generator/generator.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/snake_zrb_generator_name.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/start.py +6 -7
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/app/python/python.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +6 -7
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
- zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/fastapp/app/app.py +3 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +2 -53
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/start.py +5 -6
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/start.py +5 -6
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/stop.py +2 -0
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/start.py +4 -6
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/locustfile.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/template.env +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +59 -62
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +4443 -0
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app.py +28 -28
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_lifespan.py +15 -15
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_state.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/db_connection.py +14 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/frontend_index.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/log.py +6 -6
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/messagebus.py +33 -33
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/rpc.py +9 -9
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_scheme.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_util.py +7 -7
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/model/user_model.py +6 -6
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/refresh_token_util.py +7 -7
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/user.py +18 -18
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +8 -8
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py +8 -8
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/template.env +5 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +8 -8
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +8 -8
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +8 -8
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +15 -15
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +4 -4
- zrb/builtin/project/add/fastapp/crud/_helper/__init__.py +7 -0
- zrb/builtin/project/add/fastapp/crud/_helper/_common.py +8 -0
- zrb/builtin/project/add/fastapp/crud/_helper/register_api.py +45 -0
- zrb/builtin/project/add/fastapp/crud/_helper/register_permission.py +40 -0
- zrb/builtin/project/add/fastapp/crud/_helper/register_rpc.py +45 -0
- zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
- zrb/builtin/project/add/fastapp/crud/crud.py +4 -25
- zrb/builtin/project/add/fastapp/crud/nodejs/codemod/package-lock.json +3 -3
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +12 -1
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +3 -2
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +9 -8
- zrb/builtin/project/add/fastapp/field/_helper/__init__.py +17 -0
- zrb/builtin/project/add/fastapp/field/_helper/_common.py +102 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_delete_page.py +49 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_detail_page.py +49 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_insert_page.py +62 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_list_page.py +47 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_repo.py +47 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_schema.py +45 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_test.py +49 -0
- zrb/builtin/project/add/fastapp/field/_helper/inject_update_page.py +50 -0
- zrb/builtin/project/add/fastapp/field/_input.py +14 -2
- zrb/builtin/project/add/fastapp/field/field.py +52 -70
- zrb/builtin/project/add/fastapp/module/_helper/__init__.py +17 -0
- zrb/builtin/project/add/fastapp/module/_helper/append_all_disabled_env.py +22 -0
- zrb/builtin/project/add/fastapp/module/_helper/append_all_enabled_env.py +22 -0
- zrb/builtin/project/add/fastapp/module/_helper/append_deployment_template_env.py +25 -0
- zrb/builtin/project/add/fastapp/module/_helper/append_src_template_env.py +25 -0
- zrb/builtin/project/add/fastapp/module/_helper/create_app_config.py +29 -0
- zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +157 -0
- zrb/builtin/project/add/fastapp/module/_helper/register_migration.py +35 -0
- zrb/builtin/project/add/fastapp/module/_helper/register_module.py +33 -0
- zrb/builtin/project/add/fastapp/module/module.py +9 -38
- zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -2
- zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +8 -8
- zrb/builtin/project/add/plugin/plugin.py +3 -3
- zrb/builtin/project/add/project_task/add.py +1 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
- zrb/builtin/project/add/task/cmd/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/task/python/add.py +1 -1
- zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
- zrb/builtin/project/create/_helper.py +1 -1
- zrb/builtin/project/create/create.py +3 -3
- zrb/builtin/say.py +3 -3
- zrb/builtin/version.py +5 -4
- zrb/config/config.py +24 -14
- zrb/helper/accessories/color.py +2 -1
- zrb/helper/advertisement.py +2 -1
- zrb/helper/asyncio_task.py +23 -0
- zrb/helper/callable.py +4 -1
- zrb/helper/cli.py +20 -6
- zrb/helper/codemod/add_import_module.py +3 -2
- zrb/helper/codemod/add_property_to_class.py +2 -1
- zrb/helper/default_env.py +2 -1
- zrb/helper/docker_compose/fetch_external_env.py +4 -2
- zrb/helper/docker_compose/file.py +3 -1
- zrb/helper/env_map/fetch.py +3 -2
- zrb/helper/file/copy_tree.py +2 -1
- zrb/helper/file/match.py +2 -2
- zrb/helper/git/detect_changes.py +1 -1
- zrb/helper/loader/load_module.py +7 -46
- zrb/helper/loader/load_script.py +57 -0
- zrb/helper/log.py +3 -3
- zrb/helper/map/conversion.py +3 -1
- zrb/helper/string/jinja.py +2 -1
- zrb/helper/string/parse_replacement.py +1 -1
- zrb/helper/typecheck.py +2 -2
- zrb/helper/typing.py +5 -27
- zrb/helper/util.py +13 -1
- zrb/runner.py +2 -2
- zrb/task/any_task.py +9 -17
- zrb/task/any_task_event_handler.py +3 -1
- zrb/task/base_remote_cmd_task.py +3 -10
- zrb/task/base_task/base_task.py +15 -11
- zrb/task/base_task/component/base_task_model.py +15 -22
- zrb/task/base_task/component/common_task_model.py +15 -22
- zrb/task/base_task/component/renderer.py +3 -1
- zrb/task/base_task/component/trackers.py +1 -1
- zrb/task/checker.py +2 -1
- zrb/task/cmd_task.py +10 -22
- zrb/task/decorator.py +3 -1
- zrb/task/docker_compose_start_task.py +146 -0
- zrb/task/docker_compose_task.py +43 -34
- zrb/task/flow_task.py +19 -17
- zrb/task/http_checker.py +3 -9
- zrb/task/looper.py +4 -2
- zrb/task/notifier.py +3 -1
- zrb/task/parallel.py +4 -4
- zrb/task/path_checker.py +6 -12
- zrb/task/path_watcher.py +5 -13
- zrb/task/port_checker.py +3 -9
- zrb/task/recurring_task.py +5 -4
- zrb/task/remote_cmd_task.py +2 -1
- zrb/task/resource_maker.py +6 -13
- zrb/task/rsync_task.py +3 -1
- zrb/task/server.py +13 -12
- zrb/task/time_watcher.py +3 -10
- zrb/task/watcher.py +2 -1
- zrb/task/wiki_task.py +4 -3
- zrb/task_env/env.py +2 -1
- zrb/task_env/env_file.py +7 -6
- zrb/task_group/group.py +8 -7
- zrb/task_input/any_input.py +4 -3
- zrb/task_input/base_input.py +7 -5
- zrb/task_input/bool_input.py +2 -1
- zrb/task_input/choice_input.py +3 -1
- zrb/task_input/float_input.py +2 -1
- zrb/task_input/int_input.py +2 -1
- zrb/task_input/multiline_input.py +5 -3
- zrb/task_input/password_input.py +2 -1
- zrb/task_input/str_input.py +2 -1
- {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/METADATA +2 -2
- {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/RECORD +242 -214
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/init.py +0 -34
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/init.py +0 -34
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/init.py +0 -36
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/init.py +0 -36
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/init.py +0 -26
- zrb/builtin/project/add/fastapp/crud/_helper.py +0 -118
- zrb/builtin/project/add/fastapp/field/_helper.py +0 -328
- zrb/builtin/project/add/fastapp/module/_helper.py +0 -313
- {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/LICENSE +0 -0
- {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/WHEEL +0 -0
- {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.codemod.add_property_to_class import add_property_to_class
|
4
|
+
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
5
|
+
from zrb.helper.typecheck import typechecked
|
6
|
+
from zrb.helper.util import to_pascal_case, to_snake_case
|
7
|
+
from zrb.task.task import Task
|
8
|
+
|
9
|
+
from ._common import get_app_dir, get_python_column_type
|
10
|
+
|
11
|
+
|
12
|
+
@typechecked
|
13
|
+
async def inject_schema(
|
14
|
+
task: Task,
|
15
|
+
project_dir: str,
|
16
|
+
app_name: str,
|
17
|
+
module_name: str,
|
18
|
+
entity_name: str,
|
19
|
+
column_name: str,
|
20
|
+
column_type: str,
|
21
|
+
):
|
22
|
+
snake_module_name = to_snake_case(module_name)
|
23
|
+
snake_entity_name = to_snake_case(entity_name)
|
24
|
+
pascal_entity_name = to_pascal_case(entity_name)
|
25
|
+
snake_column_name = to_snake_case(column_name)
|
26
|
+
schema_file_path = os.path.join(
|
27
|
+
get_app_dir(project_dir, app_name),
|
28
|
+
"src",
|
29
|
+
"module",
|
30
|
+
snake_module_name,
|
31
|
+
"schema",
|
32
|
+
f"{snake_entity_name}.py",
|
33
|
+
)
|
34
|
+
task.print_out(f"Read code from: {schema_file_path}")
|
35
|
+
code = await read_text_file_async(schema_file_path)
|
36
|
+
task.print_out(f'Add column "{snake_column_name}" to the schema')
|
37
|
+
python_column_type = get_python_column_type(column_type)
|
38
|
+
code = add_property_to_class(
|
39
|
+
code=code,
|
40
|
+
class_name=f"{pascal_entity_name}Data",
|
41
|
+
property_name=snake_column_name,
|
42
|
+
property_type=f"Optional[{python_column_type}]",
|
43
|
+
)
|
44
|
+
task.print_out(f"Write modified code to: {schema_file_path}")
|
45
|
+
await write_text_file_async(schema_file_path, code)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.codemod.add_key_value_to_dict import add_key_value_to_dict
|
4
|
+
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
5
|
+
from zrb.helper.typecheck import typechecked
|
6
|
+
from zrb.helper.util import to_snake_case
|
7
|
+
from zrb.task.task import Task
|
8
|
+
|
9
|
+
from ._common import get_app_dir, get_python_value_for_testing
|
10
|
+
|
11
|
+
|
12
|
+
@typechecked
|
13
|
+
async def inject_test(
|
14
|
+
task: Task,
|
15
|
+
project_dir: str,
|
16
|
+
app_name: str,
|
17
|
+
module_name: str,
|
18
|
+
entity_name: str,
|
19
|
+
column_name: str,
|
20
|
+
column_type: str,
|
21
|
+
):
|
22
|
+
snake_module_name = to_snake_case(module_name)
|
23
|
+
snake_entity_name = to_snake_case(entity_name)
|
24
|
+
snake_column_name = to_snake_case(column_name)
|
25
|
+
test_file_path = os.path.join(
|
26
|
+
get_app_dir(project_dir, app_name),
|
27
|
+
"test",
|
28
|
+
snake_module_name,
|
29
|
+
f"test_{snake_entity_name}.py",
|
30
|
+
)
|
31
|
+
task.print_out(f"Read code from: {test_file_path}")
|
32
|
+
code = await read_text_file_async(test_file_path)
|
33
|
+
task.print_out(f'Add column "{snake_column_name}" to the test')
|
34
|
+
dict_names = [
|
35
|
+
"inserted_success_data",
|
36
|
+
"to_be_updated_success_data",
|
37
|
+
"updated_success_data",
|
38
|
+
"to_be_deleted_success_data",
|
39
|
+
]
|
40
|
+
default_python_value = get_python_value_for_testing(column_type)
|
41
|
+
for dict_name in dict_names:
|
42
|
+
code = add_key_value_to_dict(
|
43
|
+
code=code,
|
44
|
+
dict_name=dict_name,
|
45
|
+
key=f"'{snake_column_name}'",
|
46
|
+
value=default_python_value,
|
47
|
+
)
|
48
|
+
task.print_out(f"Write modified code to: {test_file_path}")
|
49
|
+
await write_text_file_async(test_file_path, code)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_capitalized_human_readable, to_kebab_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
from ._common import get_app_frontend_routes_dir, get_html_input, replace_marker
|
9
|
+
|
10
|
+
|
11
|
+
@typechecked
|
12
|
+
async def inject_update_page(
|
13
|
+
task: Task,
|
14
|
+
project_dir: str,
|
15
|
+
app_name: str,
|
16
|
+
module_name: str,
|
17
|
+
entity_name: str,
|
18
|
+
column_name: str,
|
19
|
+
column_type: str,
|
20
|
+
):
|
21
|
+
kebab_module_name = to_kebab_case(module_name)
|
22
|
+
kebab_entity_name = to_kebab_case(entity_name)
|
23
|
+
kebab_column_name = to_kebab_case(column_name)
|
24
|
+
column_caption = to_capitalized_human_readable(column_name)
|
25
|
+
list_page_file_path = os.path.join(
|
26
|
+
get_app_frontend_routes_dir(project_dir, app_name),
|
27
|
+
kebab_module_name,
|
28
|
+
kebab_entity_name,
|
29
|
+
"update",
|
30
|
+
"[id]",
|
31
|
+
"+page.svelte",
|
32
|
+
)
|
33
|
+
task.print_out(f"Read HTML from: {list_page_file_path}")
|
34
|
+
html_content = await read_text_file_async(list_page_file_path)
|
35
|
+
task.print_out("Add field to update page")
|
36
|
+
html_input = get_html_input(column_type, column_name, column_caption)
|
37
|
+
html_content = replace_marker(
|
38
|
+
html_content,
|
39
|
+
marker="<!-- DON'T DELETE: insert new field here-->",
|
40
|
+
code="\n".join(
|
41
|
+
[
|
42
|
+
'<div class="mb-4">',
|
43
|
+
f' <label class="block text-gray-700 font-bold mb-2" for="{kebab_column_name}">{column_caption}</label>', # noqa
|
44
|
+
f" {html_input}",
|
45
|
+
"</div>",
|
46
|
+
]
|
47
|
+
),
|
48
|
+
)
|
49
|
+
task.print_out(f"Write modified HTML to: {list_page_file_path}")
|
50
|
+
await write_text_file_async(list_page_file_path, html_content)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
from zrb.task_input.choice_input import ChoiceInput
|
1
2
|
from zrb.task_input.str_input import StrInput
|
2
3
|
|
3
4
|
column_name_input = StrInput(
|
@@ -8,10 +9,21 @@ column_name_input = StrInput(
|
|
8
9
|
default="title",
|
9
10
|
)
|
10
11
|
|
11
|
-
column_type_input =
|
12
|
+
column_type_input = ChoiceInput(
|
12
13
|
name="column-type",
|
13
14
|
shortcut="t",
|
14
15
|
description="Column type",
|
15
16
|
prompt="Column type",
|
16
|
-
|
17
|
+
choices=[
|
18
|
+
"string",
|
19
|
+
"text",
|
20
|
+
"boolean",
|
21
|
+
"integer",
|
22
|
+
"float",
|
23
|
+
"double",
|
24
|
+
"date",
|
25
|
+
"datetime",
|
26
|
+
"time",
|
27
|
+
],
|
28
|
+
default="string",
|
17
29
|
)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
import os
|
3
|
+
from typing import Any
|
3
4
|
|
4
5
|
from zrb.builtin.project._helper import validate_existing_project_dir
|
5
6
|
from zrb.builtin.project._input import project_dir_input
|
@@ -7,14 +8,14 @@ from zrb.builtin.project.add.fastapp._group import project_add_fastapp_group
|
|
7
8
|
from zrb.builtin.project.add.fastapp.app._input import app_name_input
|
8
9
|
from zrb.builtin.project.add.fastapp.crud._input import entity_name_input
|
9
10
|
from zrb.builtin.project.add.fastapp.field._helper import (
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
inject_delete_page,
|
12
|
+
inject_detail_page,
|
13
|
+
inject_insert_page,
|
14
|
+
inject_list_page,
|
15
|
+
inject_repo,
|
16
|
+
inject_schema,
|
17
|
+
inject_test,
|
18
|
+
inject_update_page,
|
18
19
|
)
|
19
20
|
from zrb.builtin.project.add.fastapp.field._input import (
|
20
21
|
column_name_input,
|
@@ -23,7 +24,6 @@ from zrb.builtin.project.add.fastapp.field._input import (
|
|
23
24
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
24
25
|
from zrb.helper import util
|
25
26
|
from zrb.helper.accessories.color import colored
|
26
|
-
from zrb.helper.typing import Any
|
27
27
|
from zrb.runner import runner
|
28
28
|
from zrb.task.decorator import python_task
|
29
29
|
from zrb.task.task import Task
|
@@ -80,109 +80,91 @@ async def add_fastapp_field(*args: Any, **kwargs: Any):
|
|
80
80
|
module_name = kwargs.get("module_name")
|
81
81
|
entity_name = kwargs.get("entity_name")
|
82
82
|
column_name = kwargs.get("column_name")
|
83
|
-
column_type = kwargs.get("
|
84
|
-
kebab_app_name = util.to_kebab_case(app_name)
|
85
|
-
kebab_module_name = util.to_kebab_case(module_name)
|
86
|
-
snake_module_name = util.to_snake_case(module_name)
|
87
|
-
kebab_entity_name = util.to_kebab_case(entity_name)
|
88
|
-
snake_entity_name = util.to_snake_case(entity_name)
|
89
|
-
pascal_entity_name = util.to_pascal_case(entity_name)
|
90
|
-
snake_column_name = util.to_snake_case(column_name)
|
91
|
-
kebab_column_name = util.to_kebab_case(column_name)
|
92
|
-
column_caption = util.to_capitalized_human_readable(column_name)
|
83
|
+
column_type = kwargs.get("column_type")
|
93
84
|
await asyncio.gather(
|
94
85
|
asyncio.create_task(
|
95
|
-
|
86
|
+
inject_test(
|
96
87
|
task=task,
|
97
88
|
project_dir=project_dir,
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
89
|
+
app_name=app_name,
|
90
|
+
module_name=module_name,
|
91
|
+
entity_name=entity_name,
|
92
|
+
column_name=column_name,
|
102
93
|
column_type=column_type,
|
103
94
|
)
|
104
95
|
),
|
105
96
|
asyncio.create_task(
|
106
|
-
|
97
|
+
inject_schema(
|
107
98
|
task=task,
|
108
99
|
project_dir=project_dir,
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
snake_column_name=snake_column_name,
|
100
|
+
app_name=app_name,
|
101
|
+
module_name=module_name,
|
102
|
+
entity_name=entity_name,
|
103
|
+
column_name=column_name,
|
114
104
|
column_type=column_type,
|
115
105
|
)
|
116
106
|
),
|
117
107
|
asyncio.create_task(
|
118
|
-
|
108
|
+
inject_repo(
|
119
109
|
task=task,
|
120
110
|
project_dir=project_dir,
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
snake_column_name=snake_column_name,
|
111
|
+
app_name=app_name,
|
112
|
+
module_name=module_name,
|
113
|
+
entity_name=entity_name,
|
114
|
+
column_name=column_name,
|
126
115
|
column_type=column_type,
|
127
116
|
)
|
128
117
|
),
|
129
118
|
asyncio.create_task(
|
130
|
-
|
119
|
+
inject_list_page(
|
131
120
|
task=task,
|
132
121
|
project_dir=project_dir,
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
column_caption=column_caption,
|
122
|
+
app_name=app_name,
|
123
|
+
module_name=module_name,
|
124
|
+
entity_name=entity_name,
|
125
|
+
column_name=column_name,
|
138
126
|
)
|
139
127
|
),
|
140
128
|
asyncio.create_task(
|
141
|
-
|
129
|
+
inject_detail_page(
|
142
130
|
task=task,
|
143
131
|
project_dir=project_dir,
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
snake_column_name=snake_column_name,
|
149
|
-
column_caption=column_caption,
|
132
|
+
app_name=app_name,
|
133
|
+
module_name=module_name,
|
134
|
+
entity_name=entity_name,
|
135
|
+
column_name=column_name,
|
150
136
|
)
|
151
137
|
),
|
152
138
|
asyncio.create_task(
|
153
|
-
|
139
|
+
inject_delete_page(
|
154
140
|
task=task,
|
155
141
|
project_dir=project_dir,
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
snake_column_name=snake_column_name,
|
161
|
-
column_caption=column_caption,
|
142
|
+
app_name=app_name,
|
143
|
+
module_name=module_name,
|
144
|
+
entity_name=entity_name,
|
145
|
+
column_name=column_name,
|
162
146
|
)
|
163
147
|
),
|
164
148
|
asyncio.create_task(
|
165
|
-
|
149
|
+
inject_update_page(
|
166
150
|
task=task,
|
167
151
|
project_dir=project_dir,
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
column_caption=column_caption,
|
152
|
+
app_name=app_name,
|
153
|
+
module_name=module_name,
|
154
|
+
entity_name=entity_name,
|
155
|
+
column_name=column_name,
|
156
|
+
column_type=column_type,
|
174
157
|
)
|
175
158
|
),
|
176
159
|
asyncio.create_task(
|
177
|
-
|
160
|
+
inject_insert_page(
|
178
161
|
task=task,
|
179
162
|
project_dir=project_dir,
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
column_caption=column_caption,
|
163
|
+
app_name=app_name,
|
164
|
+
module_name=module_name,
|
165
|
+
entity_name=entity_name,
|
166
|
+
column_name=column_name,
|
167
|
+
column_type=column_type,
|
186
168
|
)
|
187
169
|
),
|
188
170
|
)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
from .append_all_disabled_env import append_all_disabled_env
|
2
|
+
from .append_all_enabled_env import append_all_enabled_env
|
3
|
+
from .append_deployment_template_env import append_deployment_template_env
|
4
|
+
from .append_src_template_env import append_src_template_env
|
5
|
+
from .create_app_config import create_app_config
|
6
|
+
from .create_microservice_config import create_microservice_config
|
7
|
+
from .register_migration import register_migration
|
8
|
+
from .register_module import register_module
|
9
|
+
|
10
|
+
assert append_all_disabled_env
|
11
|
+
assert append_all_enabled_env
|
12
|
+
assert append_deployment_template_env
|
13
|
+
assert append_src_template_env
|
14
|
+
assert create_app_config
|
15
|
+
assert create_microservice_config
|
16
|
+
assert register_migration
|
17
|
+
assert register_module
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import append_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
|
9
|
+
@typechecked
|
10
|
+
async def append_all_disabled_env(
|
11
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
12
|
+
):
|
13
|
+
kebab_app_name = to_kebab_case(app_name)
|
14
|
+
snake_module_name = to_snake_case(module_name)
|
15
|
+
upper_snake_module_name = snake_module_name.upper()
|
16
|
+
all_disabled_env_path = os.path.join(
|
17
|
+
project_dir, "src", kebab_app_name, "all-module-disabled.env"
|
18
|
+
)
|
19
|
+
task.print_out(f"Add new environment to: {all_disabled_env_path}")
|
20
|
+
await append_text_file_async(
|
21
|
+
all_disabled_env_path, f"APP_ENABLE_{upper_snake_module_name}_MODULE=false"
|
22
|
+
)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import append_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
|
9
|
+
@typechecked
|
10
|
+
async def append_all_enabled_env(
|
11
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
12
|
+
):
|
13
|
+
kebab_app_name = to_kebab_case(app_name)
|
14
|
+
snake_module_name = to_snake_case(module_name)
|
15
|
+
upper_snake_module_name = snake_module_name.upper()
|
16
|
+
all_enabled_env_path = os.path.join(
|
17
|
+
project_dir, "src", kebab_app_name, "all-module-enabled.env"
|
18
|
+
)
|
19
|
+
task.print_out(f"Add new environment to: {all_enabled_env_path}")
|
20
|
+
await append_text_file_async(
|
21
|
+
all_enabled_env_path, f"APP_ENABLE_{upper_snake_module_name}_MODULE=true"
|
22
|
+
)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import append_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
|
9
|
+
@typechecked
|
10
|
+
async def append_deployment_template_env(
|
11
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
12
|
+
):
|
13
|
+
kebab_app_name = to_kebab_case(app_name)
|
14
|
+
snake_module_name = to_snake_case(module_name)
|
15
|
+
upper_snake_module_name = snake_module_name.upper()
|
16
|
+
deployment_template_env_path = os.path.join(
|
17
|
+
project_dir, "src", kebab_app_name, "deployment", "template.env"
|
18
|
+
)
|
19
|
+
new_env_str = "\n".join(
|
20
|
+
[
|
21
|
+
f"REPLICA_{upper_snake_module_name}_SERVICE=1",
|
22
|
+
]
|
23
|
+
)
|
24
|
+
task.print_out(f"Add new environment to: {deployment_template_env_path}")
|
25
|
+
await append_text_file_async(deployment_template_env_path, new_env_str)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import append_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
|
9
|
+
@typechecked
|
10
|
+
async def append_src_template_env(
|
11
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
12
|
+
):
|
13
|
+
kebab_app_name = to_kebab_case(app_name)
|
14
|
+
snake_module_name = to_snake_case(module_name)
|
15
|
+
upper_snake_module_name = snake_module_name.upper()
|
16
|
+
src_template_env_path = os.path.join(
|
17
|
+
project_dir, "src", kebab_app_name, "src", "template.env"
|
18
|
+
)
|
19
|
+
new_env_str = "\n".join(
|
20
|
+
[
|
21
|
+
f"APP_ENABLE_{upper_snake_module_name}_MODULE=true",
|
22
|
+
]
|
23
|
+
)
|
24
|
+
task.print_out(f"Add new environment to: {src_template_env_path}")
|
25
|
+
await append_text_file_async(src_template_env_path, new_env_str)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
4
|
+
from zrb.helper.typecheck import typechecked
|
5
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
|
9
|
+
@typechecked
|
10
|
+
async def create_app_config(
|
11
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
12
|
+
):
|
13
|
+
kebab_app_name = to_kebab_case(app_name)
|
14
|
+
snake_module_name = to_snake_case(module_name)
|
15
|
+
upper_snake_module_name = snake_module_name.upper()
|
16
|
+
config_file_path = os.path.join(
|
17
|
+
project_dir, "src", kebab_app_name, "src", "config.py"
|
18
|
+
)
|
19
|
+
config_code = "\n".join(
|
20
|
+
[
|
21
|
+
f"APP_ENABLE_{upper_snake_module_name}_MODULE = str_to_boolean(os.environ.get(", # noqa
|
22
|
+
f" 'APP_ENABLE_{upper_snake_module_name}_MODULE', 'true'" "))",
|
23
|
+
]
|
24
|
+
)
|
25
|
+
task.print_out(f"Read config from: {config_file_path}")
|
26
|
+
code = await read_text_file_async(config_file_path)
|
27
|
+
code += "\n" + config_code
|
28
|
+
task.print_out(f"Write config to: {config_file_path}")
|
29
|
+
await write_text_file_async(config_file_path, code)
|
@@ -0,0 +1,157 @@
|
|
1
|
+
import asyncio
|
2
|
+
import os
|
3
|
+
from collections.abc import Mapping
|
4
|
+
from typing import Any
|
5
|
+
|
6
|
+
import jsons
|
7
|
+
from dotenv import dotenv_values
|
8
|
+
|
9
|
+
from zrb.helper.docker_compose.file import add_services
|
10
|
+
from zrb.helper.file.text import (
|
11
|
+
append_text_file_async,
|
12
|
+
read_text_file_async,
|
13
|
+
write_text_file_async,
|
14
|
+
)
|
15
|
+
from zrb.helper.typecheck import typechecked
|
16
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
17
|
+
from zrb.task.task import Task
|
18
|
+
|
19
|
+
|
20
|
+
@typechecked
|
21
|
+
async def create_microservice_config(
|
22
|
+
task: Task, project_dir: str, app_name: str, module_name: str
|
23
|
+
):
|
24
|
+
modules = await _create_automation_json_config(
|
25
|
+
task, project_dir, app_name, module_name
|
26
|
+
)
|
27
|
+
return await asyncio.gather(
|
28
|
+
asyncio.create_task(
|
29
|
+
_add_docker_compose_service(
|
30
|
+
task, modules, project_dir, app_name, module_name
|
31
|
+
)
|
32
|
+
),
|
33
|
+
asyncio.create_task(
|
34
|
+
_append_compose_env(task, modules, project_dir, app_name, module_name)
|
35
|
+
),
|
36
|
+
)
|
37
|
+
|
38
|
+
|
39
|
+
@typechecked
|
40
|
+
async def _add_docker_compose_service(
|
41
|
+
task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
|
42
|
+
):
|
43
|
+
kebab_app_name = to_kebab_case(app_name)
|
44
|
+
snake_module_name = to_snake_case(module_name)
|
45
|
+
upper_snake_module_name = snake_module_name.upper()
|
46
|
+
module_app_port = 8080 + len(modules)
|
47
|
+
module_app_port_str = str(module_app_port)
|
48
|
+
docker_compose_file_path = os.path.join(
|
49
|
+
project_dir, "src", kebab_app_name, "docker-compose.yml"
|
50
|
+
)
|
51
|
+
app_container_port_env_name = f"APP_{upper_snake_module_name}_MODULE_PORT"
|
52
|
+
app_container_port_env = (
|
53
|
+
"${" + app_container_port_env_name + ":-" + module_app_port_str + "}"
|
54
|
+
)
|
55
|
+
app_host_port_env_name = f"APP_{upper_snake_module_name}_HOST_MODULE_PORT"
|
56
|
+
app_host_port_env = "${" + app_host_port_env_name + ":-" + module_app_port_str + "}"
|
57
|
+
service_definition = _get_new_docker_compose_service_definition(
|
58
|
+
app_name=app_name,
|
59
|
+
module_name=module_name,
|
60
|
+
app_host_port_env=app_host_port_env,
|
61
|
+
app_container_port_env=app_container_port_env,
|
62
|
+
)
|
63
|
+
task.print_out(f"Add service at: {docker_compose_file_path}")
|
64
|
+
add_services(
|
65
|
+
file_name=docker_compose_file_path,
|
66
|
+
new_services=service_definition,
|
67
|
+
)
|
68
|
+
|
69
|
+
|
70
|
+
@typechecked
|
71
|
+
def _get_new_docker_compose_service_definition(
|
72
|
+
app_name: str, module_name: str, app_host_port_env: str, app_container_port_env: str
|
73
|
+
) -> Mapping[str, Any]:
|
74
|
+
kebab_app_name = to_kebab_case(app_name)
|
75
|
+
kebab_module_name = to_kebab_case(module_name)
|
76
|
+
snake_module_name = to_snake_case(module_name)
|
77
|
+
upper_snake_module_name = snake_module_name.upper()
|
78
|
+
return {
|
79
|
+
f"{kebab_app_name}-{kebab_module_name}-service": {
|
80
|
+
"build": {"dockerfile": "Dockerfile", "context": "./src"},
|
81
|
+
"image": "${IMAGE:-" + kebab_app_name + "}",
|
82
|
+
"container_name": "${CONTAINER_PREFIX:-my}-"
|
83
|
+
+ f"{kebab_app_name}-{kebab_module_name}-service", # noqa
|
84
|
+
"hostname": f"{kebab_app_name}-{kebab_module_name}-service",
|
85
|
+
"env_file": ["src/template.env", "all-module-disabled.env"],
|
86
|
+
"environment": {
|
87
|
+
"APP_NAME": "${APP_NAME:-"
|
88
|
+
+ kebab_app_name
|
89
|
+
+ "}-"
|
90
|
+
+ f"{kebab_module_name}-service", # noqa
|
91
|
+
"APP_ENABLE_OTEL": "${APP_ENABLE_OTEL:-0}",
|
92
|
+
"APP_PORT": app_container_port_env,
|
93
|
+
"APP_ENABLE_EVENT_HANDLER": "true",
|
94
|
+
"APP_ENABLE_RPC_SERVER": "true",
|
95
|
+
"APP_ENABLE_API": "false",
|
96
|
+
"APP_ENABLE_FRONTEND": "false",
|
97
|
+
f"APP_ENABLE_{upper_snake_module_name}_MODULE": "true",
|
98
|
+
},
|
99
|
+
"ports": [f"{app_host_port_env}:{app_container_port_env}"],
|
100
|
+
"restart": "unless-stopped",
|
101
|
+
"profiles": ["microservices"],
|
102
|
+
"healthcheck": {
|
103
|
+
"test": f"curl --fail http://localhost:{app_container_port_env}/readiness || killall uvicorn", # noqa
|
104
|
+
"interval": "20s",
|
105
|
+
"timeout": "3s",
|
106
|
+
"retries": 10,
|
107
|
+
"start_period": "20s",
|
108
|
+
},
|
109
|
+
"networks": ["zrb"],
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
|
114
|
+
@typechecked
|
115
|
+
async def _create_automation_json_config(
|
116
|
+
task: Task,
|
117
|
+
project_dir: str,
|
118
|
+
app_name: str,
|
119
|
+
module_name: str,
|
120
|
+
):
|
121
|
+
snake_app_name = to_snake_case(app_name)
|
122
|
+
snake_module_name = to_snake_case(module_name)
|
123
|
+
json_modules_file_path = os.path.join(
|
124
|
+
project_dir, "_automate", snake_app_name, "config", "modules.json"
|
125
|
+
)
|
126
|
+
task.print_out(f"Read json config from: {json_modules_file_path}")
|
127
|
+
json_str = await read_text_file_async(json_modules_file_path)
|
128
|
+
task.print_out(f'Add "{snake_module_name}" to json config')
|
129
|
+
modules: list[str] = jsons.loads(json_str)
|
130
|
+
modules.append(snake_module_name)
|
131
|
+
json_str = jsons.dumps(modules)
|
132
|
+
task.print_out(f"Write new json config to: {json_modules_file_path}")
|
133
|
+
await write_text_file_async(json_modules_file_path, json_str)
|
134
|
+
return modules
|
135
|
+
|
136
|
+
|
137
|
+
@typechecked
|
138
|
+
async def _append_compose_env(
|
139
|
+
task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
|
140
|
+
):
|
141
|
+
kebab_app_name = to_kebab_case(app_name)
|
142
|
+
snake_module_name = to_snake_case(module_name)
|
143
|
+
upper_snake_module_name = snake_module_name.upper()
|
144
|
+
compose_template_env_path = os.path.join(
|
145
|
+
project_dir, "src", kebab_app_name, "docker-compose.env"
|
146
|
+
)
|
147
|
+
compose_env_map = dotenv_values(compose_template_env_path)
|
148
|
+
host_port = int(compose_env_map.get("APP_GATEWAY_HOST_PORT", "8080"))
|
149
|
+
module_app_port = host_port + len(modules)
|
150
|
+
new_env_str = "\n".join(
|
151
|
+
[
|
152
|
+
f"APP_{upper_snake_module_name}_HOST_MODULE_PORT={module_app_port}",
|
153
|
+
f"APP_{upper_snake_module_name}_MODULE_PORT={module_app_port}",
|
154
|
+
]
|
155
|
+
)
|
156
|
+
task.print_out(f"Add new environment to: {compose_template_env_path}")
|
157
|
+
await append_text_file_async(compose_template_env_path, new_env_str)
|