zrb 0.0.85__py3-none-any.whl → 0.0.87__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 (178) hide show
  1. zrb/__init__.py +4 -2
  2. zrb/action/runner.py +7 -3
  3. zrb/builtin/__init__.py +8 -22
  4. zrb/builtin/base64.py +1 -1
  5. zrb/builtin/devtool/__init__.py +20 -0
  6. zrb/builtin/devtool/devtool_install.py +45 -2
  7. zrb/builtin/devtool/docker/install.sh +8 -0
  8. zrb/builtin/devtool/gcloud/install.sh +8 -0
  9. zrb/builtin/devtool/helix/install.sh +20 -0
  10. zrb/builtin/devtool/helix/resource/config.toml +10 -0
  11. zrb/builtin/devtool/helix/resource/themes/gruvbox_transparent.toml +2 -0
  12. zrb/builtin/devtool/tmux/install.sh +8 -0
  13. zrb/builtin/devtool/zsh/install.sh +9 -0
  14. zrb/builtin/devtool/zsh/resource/config.sh +2 -0
  15. zrb/builtin/env.py +6 -3
  16. zrb/builtin/explain.py +129 -0
  17. zrb/builtin/generator/__init__.py +27 -0
  18. zrb/builtin/generator/app_generator/add.py +81 -0
  19. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/add.py +182 -0
  20. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +38 -0
  21. zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/prepare-load-test.sh → app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/app-activate-venv.sh} +0 -6
  22. zrb/builtin/generator/{simple_python_app/template/_automate/snake_zrb_app_name/cmd/start.sh → app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/app-start.sh} +0 -9
  23. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +1 -0
  24. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  25. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +1 -0
  26. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +148 -0
  27. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +108 -0
  28. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +68 -0
  29. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +54 -0
  30. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/.gitignore +1 -0
  31. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/.gitignore +2 -0
  32. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/Pulumi.yaml +6 -0
  33. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +79 -0
  34. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/requirements.txt +3 -0
  35. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/state/.gitkeep +0 -0
  36. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/docker-compose.env +3 -0
  37. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/docker-compose.yml +20 -0
  38. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/.dockerignore +3 -0
  39. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/.gitignore +3 -0
  40. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/Dockerfile +7 -0
  41. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/main.py +20 -0
  42. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/requirements.txt +1 -0
  43. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/template.env +4 -0
  44. zrb/builtin/generator/cmd_task/add.py +14 -14
  45. zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +1 -1
  46. zrb/builtin/generator/common/__init__.py +0 -0
  47. zrb/builtin/generator/common/helper.py +57 -0
  48. zrb/builtin/generator/common/task_factory.py +82 -0
  49. zrb/builtin/generator/{_common/input.py → common/task_input.py} +46 -1
  50. zrb/builtin/generator/docker_compose_task/add.py +16 -15
  51. zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +1 -1
  52. zrb/builtin/generator/fastapp/add.py +105 -101
  53. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_common.py +2 -1
  54. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/activate-venv.sh +7 -0
  55. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{load-test.sh → app-load-test.sh} +0 -3
  56. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-prepare-backend.sh +2 -0
  57. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-prepare-load-test.sh +3 -0
  58. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-start.sh +3 -0
  59. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +0 -1
  60. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  61. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +0 -1
  62. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +1 -1
  63. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +9 -3
  64. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +3 -3
  65. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +1 -1
  66. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +11 -4
  67. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +13 -4
  68. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local_microservices.py +4 -1
  69. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +3 -5
  70. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/requirements.txt +2 -2
  71. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/loadtest/requirements.txt +1 -1
  72. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/requirements.txt +3 -3
  73. zrb/builtin/generator/fastapp_crud/add.py +13 -126
  74. zrb/builtin/generator/fastapp_crud/helper.py +115 -0
  75. zrb/builtin/generator/fastapp_crud/task_factory.py +34 -0
  76. zrb/builtin/generator/fastapp_field/add.py +10 -282
  77. zrb/builtin/generator/fastapp_field/helper.py +283 -0
  78. zrb/builtin/generator/fastapp_module/add.py +22 -331
  79. zrb/builtin/generator/fastapp_module/helper.py +326 -0
  80. zrb/builtin/generator/pip_package/__init__.py +0 -0
  81. zrb/builtin/generator/pip_package/add.py +84 -0
  82. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/cmd/build.sh +12 -0
  83. zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/start.sh → pip_package/template/_automate/snake_zrb_package_name/cmd/install-symlink.sh} +2 -2
  84. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/cmd/publish.sh +6 -0
  85. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +60 -0
  86. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/.gitignore +1 -0
  87. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/README.md +79 -0
  88. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/pyproject.toml +36 -0
  89. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/requirements.txt +4 -0
  90. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__init__.py +2 -0
  91. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__main__.py +2 -0
  92. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/util.py +2 -0
  93. zrb/builtin/generator/project/create.py +12 -8
  94. zrb/builtin/generator/project_task/task_factory.py +167 -83
  95. zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +1 -1
  96. zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +1 -1
  97. zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +1 -1
  98. zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +1 -1
  99. zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +1 -1
  100. zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +1 -1
  101. zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +1 -1
  102. zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +1 -1
  103. zrb/builtin/generator/python_task/add.py +14 -16
  104. zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +1 -1
  105. zrb/builtin/generator/simple_python_app/add.py +95 -99
  106. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/app-activate-venv.sh +7 -0
  107. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/app-start.sh +6 -0
  108. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +0 -1
  109. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  110. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +0 -1
  111. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +1 -1
  112. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +9 -3
  113. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +1 -1
  114. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +5 -2
  115. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/deployment/requirements.txt +2 -2
  116. zrb/builtin/git.py +1 -1
  117. zrb/builtin/{_group.py → group.py} +2 -5
  118. zrb/builtin/md5.py +1 -1
  119. zrb/builtin/project.py +1 -1
  120. zrb/builtin/ubuntu.py +1 -1
  121. zrb/config/config.py +8 -6
  122. zrb/helper/accessories/color.py +5 -1
  123. zrb/helper/accessories/icon.py +2 -0
  124. zrb/helper/accessories/name.py +2 -0
  125. zrb/helper/advertisement.py +1 -0
  126. zrb/helper/cli.py +5 -1
  127. zrb/helper/codemod/add_argument_to_function.py +3 -0
  128. zrb/helper/codemod/add_argument_to_function_call.py +3 -0
  129. zrb/helper/codemod/add_assert_resource.py +2 -0
  130. zrb/helper/codemod/add_function_call.py +2 -0
  131. zrb/helper/codemod/add_import_module.py +3 -0
  132. zrb/helper/codemod/add_key_value_to_dict.py +2 -0
  133. zrb/helper/codemod/add_property_to_class.py +3 -0
  134. zrb/helper/codemod/add_upstream_to_task.py +3 -0
  135. zrb/helper/codemod/append_code_to_function.py +3 -0
  136. zrb/helper/codemod/format_code.py +2 -0
  137. zrb/helper/default_env.py +2 -0
  138. zrb/helper/docker_compose/fetch_external_env.py +3 -0
  139. zrb/helper/docker_compose/file.py +4 -0
  140. zrb/helper/env_map/fetch.py +7 -0
  141. zrb/helper/file/text.py +6 -0
  142. zrb/helper/git/detect_changes.py +4 -0
  143. zrb/helper/loader/load_module.py +2 -0
  144. zrb/helper/map/conversion.py +2 -0
  145. zrb/helper/string/conversion.py +5 -0
  146. zrb/helper/string/double_quote.py +6 -2
  147. zrb/helper/string/jinja.py +2 -0
  148. zrb/helper/string/parse_replacement.py +2 -0
  149. zrb/helper/util.py +13 -0
  150. zrb/task/any_task.py +2 -2
  151. zrb/task/base_task.py +16 -16
  152. zrb/task/base_task_composite.py +12 -9
  153. zrb/task/cmd_task.py +23 -12
  154. zrb/task/decorator.py +2 -2
  155. zrb/task/docker_compose_task.py +5 -5
  156. zrb/task/flow_task.py +5 -5
  157. zrb/task/http_checker.py +2 -2
  158. zrb/task/path_checker.py +2 -2
  159. zrb/task/port_checker.py +2 -2
  160. zrb/task/resource_maker.py +3 -5
  161. zrb/task_input/any_input.py +23 -0
  162. zrb/task_input/base_input.py +46 -43
  163. zrb/task_input/float_input.py +0 -1
  164. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/METADATA +16 -17
  165. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/RECORD +175 -122
  166. zrb/builtin/generator/_common/helper.py +0 -79
  167. zrb/builtin/generator/fastapp_crud/add_navigation.py +0 -32
  168. zrb/builtin/principle.py +0 -66
  169. /zrb/builtin/generator/{_common → app_generator}/__init__.py +0 -0
  170. /zrb/{config.toml → builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/__init__.py} +0 -0
  171. /zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{build-frontend.sh → app-build-frontend.sh} +0 -0
  172. /zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{test.sh → app-test.sh} +0 -0
  173. /zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/prepare-backend.sh → pip_package/template/_automate/snake_zrb_package_name/cmd/prepare-venv.sh} +0 -0
  174. /zrb/task_input/{_constant.py → constant.py} +0 -0
  175. /zrb/task_input/{input.py → task_input.py} +0 -0
  176. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/LICENSE +0 -0
  177. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/WHEEL +0 -0
  178. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/entry_points.txt +0 -0
@@ -1,22 +1,24 @@
1
1
  from typing import Any, Mapping
2
- from ..._group import project_group
2
+ from typeguard import typechecked
3
+ from ..common.task_input import project_dir_input, project_name_input
4
+ from ..project_task.task_factory import create_ensure_project_tasks
5
+ from ...group import project_group
3
6
  from ....task.cmd_task import CmdTask
4
7
  from ....task.decorator import python_task
5
8
  from ....task.resource_maker import ResourceMaker
6
9
  from ....runner import runner
7
10
  from ....config.config import version
8
- from .._common.input import project_dir_input, project_name_input
9
- from ..project_task.task_factory import create_add_project_automation_task
10
11
 
11
12
  import os
12
13
 
13
- current_dir = os.path.dirname(__file__)
14
+ CURRENT_DIR = os.path.dirname(__file__)
14
15
 
15
16
  ###############################################################################
16
17
  # Replacement Mutator Definitions
17
18
  ###############################################################################
18
19
 
19
20
 
21
+ @typechecked
20
22
  def copy_resource_replacement_mutator(
21
23
  task: ResourceMaker, replacements: Mapping[str, str]
22
24
  ) -> Mapping[str, str]:
@@ -24,7 +26,9 @@ def copy_resource_replacement_mutator(
24
26
  replacements.get('zrbProjectDir', '')
25
27
  )
26
28
  if replacements.get('zrbProjectName', '') == '':
27
- replacements['zrbProjectName'] = replacements.get('zrbBaseProjectDir', '')
29
+ replacements['zrbProjectName'] = replacements.get(
30
+ 'zrbBaseProjectDir', ''
31
+ )
28
32
  return replacements
29
33
 
30
34
 
@@ -57,21 +61,21 @@ copy_resource = ResourceMaker(
57
61
  'zrbVersion': version,
58
62
  },
59
63
  replacement_mutator=copy_resource_replacement_mutator,
60
- template_path=os.path.join(current_dir, 'template'),
64
+ template_path=os.path.join(CURRENT_DIR, 'template'),
61
65
  destination_path='{{input.project_dir}}',
62
66
  excludes=[
63
67
  '*/__pycache__',
64
68
  ]
65
69
  )
66
70
 
67
- add_project_task = create_add_project_automation_task(
71
+ ensure_project_tasks = create_ensure_project_tasks(
68
72
  upstreams=[copy_resource]
69
73
  )
70
74
 
71
75
  create_project = CmdTask(
72
76
  name='create',
73
77
  group=project_group,
74
- upstreams=[add_project_task],
78
+ upstreams=[ensure_project_tasks],
75
79
  inputs=[project_dir_input],
76
80
  cmd=[
77
81
  'set -e',
@@ -1,108 +1,192 @@
1
1
  from typing import Any, List, Optional
2
- from .._common.input import project_dir_input, app_name_input
2
+ from typeguard import typechecked
3
+ from ..common.task_input import project_dir_input
4
+ from ..common.task_factory import create_add_upstream
3
5
  from ....task.decorator import python_task
6
+ from ....task.any_task import AnyTask
4
7
  from ....task.task import Task
5
- from ....helper import util
8
+ from ....task_input.any_input import AnyInput
6
9
  from ....helper.codemod.add_import_module import add_import_module
7
- from ....helper.codemod.add_upstream_to_task import add_upstream_to_task
8
10
  from ....helper.codemod.add_assert_resource import add_assert_resource
9
11
  from ....helper.file.copy_tree import copy_tree
10
12
  from ....helper.file.text import read_text_file_async, write_text_file_async
11
13
  import os
12
14
 
13
- current_dir = os.path.dirname(__file__)
15
+ CURRENT_DIR = os.path.dirname(__file__)
14
16
 
15
17
 
16
- def create_add_project_automation_task(
17
- upstreams: Optional[List[Task]] = None
18
+ @typechecked
19
+ def create_ensure_project_tasks(
20
+ upstreams: Optional[List[AnyTask]] = None
18
21
  ) -> Task:
22
+ '''
23
+ Create a task to ensure there are project tasks under `_automate/_project`
24
+ '''
19
25
  @python_task(
20
- name='add-project-automation',
26
+ name='ensure-project-tasks',
21
27
  inputs=[project_dir_input],
22
28
  upstreams=[] if upstreams is None else upstreams
23
29
  )
24
30
  async def _task(*args: Any, **kwargs: Any):
25
31
  task: Task = kwargs.get('_task')
26
32
  project_dir = kwargs.get('project_dir', '.')
27
- task.print_out('Create project automation modules if not exist')
28
- await _add_project_automation(project_dir)
33
+ task.print_out('Create project tasks if not exist')
34
+ if os.path.exists(os.path.join(project_dir, '_automate', '_project')):
35
+ return
36
+ await copy_tree(
37
+ src=os.path.join(CURRENT_DIR, 'template'),
38
+ dst=project_dir
39
+ )
40
+ project_task_module_path = '_automate._project'
41
+ zrb_init_path = os.path.join(project_dir, 'zrb_init.py')
42
+ code = await read_text_file_async(zrb_init_path)
43
+ import_alias = project_task_module_path.split('.')[-1]
44
+ code = add_import_module(
45
+ code=code,
46
+ module_path=project_task_module_path,
47
+ alias=import_alias
48
+ )
49
+ code = add_assert_resource(code, import_alias)
50
+ await write_text_file_async(zrb_init_path, code)
29
51
  return _task
30
52
 
31
53
 
32
- async def _add_project_automation(project_dir: str):
33
- if os.path.exists(os.path.join(project_dir, '_automate', '_project')):
34
- return
35
- await copy_tree(
36
- src=os.path.join(current_dir, 'template'),
37
- dst=project_dir
54
+ @typechecked
55
+ def create_add_build_images_upstream(
56
+ upstream_module: str,
57
+ upstream_task_var: str,
58
+ inputs: Optional[List[AnyInput]] = None,
59
+ upstreams: Optional[List[AnyTask]] = None
60
+ ) -> Task:
61
+ return create_add_upstream(
62
+ task_file_name=_get_project_task_file('build_project_images.py'),
63
+ task_name='build-images',
64
+ upstream_module=upstream_module,
65
+ upstream_task_var=upstream_task_var,
66
+ inputs=inputs,
67
+ upstreams=upstreams
38
68
  )
39
- project_task_module_path = '_automate._project'
40
- zrb_init_path = os.path.join(project_dir, 'zrb_init.py')
41
- code = await read_text_file_async(zrb_init_path)
42
- import_alias = project_task_module_path.split('.')[-1]
43
- code = add_import_module(
44
- code=code,
45
- module_path=project_task_module_path,
46
- alias=import_alias
69
+
70
+
71
+ @typechecked
72
+ def create_add_deploy_upstream(
73
+ upstream_module: str,
74
+ upstream_task_var: str,
75
+ inputs: Optional[List[AnyInput]] = None,
76
+ upstreams: Optional[List[AnyTask]] = None
77
+ ) -> Task:
78
+ return create_add_upstream(
79
+ task_file_name=_get_project_task_file('deploy_project.py'),
80
+ task_name='deploy',
81
+ upstream_module=upstream_module,
82
+ upstream_task_var=upstream_task_var,
83
+ inputs=inputs,
84
+ upstreams=upstreams
47
85
  )
48
- code = add_assert_resource(code, import_alias)
49
- await write_text_file_async(zrb_init_path, code)
50
-
51
-
52
- def create_register_app_task(
53
- task_name: str,
54
- project_automation_file_name: str,
55
- project_automation_task_name: str,
56
- app_automation_file_name: str,
57
- app_automation_task_var_name_tpl: str,
58
- upstreams: Optional[List[Task]] = None,
59
- ):
60
- @python_task(
61
- name=task_name,
62
- inputs=[project_dir_input, app_name_input],
63
- upstreams=[] if upstreams is None else upstreams
86
+
87
+
88
+ @typechecked
89
+ def create_add_destroy_upstream(
90
+ upstream_module: str,
91
+ upstream_task_var: str,
92
+ inputs: Optional[List[AnyInput]] = None,
93
+ upstreams: Optional[List[AnyTask]] = None
94
+ ) -> Task:
95
+ return create_add_upstream(
96
+ task_file_name=_get_project_task_file('destroy_project.py'),
97
+ task_name='destroy',
98
+ upstream_module=upstream_module,
99
+ upstream_task_var=upstream_task_var,
100
+ inputs=inputs,
101
+ upstreams=upstreams
64
102
  )
65
- async def _task(*args: Any, **kwargs: Any):
66
- task: Task = kwargs.get('_task')
67
- project_dir = kwargs.get('project_dir', '.')
68
- app_name = kwargs.get('app_name')
69
- snake_app_name = util.to_snake_case(app_name)
70
- abs_app_automation_file_name = os.path.join(
71
- project_dir, '_automate', snake_app_name, app_automation_file_name
72
- )
73
- app_automation_task_var_name = app_automation_task_var_name_tpl.format(
74
- snake_app_name=snake_app_name
75
- )
76
- project_automation_dir = os.path.join(
77
- project_dir, '_automate', '_project'
78
- )
79
- project_automation_path = os.path.join(
80
- project_automation_dir, f'{project_automation_file_name}'
81
- )
82
- upstream_task_rel_file_path = os.path.relpath(
83
- abs_app_automation_file_name, project_automation_path
84
- )
85
- # normalize `..` parts
86
- upstream_module_parts = [
87
- part if part != '..' else ''
88
- for part in upstream_task_rel_file_path.split(os.path.sep)
89
- ]
90
- # remove .py extenstion
91
- last_part = upstream_module_parts[-1]
92
- upstream_module_parts[-1] = os.path.splitext(last_part)[0]
93
- # turn into module path
94
- upstream_module_path = '.'.join(upstream_module_parts)
95
- task.print_out(
96
- f'Add {app_automation_task_var_name} to project automation'
97
- )
98
- code = await read_text_file_async(project_automation_path)
99
- code = add_import_module(
100
- code=code,
101
- module_path=upstream_module_path,
102
- resource=app_automation_task_var_name
103
- )
104
- code = add_upstream_to_task(
105
- code, project_automation_task_name, app_automation_task_var_name
106
- )
107
- await write_text_file_async(project_automation_path, code)
108
- return _task
103
+
104
+
105
+ @typechecked
106
+ def create_add_push_images_upstream(
107
+ upstream_module: str,
108
+ upstream_task_var: str,
109
+ inputs: Optional[List[AnyInput]] = None,
110
+ upstreams: Optional[List[AnyTask]] = None
111
+ ) -> Task:
112
+ return create_add_upstream(
113
+ task_file_name=_get_project_task_file('push_project_images.py'),
114
+ task_name='push-images',
115
+ upstream_module=upstream_module,
116
+ upstream_task_var=upstream_task_var,
117
+ inputs=inputs,
118
+ upstreams=upstreams
119
+ )
120
+
121
+
122
+ @typechecked
123
+ def create_add_remove_containers_upstream(
124
+ upstream_module: str,
125
+ upstream_task_var: str,
126
+ inputs: Optional[List[AnyInput]] = None,
127
+ upstreams: Optional[List[AnyTask]] = None
128
+ ) -> Task:
129
+ return create_add_upstream(
130
+ task_file_name=_get_project_task_file('remove_project_containers.py'),
131
+ task_name='remove-containers',
132
+ upstream_module=upstream_module,
133
+ upstream_task_var=upstream_task_var,
134
+ inputs=inputs,
135
+ upstreams=upstreams
136
+ )
137
+
138
+
139
+ @typechecked
140
+ def create_add_start_containers_upstream(
141
+ upstream_module: str,
142
+ upstream_task_var: str,
143
+ inputs: Optional[List[AnyInput]] = None,
144
+ upstreams: Optional[List[AnyTask]] = None
145
+ ) -> Task:
146
+ return create_add_upstream(
147
+ task_file_name=_get_project_task_file('start_project_containers.py'),
148
+ task_name='start-containers',
149
+ upstream_module=upstream_module,
150
+ upstream_task_var=upstream_task_var,
151
+ inputs=inputs,
152
+ upstreams=upstreams
153
+ )
154
+
155
+
156
+ @typechecked
157
+ def create_add_start_upstream(
158
+ upstream_module: str,
159
+ upstream_task_var: str,
160
+ inputs: Optional[List[AnyInput]] = None,
161
+ upstreams: Optional[List[AnyTask]] = None
162
+ ) -> Task:
163
+ return create_add_upstream(
164
+ task_file_name=_get_project_task_file('start_project.py'),
165
+ task_name='start',
166
+ upstream_module=upstream_module,
167
+ upstream_task_var=upstream_task_var,
168
+ inputs=inputs,
169
+ upstreams=upstreams
170
+ )
171
+
172
+
173
+ @typechecked
174
+ def create_add_stop_containers_upstream(
175
+ upstream_module: str,
176
+ upstream_task_var: str,
177
+ inputs: Optional[List[AnyInput]] = None,
178
+ upstreams: Optional[List[AnyTask]] = None
179
+ ) -> Task:
180
+ return create_add_upstream(
181
+ task_file_name=_get_project_task_file('stop_project_containers.py'),
182
+ task_name='stop-containers',
183
+ upstream_module=upstream_module,
184
+ upstream_task_var=upstream_task_var,
185
+ inputs=inputs,
186
+ upstreams=upstreams
187
+ )
188
+
189
+
190
+ @typechecked
191
+ def _get_project_task_file(task_file_name: str) -> str:
192
+ return os.path.join('_automate', '_project', task_file_name)
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  build_project_images = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  deploy_project = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  destroy_project = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  push_project_images = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  remove_project_containers = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  start_project = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  start_project_containers = Task(
@@ -1,4 +1,4 @@
1
- from zrb.builtin._group import project_group
1
+ from zrb.builtin.group import project_group
2
2
  from zrb import Task, runner
3
3
 
4
4
  stop_project_containers = Task(
@@ -1,18 +1,18 @@
1
1
  from typing import Any
2
- from ..._group import project_add_group
2
+ from ..common.task_input import project_dir_input, task_name_input
3
+ from ..common.helper import (
4
+ validate_existing_project_dir, validate_inexisting_automation
5
+ )
6
+ from ..common.task_factory import create_register_module
3
7
  from ....task.decorator import python_task
4
8
  from ....task.task import Task
5
9
  from ....task.resource_maker import ResourceMaker
6
10
  from ....runner import runner
7
- from .._common.input import (
8
- project_dir_input, task_name_input
9
- )
10
- from .._common.helper import validate_project_dir, create_register_task_module
11
- from ....helper import util
11
+ from ...group import project_add_group
12
12
 
13
13
  import os
14
14
 
15
- current_dir = os.path.dirname(__file__)
15
+ CURRENT_DIR = os.path.dirname(__file__)
16
16
 
17
17
  ###############################################################################
18
18
  # Task Definitions
@@ -28,13 +28,9 @@ current_dir = os.path.dirname(__file__)
28
28
  )
29
29
  async def validate(*args: Any, **kwargs: Any):
30
30
  project_dir = kwargs.get('project_dir')
31
- validate_project_dir(project_dir)
31
+ validate_existing_project_dir(project_dir)
32
32
  task_name = kwargs.get('task_name')
33
- automation_file = os.path.join(
34
- project_dir, '_automate', f'{util.to_snake_case(task_name)}.py'
35
- )
36
- if os.path.exists(automation_file):
37
- raise Exception(f'Automation file already exists: {automation_file}')
33
+ validate_inexisting_automation(project_dir, task_name)
38
34
 
39
35
 
40
36
  copy_resource = ResourceMaker(
@@ -47,14 +43,16 @@ copy_resource = ResourceMaker(
47
43
  replacements={
48
44
  'zrbTaskName': '{{input.task_name}}',
49
45
  },
50
- template_path=os.path.join(current_dir, 'template'),
46
+ template_path=os.path.join(CURRENT_DIR, 'template'),
51
47
  destination_path='{{ input.project_dir }}',
52
48
  excludes=[
53
49
  '*/__pycache__',
54
50
  ]
55
51
  )
56
52
 
57
- register_task_module = create_register_task_module(
53
+ register_module = create_register_module(
54
+ module_path='_automate.{{util.to_snake_case(input.task_name)}}',
55
+ inputs=[task_name_input],
58
56
  upstreams=[copy_resource]
59
57
  )
60
58
 
@@ -62,7 +60,7 @@ register_task_module = create_register_task_module(
62
60
  @python_task(
63
61
  name='python-task',
64
62
  group=project_add_group,
65
- upstreams=[register_task_module],
63
+ upstreams=[register_module],
66
64
  runner=runner
67
65
  )
68
66
  async def add_python_task(*args: Any, **kwargs: Any):
@@ -1,6 +1,6 @@
1
1
  from typing import Any, Mapping
2
2
  from zrb import Task, python_task, runner
3
- from zrb.builtin._group import project_group
3
+ from zrb.builtin.group import project_group
4
4
 
5
5
  ###############################################################################
6
6
  # Task Definitions