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,40 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.codemod.append_code_to_function import append_code_to_function
|
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_module_dir
|
10
|
+
|
11
|
+
|
12
|
+
@typechecked
|
13
|
+
async def register_permission(
|
14
|
+
task: Task, project_dir: str, app_name: str, module_name: str, entity_name: str
|
15
|
+
):
|
16
|
+
snake_module_name = to_snake_case(module_name)
|
17
|
+
snake_entity_name = to_snake_case(entity_name)
|
18
|
+
module_register_permission_file_path = os.path.join(
|
19
|
+
get_app_module_dir(project_dir, app_name),
|
20
|
+
"auth",
|
21
|
+
"register_permission.py",
|
22
|
+
)
|
23
|
+
task.print_out(f"Read code from: {module_register_permission_file_path}")
|
24
|
+
code = await read_text_file_async(module_register_permission_file_path)
|
25
|
+
code = append_code_to_function(
|
26
|
+
code=code,
|
27
|
+
function_name="register_permission",
|
28
|
+
new_code="\n".join(
|
29
|
+
[
|
30
|
+
"await ensure_entity_permission(",
|
31
|
+
f" module_name='{snake_module_name}', entity_name='{snake_entity_name}'", # noqa
|
32
|
+
")",
|
33
|
+
]
|
34
|
+
),
|
35
|
+
)
|
36
|
+
task.print_out(
|
37
|
+
f'Add "ensure_entity_permission" call for {snake_entity_name} ' + "to the code"
|
38
|
+
)
|
39
|
+
task.print_out(f"Write modified code to: {module_register_permission_file_path}")
|
40
|
+
await write_text_file_async(module_register_permission_file_path, code)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.codemod.add_import_module import add_import_module
|
4
|
+
from zrb.helper.codemod.append_code_to_function import append_code_to_function
|
5
|
+
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
6
|
+
from zrb.helper.typecheck import typechecked
|
7
|
+
from zrb.helper.util import to_snake_case
|
8
|
+
from zrb.task.task import Task
|
9
|
+
|
10
|
+
from ._common import get_app_module_dir
|
11
|
+
|
12
|
+
|
13
|
+
@typechecked
|
14
|
+
async def register_rpc(
|
15
|
+
task: Task, project_dir: str, app_name: str, module_name: str, entity_name: str
|
16
|
+
):
|
17
|
+
snake_module_name = to_snake_case(module_name)
|
18
|
+
snake_entity_name = to_snake_case(entity_name)
|
19
|
+
module_rpc_file_path = os.path.join(
|
20
|
+
get_app_module_dir(project_dir, app_name), snake_module_name, "rpc.py"
|
21
|
+
)
|
22
|
+
register_function_path = ".".join(
|
23
|
+
["module", snake_module_name, "entity", snake_entity_name, "rpc"]
|
24
|
+
)
|
25
|
+
register_function = f"register_{snake_entity_name}_rpc"
|
26
|
+
task.print_out(f"Read code from: {module_rpc_file_path}")
|
27
|
+
code = await read_text_file_async(module_rpc_file_path)
|
28
|
+
task.print_out(
|
29
|
+
f'Add import "register_rpc" as "{register_function}" '
|
30
|
+
+ f'from "{register_function_path}" to the code'
|
31
|
+
)
|
32
|
+
code = add_import_module(
|
33
|
+
code=code,
|
34
|
+
module_path=register_function_path,
|
35
|
+
resource="register_rpc",
|
36
|
+
alias=register_function,
|
37
|
+
)
|
38
|
+
task.print_out(f'Add "{register_function}" call to the code')
|
39
|
+
code = append_code_to_function(
|
40
|
+
code=code,
|
41
|
+
function_name="register_rpc",
|
42
|
+
new_code=f"{register_function}(logger, rpc_server, rpc_caller, publisher)", # noqa
|
43
|
+
)
|
44
|
+
task.print_out(f"Write modified code to: {module_rpc_file_path}")
|
45
|
+
await write_text_file_async(module_rpc_file_path, code)
|
@@ -5,7 +5,6 @@ from zrb.builtin.project.add.fastapp.app._input import app_name_input
|
|
5
5
|
from zrb.builtin.project.add.fastapp.crud._input import entity_name_input
|
6
6
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
7
7
|
from zrb.helper.typecheck import typechecked
|
8
|
-
from zrb.helper.typing import List
|
9
8
|
from zrb.task.any_task import AnyTask
|
10
9
|
from zrb.task.cmd_task import CmdTask
|
11
10
|
|
@@ -20,7 +19,7 @@ _NAV_PERMISSION = "{{util.to_snake_case(input.module_name)}}:{{util.to_snake_cas
|
|
20
19
|
|
21
20
|
|
22
21
|
@typechecked
|
23
|
-
def create_add_navigation_task(upstreams:
|
22
|
+
def create_add_navigation_task(upstreams: list[AnyTask]) -> AnyTask:
|
24
23
|
return CmdTask(
|
25
24
|
name="add-navigation",
|
26
25
|
inputs=[
|
@@ -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
|
@@ -21,7 +22,6 @@ from zrb.builtin.project.add.fastapp.crud._task_factory import (
|
|
21
22
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
22
23
|
from zrb.helper import util
|
23
24
|
from zrb.helper.accessories.color import colored
|
24
|
-
from zrb.helper.typing import Any
|
25
25
|
from zrb.runner import runner
|
26
26
|
from zrb.task.cmd_task import CmdTask
|
27
27
|
from zrb.task.decorator import python_task
|
@@ -107,36 +107,15 @@ async def register_crud(*args: Any, **kwargs: Any):
|
|
107
107
|
app_name = kwargs.get("app_name")
|
108
108
|
module_name = kwargs.get("module_name")
|
109
109
|
entity_name = kwargs.get("entity_name")
|
110
|
-
kebab_app_name = util.to_kebab_case(app_name)
|
111
|
-
snake_module_name = util.to_snake_case(module_name)
|
112
|
-
snake_entity_name = util.to_snake_case(entity_name)
|
113
110
|
await asyncio.gather(
|
114
111
|
asyncio.create_task(
|
115
|
-
register_api(
|
116
|
-
task=task,
|
117
|
-
project_dir=project_dir,
|
118
|
-
kebab_app_name=kebab_app_name,
|
119
|
-
snake_module_name=snake_module_name,
|
120
|
-
snake_entity_name=snake_entity_name,
|
121
|
-
)
|
112
|
+
register_api(task, project_dir, app_name, module_name, entity_name)
|
122
113
|
),
|
123
114
|
asyncio.create_task(
|
124
|
-
register_rpc(
|
125
|
-
task=task,
|
126
|
-
project_dir=project_dir,
|
127
|
-
kebab_app_name=kebab_app_name,
|
128
|
-
snake_module_name=snake_module_name,
|
129
|
-
snake_entity_name=snake_entity_name,
|
130
|
-
)
|
115
|
+
register_rpc(task, project_dir, app_name, module_name, entity_name)
|
131
116
|
),
|
132
117
|
asyncio.create_task(
|
133
|
-
register_permission(
|
134
|
-
task=task,
|
135
|
-
project_dir=project_dir,
|
136
|
-
kebab_app_name=kebab_app_name,
|
137
|
-
snake_module_name=snake_module_name,
|
138
|
-
snake_entity_name=snake_entity_name,
|
139
|
-
)
|
118
|
+
register_permission(task, project_dir, app_name, module_name, entity_name)
|
140
119
|
),
|
141
120
|
)
|
142
121
|
|
@@ -178,9 +178,9 @@
|
|
178
178
|
}
|
179
179
|
},
|
180
180
|
"node_modules/micromatch": {
|
181
|
-
"version": "4.0.
|
182
|
-
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.
|
183
|
-
"integrity": "sha512-
|
181
|
+
"version": "4.0.8",
|
182
|
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
183
|
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
184
184
|
"dependencies": {
|
185
185
|
"braces": "^3.0.3",
|
186
186
|
"picomatch": "^2.3.1"
|
@@ -4,7 +4,18 @@ from module.snake_zrb_module_name.schema.snake_zrb_entity_name import (
|
|
4
4
|
PascalZrbEntityName,
|
5
5
|
PascalZrbEntityNameData,
|
6
6
|
)
|
7
|
-
from sqlalchemy import
|
7
|
+
from sqlalchemy import (
|
8
|
+
Boolean,
|
9
|
+
Column,
|
10
|
+
Date,
|
11
|
+
DateTime,
|
12
|
+
Double,
|
13
|
+
Float,
|
14
|
+
Integer,
|
15
|
+
String,
|
16
|
+
Text,
|
17
|
+
Time,
|
18
|
+
)
|
8
19
|
|
9
20
|
|
10
21
|
class DBEntityPascalZrbEntityName(Base, DBEntityMixin):
|
@@ -1,4 +1,5 @@
|
|
1
|
-
from
|
1
|
+
from datetime import date, datetime, time
|
2
|
+
from typing import Optional
|
2
3
|
|
3
4
|
from component.schema import BaseCountSchema, BaseDateTimeSchema
|
4
5
|
|
@@ -15,4 +16,4 @@ class PascalZrbEntityName(PascalZrbEntityNameData):
|
|
15
16
|
|
16
17
|
|
17
18
|
class PascalZrbEntityNameResult(BaseCountSchema):
|
18
|
-
data:
|
19
|
+
data: list[PascalZrbEntityName]
|
@@ -1,8 +1,9 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import AsyncIterator
|
2
|
+
from datetime import date, datetime, time
|
2
3
|
|
3
4
|
import pytest
|
5
|
+
from config import APP_AUTH_ADMIN_PASSWORD, APP_AUTH_ADMIN_USERNAME
|
4
6
|
from httpx import AsyncClient
|
5
|
-
from src.config import app_auth_admin_password, app_auth_admin_username
|
6
7
|
|
7
8
|
inserted_success_data = {
|
8
9
|
"snake_zrb_column_name": "test-kebab-create-entity-name-success"
|
@@ -27,8 +28,8 @@ async def test_insert_snake_zrb_entity_name_and_get_success(
|
|
27
28
|
login_admin_response = await client.post(
|
28
29
|
"/api/v1/auth/login",
|
29
30
|
json={
|
30
|
-
"identity":
|
31
|
-
"password":
|
31
|
+
"identity": APP_AUTH_ADMIN_USERNAME,
|
32
|
+
"password": APP_AUTH_ADMIN_PASSWORD,
|
32
33
|
},
|
33
34
|
)
|
34
35
|
assert login_admin_response.status_code == 200
|
@@ -80,8 +81,8 @@ async def test_update_snake_zrb_entity_name_and_get_success(
|
|
80
81
|
login_admin_response = await client.post(
|
81
82
|
"/api/v1/auth/login",
|
82
83
|
json={
|
83
|
-
"identity":
|
84
|
-
"password":
|
84
|
+
"identity": APP_AUTH_ADMIN_USERNAME,
|
85
|
+
"password": APP_AUTH_ADMIN_PASSWORD,
|
85
86
|
},
|
86
87
|
)
|
87
88
|
assert login_admin_response.status_code == 200
|
@@ -147,8 +148,8 @@ async def test_delete_snake_zrb_entity_name_and_get_success(
|
|
147
148
|
login_admin_response = await client.post(
|
148
149
|
"/api/v1/auth/login",
|
149
150
|
json={
|
150
|
-
"identity":
|
151
|
-
"password":
|
151
|
+
"identity": APP_AUTH_ADMIN_USERNAME,
|
152
|
+
"password": APP_AUTH_ADMIN_PASSWORD,
|
152
153
|
},
|
153
154
|
)
|
154
155
|
assert login_admin_response.status_code == 200
|
@@ -0,0 +1,17 @@
|
|
1
|
+
from .inject_delete_page import inject_delete_page
|
2
|
+
from .inject_detail_page import inject_detail_page
|
3
|
+
from .inject_insert_page import inject_insert_page
|
4
|
+
from .inject_list_page import inject_list_page
|
5
|
+
from .inject_repo import inject_repo
|
6
|
+
from .inject_schema import inject_schema
|
7
|
+
from .inject_test import inject_test
|
8
|
+
from .inject_update_page import inject_update_page
|
9
|
+
|
10
|
+
assert inject_list_page
|
11
|
+
assert inject_detail_page
|
12
|
+
assert inject_insert_page
|
13
|
+
assert inject_update_page
|
14
|
+
assert inject_delete_page
|
15
|
+
assert inject_repo
|
16
|
+
assert inject_schema
|
17
|
+
assert inject_test
|
@@ -0,0 +1,102 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.helper.string.parse_replacement import parse_replacement
|
4
|
+
from zrb.helper.util import to_kebab_case, to_snake_case
|
5
|
+
|
6
|
+
|
7
|
+
def replace_marker(text: str, marker: str, code: str) -> str:
|
8
|
+
return parse_replacement(text, {marker: "\n".join([code, marker])})
|
9
|
+
|
10
|
+
|
11
|
+
def get_app_frontend_routes_dir(project_dir: str, app_name: str) -> str:
|
12
|
+
return os.path.join(
|
13
|
+
get_app_dir(project_dir, app_name), "src", "frontend", "src", "routes"
|
14
|
+
)
|
15
|
+
|
16
|
+
|
17
|
+
def get_app_dir(project_dir: str, app_name: str) -> str:
|
18
|
+
kebab_app_name = to_kebab_case(app_name)
|
19
|
+
return os.path.join(project_dir, "src", kebab_app_name)
|
20
|
+
|
21
|
+
|
22
|
+
def get_sqlalchemy_column_type(column_type: str) -> str:
|
23
|
+
default_value = "String"
|
24
|
+
type_map = {
|
25
|
+
"string": default_value,
|
26
|
+
"text": "Text",
|
27
|
+
"boolean": "Boolean",
|
28
|
+
"integer": "Integer",
|
29
|
+
"float": "Float",
|
30
|
+
"double": "Double",
|
31
|
+
"date": "Date",
|
32
|
+
"datetime": "DateTime",
|
33
|
+
"time": "Time",
|
34
|
+
}
|
35
|
+
column_type = column_type.lower()
|
36
|
+
return type_map.get(column_type.lower(), default_value)
|
37
|
+
|
38
|
+
|
39
|
+
def get_python_column_type(column_type: str) -> str:
|
40
|
+
default_value = "str"
|
41
|
+
type_map = {
|
42
|
+
"string": default_value,
|
43
|
+
"text": "str",
|
44
|
+
"boolean": "bool",
|
45
|
+
"integer": "int",
|
46
|
+
"float": "float",
|
47
|
+
"double": "double",
|
48
|
+
"date": "date",
|
49
|
+
"datetime": "datetime",
|
50
|
+
"time": "time",
|
51
|
+
}
|
52
|
+
return type_map.get(column_type.lower(), default_value)
|
53
|
+
|
54
|
+
|
55
|
+
def get_python_value_for_testing(column_type: str) -> str:
|
56
|
+
default_value = '"A string"'
|
57
|
+
type_map = {
|
58
|
+
"string": default_value,
|
59
|
+
"text": '"A text"',
|
60
|
+
"boolean": "True",
|
61
|
+
"integer": "42",
|
62
|
+
"float": "3.14",
|
63
|
+
"double": "3.14",
|
64
|
+
"date": "date(2024, 8, 10)",
|
65
|
+
"datetime": "datetime(2024, 8, 10, 14, 30)",
|
66
|
+
"time": "time(14, 30)",
|
67
|
+
}
|
68
|
+
return type_map.get(column_type.lower(), default_value)
|
69
|
+
|
70
|
+
|
71
|
+
def get_default_js_value(column_type: str) -> str:
|
72
|
+
default_value = '""'
|
73
|
+
type_map = {
|
74
|
+
"string": default_value,
|
75
|
+
"text": '""',
|
76
|
+
"boolean": "true",
|
77
|
+
"integer": "0",
|
78
|
+
"float": "0.0",
|
79
|
+
"double": "0.0",
|
80
|
+
"date": "new Date()",
|
81
|
+
"datetime": "new Date()",
|
82
|
+
"time": "new Date().toLocaleTimeString('en-US', { hour12: false })",
|
83
|
+
}
|
84
|
+
return type_map.get(column_type.lower(), default_value)
|
85
|
+
|
86
|
+
|
87
|
+
def get_html_input(column_type: str, column_name: str, column_caption: str) -> str:
|
88
|
+
snake_column_name = to_snake_case(column_name)
|
89
|
+
kebab_column_name = to_kebab_case(column_name)
|
90
|
+
default_value = f'<input type="text" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />' # noqa
|
91
|
+
type_map = {
|
92
|
+
"string": default_value,
|
93
|
+
"text": f'<textarea class="textarea w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}"></textarea>', # noqa
|
94
|
+
"boolean": f'<input type="checkbox" class="checkbox" id="{kebab_column_name}" bind:checked="{{row.{snake_column_name}}}" />', # noqa
|
95
|
+
"integer": f'<input type="number" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
96
|
+
"float": f'<input type="number" step="0.01" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
97
|
+
"double": f'<input type="number" step="0.01" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
98
|
+
"date": f'<input type="date" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
99
|
+
"datetime": f'<input type="datetime-local" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
100
|
+
"time": f'<input type="time" class="input w-full" id="{kebab_column_name}" placeholder="{column_caption}" bind:value="{{row.{snake_column_name}}}" />', # noqa
|
101
|
+
}
|
102
|
+
return type_map.get(column_type.lower(), default_value)
|
@@ -0,0 +1,49 @@
|
|
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, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
from ._common import get_app_frontend_routes_dir, replace_marker
|
9
|
+
|
10
|
+
|
11
|
+
@typechecked
|
12
|
+
async def inject_delete_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
|
+
):
|
20
|
+
kebab_module_name = to_kebab_case(module_name)
|
21
|
+
kebab_entity_name = to_kebab_case(entity_name)
|
22
|
+
snake_column_name = to_snake_case(column_name)
|
23
|
+
kebab_column_name = to_kebab_case(column_name)
|
24
|
+
column_caption = to_capitalized_human_readable(column_name)
|
25
|
+
file_path = os.path.join(
|
26
|
+
get_app_frontend_routes_dir(project_dir, app_name),
|
27
|
+
kebab_module_name,
|
28
|
+
kebab_entity_name,
|
29
|
+
"delete",
|
30
|
+
"[id]",
|
31
|
+
"+page.svelte",
|
32
|
+
)
|
33
|
+
task.print_out(f"Read HTML from: {file_path}")
|
34
|
+
html_content = await read_text_file_async(file_path)
|
35
|
+
task.print_out("Add field to delete page")
|
36
|
+
html_content = replace_marker(
|
37
|
+
html_content,
|
38
|
+
marker="<!-- DON'T DELETE: insert new field here-->",
|
39
|
+
code="\n".join(
|
40
|
+
[
|
41
|
+
'<div class="mb-4">',
|
42
|
+
f' <label class="block text-gray-700 font-bold mb-2" for="{kebab_column_name}">{column_caption}</label>', # noqa
|
43
|
+
f' <span id="{kebab_column_name}">{{row.{snake_column_name}}}</span>',
|
44
|
+
"</div>",
|
45
|
+
]
|
46
|
+
),
|
47
|
+
)
|
48
|
+
task.print_out(f"Write modified HTML to: {file_path}")
|
49
|
+
await write_text_file_async(file_path, html_content)
|
@@ -0,0 +1,49 @@
|
|
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, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
from ._common import get_app_frontend_routes_dir, replace_marker
|
9
|
+
|
10
|
+
|
11
|
+
@typechecked
|
12
|
+
async def inject_detail_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
|
+
):
|
20
|
+
kebab_module_name = to_kebab_case(module_name)
|
21
|
+
kebab_entity_name = to_kebab_case(entity_name)
|
22
|
+
snake_column_name = to_snake_case(column_name)
|
23
|
+
kebab_column_name = to_kebab_case(column_name)
|
24
|
+
column_caption = to_capitalized_human_readable(column_name)
|
25
|
+
file_path = os.path.join(
|
26
|
+
get_app_frontend_routes_dir(project_dir, app_name),
|
27
|
+
kebab_module_name,
|
28
|
+
kebab_entity_name,
|
29
|
+
"detail",
|
30
|
+
"[id]",
|
31
|
+
"+page.svelte",
|
32
|
+
)
|
33
|
+
task.print_out(f"Read HTML from: {file_path}")
|
34
|
+
html_content = await read_text_file_async(file_path)
|
35
|
+
task.print_out("Add field to detail page")
|
36
|
+
html_content = replace_marker(
|
37
|
+
html_content,
|
38
|
+
marker="<!-- DON'T DELETE: insert new field here-->",
|
39
|
+
code="\n".join(
|
40
|
+
[
|
41
|
+
'<div class="mb-4">',
|
42
|
+
f' <label class="block text-gray-700 font-bold mb-2" for="{kebab_column_name}">{column_caption}</label>', # noqa
|
43
|
+
f' <span id="{kebab_column_name}">{{row.{snake_column_name}}}</span>',
|
44
|
+
"</div>",
|
45
|
+
]
|
46
|
+
),
|
47
|
+
)
|
48
|
+
task.print_out(f"Write modified HTML to: {file_path}")
|
49
|
+
await write_text_file_async(file_path, html_content)
|
@@ -0,0 +1,62 @@
|
|
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, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
from ._common import (
|
9
|
+
get_app_frontend_routes_dir,
|
10
|
+
get_default_js_value,
|
11
|
+
get_html_input,
|
12
|
+
replace_marker,
|
13
|
+
)
|
14
|
+
|
15
|
+
|
16
|
+
@typechecked
|
17
|
+
async def inject_insert_page(
|
18
|
+
task: Task,
|
19
|
+
project_dir: str,
|
20
|
+
app_name: str,
|
21
|
+
module_name: str,
|
22
|
+
entity_name: str,
|
23
|
+
column_name: str,
|
24
|
+
column_type: str,
|
25
|
+
):
|
26
|
+
kebab_module_name = to_kebab_case(module_name)
|
27
|
+
kebab_entity_name = to_kebab_case(entity_name)
|
28
|
+
snake_column_name = to_snake_case(column_name)
|
29
|
+
kebab_column_name = to_kebab_case(column_name)
|
30
|
+
column_caption = to_capitalized_human_readable(column_name)
|
31
|
+
file_path = os.path.join(
|
32
|
+
get_app_frontend_routes_dir(project_dir, app_name),
|
33
|
+
kebab_module_name,
|
34
|
+
kebab_entity_name,
|
35
|
+
"new",
|
36
|
+
"+page.svelte",
|
37
|
+
)
|
38
|
+
task.print_out(f"Read HTML from: {file_path}")
|
39
|
+
html_content = await read_text_file_async(file_path)
|
40
|
+
task.print_out("Add default value to insert page")
|
41
|
+
default_value = get_default_js_value(column_type)
|
42
|
+
html_content = replace_marker(
|
43
|
+
html_content,
|
44
|
+
marker="// DON'T DELETE: set field default value here",
|
45
|
+
code=f"row.{snake_column_name} = {default_value}",
|
46
|
+
)
|
47
|
+
task.print_out("Add field to insert page")
|
48
|
+
html_input = get_html_input(column_type, column_name, column_caption)
|
49
|
+
html_content = replace_marker(
|
50
|
+
html_content,
|
51
|
+
marker="<!-- DON'T DELETE: insert new field here-->",
|
52
|
+
code="\n".join(
|
53
|
+
[
|
54
|
+
'<div class="mb-4">',
|
55
|
+
f' <label class="block text-gray-700 font-bold mb-2" for="{kebab_column_name}">{column_caption}</label>', # noqa
|
56
|
+
f" {html_input}",
|
57
|
+
"</div>",
|
58
|
+
]
|
59
|
+
),
|
60
|
+
)
|
61
|
+
task.print_out(f"Write modified HTML to: {file_path}")
|
62
|
+
await write_text_file_async(file_path, html_content)
|
@@ -0,0 +1,47 @@
|
|
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, to_snake_case
|
6
|
+
from zrb.task.task import Task
|
7
|
+
|
8
|
+
from ._common import get_app_frontend_routes_dir, replace_marker
|
9
|
+
|
10
|
+
|
11
|
+
@typechecked
|
12
|
+
async def inject_list_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
|
+
):
|
20
|
+
kebab_module_name = to_kebab_case(module_name)
|
21
|
+
kebab_entity_name = to_kebab_case(entity_name)
|
22
|
+
snake_column_name = to_snake_case(column_name)
|
23
|
+
column_caption = to_capitalized_human_readable(column_name)
|
24
|
+
file_path = os.path.join(
|
25
|
+
get_app_frontend_routes_dir(project_dir, app_name),
|
26
|
+
kebab_module_name,
|
27
|
+
kebab_entity_name,
|
28
|
+
"+page.svelte",
|
29
|
+
)
|
30
|
+
task.print_out(f"Read HTML from: {file_path}")
|
31
|
+
html_content = await read_text_file_async(file_path)
|
32
|
+
# process header
|
33
|
+
task.print_out("Add column header to table")
|
34
|
+
html_content = replace_marker(
|
35
|
+
html_content,
|
36
|
+
marker="<!-- DON'T DELETE: insert new column header here-->",
|
37
|
+
code=f"<th>{column_caption}</th>",
|
38
|
+
)
|
39
|
+
# process column
|
40
|
+
task.print_out("Add column to table")
|
41
|
+
html_content = replace_marker(
|
42
|
+
html_content,
|
43
|
+
marker="<!-- DON'T DELETE: insert new column here-->",
|
44
|
+
code=f"<td>{{row.{snake_column_name}}}</td>",
|
45
|
+
)
|
46
|
+
task.print_out(f"Write modified HTML to: {file_path}")
|
47
|
+
await write_text_file_async(file_path, html_content)
|
@@ -0,0 +1,47 @@
|
|
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_sqlalchemy_column_type
|
10
|
+
|
11
|
+
|
12
|
+
@typechecked
|
13
|
+
async def inject_repo(
|
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
|
+
repo_file_path = os.path.join(
|
27
|
+
get_app_dir(project_dir, app_name),
|
28
|
+
"src",
|
29
|
+
"module",
|
30
|
+
snake_module_name,
|
31
|
+
"entity",
|
32
|
+
snake_entity_name,
|
33
|
+
"repo.py",
|
34
|
+
)
|
35
|
+
task.print_out(f"Read code from: {repo_file_path}")
|
36
|
+
code = await read_text_file_async(repo_file_path)
|
37
|
+
task.print_out(f'Add column "{snake_column_name}" to the repo')
|
38
|
+
sqlalchemy_column_type = get_sqlalchemy_column_type(column_type)
|
39
|
+
code = add_property_to_class(
|
40
|
+
code=code,
|
41
|
+
class_name=f"DBEntity{pascal_entity_name}",
|
42
|
+
property_name=snake_column_name,
|
43
|
+
property_type="Column",
|
44
|
+
property_value=f"Column({sqlalchemy_column_type})",
|
45
|
+
)
|
46
|
+
task.print_out(f"Write modified code to: {repo_file_path}")
|
47
|
+
await write_text_file_async(repo_file_path, code)
|