zrb 0.23.4__py3-none-any.whl → 0.24.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.
Files changed (98) hide show
  1. zrb/__init__.py +2 -0
  2. zrb/builtin/devtool/install/_input.py +2 -2
  3. 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 +5 -6
  4. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +5 -6
  5. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -52
  6. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/start.py +5 -6
  7. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/start.py +5 -6
  8. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/start.py +4 -6
  9. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/locustfile.py +1 -3
  10. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/template.env +1 -1
  11. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +59 -61
  12. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app.py +28 -28
  13. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_lifespan.py +15 -15
  14. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_state.py +2 -2
  15. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/db_connection.py +14 -2
  16. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/frontend_index.py +2 -2
  17. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/log.py +6 -6
  18. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/messagebus.py +33 -33
  19. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/rpc.py +9 -9
  20. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_scheme.py +2 -2
  21. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_util.py +7 -7
  22. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/model/user_model.py +6 -6
  23. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/refresh_token_util.py +7 -7
  24. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/user.py +18 -18
  25. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +2 -2
  26. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +8 -8
  27. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -2
  28. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py +8 -8
  29. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/template.env +5 -2
  30. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +7 -7
  31. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +7 -7
  32. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +7 -7
  33. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +14 -14
  34. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +3 -3
  35. zrb/builtin/project/add/fastapp/crud/_helper/__init__.py +7 -0
  36. zrb/builtin/project/add/fastapp/crud/_helper/_common.py +8 -0
  37. zrb/builtin/project/add/fastapp/crud/_helper/register_api.py +45 -0
  38. zrb/builtin/project/add/fastapp/crud/_helper/register_permission.py +40 -0
  39. zrb/builtin/project/add/fastapp/crud/_helper/register_rpc.py +45 -0
  40. zrb/builtin/project/add/fastapp/crud/crud.py +3 -24
  41. 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
  42. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +1 -0
  43. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +8 -7
  44. zrb/builtin/project/add/fastapp/field/_helper/__init__.py +17 -0
  45. zrb/builtin/project/add/fastapp/field/_helper/_common.py +102 -0
  46. zrb/builtin/project/add/fastapp/field/_helper/inject_delete_page.py +49 -0
  47. zrb/builtin/project/add/fastapp/field/_helper/inject_detail_page.py +49 -0
  48. zrb/builtin/project/add/fastapp/field/_helper/inject_insert_page.py +62 -0
  49. zrb/builtin/project/add/fastapp/field/_helper/inject_list_page.py +47 -0
  50. zrb/builtin/project/add/fastapp/field/_helper/inject_repo.py +47 -0
  51. zrb/builtin/project/add/fastapp/field/_helper/inject_schema.py +45 -0
  52. zrb/builtin/project/add/fastapp/field/_helper/inject_test.py +49 -0
  53. zrb/builtin/project/add/fastapp/field/_helper/inject_update_page.py +50 -0
  54. zrb/builtin/project/add/fastapp/field/_input.py +14 -2
  55. zrb/builtin/project/add/fastapp/field/field.py +51 -69
  56. zrb/builtin/project/add/fastapp/module/_helper/__init__.py +17 -0
  57. zrb/builtin/project/add/fastapp/module/_helper/append_all_disabled_env.py +22 -0
  58. zrb/builtin/project/add/fastapp/module/_helper/append_all_enabled_env.py +22 -0
  59. zrb/builtin/project/add/fastapp/module/_helper/append_deployment_template_env.py +25 -0
  60. zrb/builtin/project/add/fastapp/module/_helper/append_src_template_env.py +25 -0
  61. zrb/builtin/project/add/fastapp/module/_helper/create_app_config.py +29 -0
  62. zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +158 -0
  63. zrb/builtin/project/add/fastapp/module/_helper/register_migration.py +35 -0
  64. zrb/builtin/project/add/fastapp/module/_helper/register_module.py +33 -0
  65. zrb/builtin/project/add/fastapp/module/module.py +8 -37
  66. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -2
  67. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +8 -8
  68. zrb/builtin/project/add/plugin/plugin.py +2 -2
  69. zrb/builtin/project/create/create.py +2 -2
  70. zrb/builtin/version.py +3 -3
  71. zrb/config/config.py +14 -14
  72. zrb/helper/callable.py +3 -1
  73. zrb/helper/cli.py +4 -4
  74. zrb/helper/log.py +3 -3
  75. zrb/helper/typecheck.py +2 -2
  76. zrb/helper/typing.py +2 -2
  77. zrb/helper/util.py +12 -0
  78. zrb/runner.py +2 -2
  79. zrb/task/base_task/base_task.py +3 -3
  80. zrb/task/base_task/component/base_task_model.py +9 -9
  81. zrb/task/cmd_task.py +4 -4
  82. zrb/task/docker_compose_start_task.py +151 -0
  83. zrb/task/docker_compose_task.py +32 -15
  84. zrb/task_input/base_input.py +2 -2
  85. zrb/task_input/multiline_input.py +2 -2
  86. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/METADATA +2 -2
  87. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/RECORD +90 -73
  88. 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
  89. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/init.py +0 -34
  90. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/init.py +0 -36
  91. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/init.py +0 -36
  92. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/init.py +0 -26
  93. zrb/builtin/project/add/fastapp/crud/_helper.py +0 -118
  94. zrb/builtin/project/add/fastapp/field/_helper.py +0 -328
  95. zrb/builtin/project/add/fastapp/module/_helper.py +0 -313
  96. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/LICENSE +0 -0
  97. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/WHEEL +0 -0
  98. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/entry_points.txt +0 -0
@@ -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)
@@ -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 = StrInput(
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
- default="str",
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
  )
@@ -7,14 +7,14 @@ from zrb.builtin.project.add.fastapp._group import project_add_fastapp_group
7
7
  from zrb.builtin.project.add.fastapp.app._input import app_name_input
8
8
  from zrb.builtin.project.add.fastapp.crud._input import entity_name_input
9
9
  from zrb.builtin.project.add.fastapp.field._helper import (
10
- add_column_to_delete_page,
11
- add_column_to_detail_page,
12
- add_column_to_insert_page,
13
- add_column_to_list_page,
14
- add_column_to_repo,
15
- add_column_to_schema,
16
- add_column_to_test,
17
- add_column_to_update_page,
10
+ inject_delete_page,
11
+ inject_detail_page,
12
+ inject_insert_page,
13
+ inject_list_page,
14
+ inject_repo,
15
+ inject_schema,
16
+ inject_test,
17
+ inject_update_page,
18
18
  )
19
19
  from zrb.builtin.project.add.fastapp.field._input import (
20
20
  column_name_input,
@@ -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("column_name")
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
- add_column_to_test(
86
+ inject_test(
96
87
  task=task,
97
88
  project_dir=project_dir,
98
- kebab_app_name=kebab_app_name,
99
- snake_module_name=snake_module_name,
100
- snake_entity_name=snake_entity_name,
101
- snake_column_name=snake_column_name,
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
- add_column_to_schema(
97
+ inject_schema(
107
98
  task=task,
108
99
  project_dir=project_dir,
109
- kebab_app_name=kebab_app_name,
110
- snake_module_name=snake_module_name,
111
- snake_entity_name=snake_entity_name,
112
- pascal_entity_name=pascal_entity_name,
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
- add_column_to_repo(
108
+ inject_repo(
119
109
  task=task,
120
110
  project_dir=project_dir,
121
- kebab_app_name=kebab_app_name,
122
- snake_module_name=snake_module_name,
123
- snake_entity_name=snake_entity_name,
124
- pascal_entity_name=pascal_entity_name,
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
- add_column_to_list_page(
119
+ inject_list_page(
131
120
  task=task,
132
121
  project_dir=project_dir,
133
- kebab_app_name=kebab_app_name,
134
- kebab_module_name=kebab_module_name,
135
- kebab_entity_name=kebab_entity_name,
136
- snake_column_name=snake_column_name,
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
- add_column_to_detail_page(
129
+ inject_detail_page(
142
130
  task=task,
143
131
  project_dir=project_dir,
144
- kebab_app_name=kebab_app_name,
145
- kebab_module_name=kebab_module_name,
146
- kebab_entity_name=kebab_entity_name,
147
- kebab_column_name=kebab_column_name,
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
- add_column_to_delete_page(
139
+ inject_delete_page(
154
140
  task=task,
155
141
  project_dir=project_dir,
156
- kebab_app_name=kebab_app_name,
157
- kebab_module_name=kebab_module_name,
158
- kebab_entity_name=kebab_entity_name,
159
- kebab_column_name=kebab_column_name,
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
- add_column_to_update_page(
149
+ inject_update_page(
166
150
  task=task,
167
151
  project_dir=project_dir,
168
- kebab_app_name=kebab_app_name,
169
- kebab_module_name=kebab_module_name,
170
- kebab_entity_name=kebab_entity_name,
171
- kebab_column_name=kebab_column_name,
172
- snake_column_name=snake_column_name,
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
- add_column_to_insert_page(
160
+ inject_insert_page(
178
161
  task=task,
179
162
  project_dir=project_dir,
180
- kebab_app_name=kebab_app_name,
181
- kebab_module_name=kebab_module_name,
182
- kebab_entity_name=kebab_entity_name,
183
- kebab_column_name=kebab_column_name,
184
- snake_column_name=snake_column_name,
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)