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,30 @@
1
1
  from typing import Any
2
- from ..._group import project_add_group
3
- from ....task.task import Task
4
- from ....task.decorator import python_task
5
- from ....task.resource_maker import ResourceMaker
6
- from ....runner import runner
7
- from .._common.input import (
2
+ from ..common.helper import (
3
+ validate_existing_project_dir, validate_inexisting_automation
4
+ )
5
+ from ..common.task_input import (
8
6
  project_dir_input, app_name_input, app_image_name_input, http_port_input,
9
7
  env_prefix_input
10
8
  )
11
- from .._common.helper import validate_project_dir, create_register_app_module
9
+ from ..common.task_factory import create_register_module
12
10
  from ..project_task.task_factory import (
13
- create_add_project_automation_task, create_register_app_task
11
+ create_ensure_project_tasks, create_add_build_images_upstream,
12
+ create_add_deploy_upstream, create_add_destroy_upstream,
13
+ create_add_push_images_upstream, create_add_remove_containers_upstream,
14
+ create_add_start_containers_upstream, create_add_start_upstream,
15
+ create_add_stop_containers_upstream
14
16
  )
15
- from ....helper import util
17
+ from ...group import project_add_group
18
+ from ....task.task import Task
19
+ from ....task.decorator import python_task
20
+ from ....task.resource_maker import ResourceMaker
21
+ from ....runner import runner
22
+ from ....helper.util import to_kebab_case
16
23
 
17
24
  import os
18
25
 
19
- current_dir = os.path.dirname(__file__)
26
+ CURRENT_DIR = os.path.dirname(__file__)
27
+ SNAKE_APP_NAME_TPL = '{{util.to_snake_case(input.app_name)}}'
20
28
 
21
29
  ###############################################################################
22
30
  # Task Definitions
@@ -29,18 +37,10 @@ current_dir = os.path.dirname(__file__)
29
37
  )
30
38
  async def validate(*args: Any, **kwargs: Any):
31
39
  project_dir = kwargs.get('project_dir')
32
- validate_project_dir(project_dir)
40
+ validate_existing_project_dir(project_dir)
33
41
  app_name = kwargs.get('app_name')
34
- automation_dir = os.path.join(
35
- project_dir, '_automate', util.to_snake_case(app_name)
36
- )
37
- if os.path.exists(automation_dir):
38
- raise Exception(
39
- f'Automation directory already exists: {automation_dir}'
40
- )
41
- source_dir = os.path.join(
42
- project_dir, 'src', f'{util.to_kebab_case(app_name)}'
43
- )
42
+ validate_inexisting_automation(project_dir, app_name)
43
+ source_dir = os.path.join(project_dir, 'src', f'{to_kebab_case(app_name)}')
44
44
  if os.path.exists(source_dir):
45
45
  raise Exception(f'Source already exists: {source_dir}')
46
46
 
@@ -61,7 +61,7 @@ copy_resource = ResourceMaker(
61
61
  'ZRB_ENV_PREFIX': '{{util.coalesce(input.env_prefix, "MY").upper()}}',
62
62
  'zrb-app-image-name': '{{input.app_image_name}}'
63
63
  },
64
- template_path=os.path.join(current_dir, 'template'),
64
+ template_path=os.path.join(CURRENT_DIR, 'template'),
65
65
  destination_path='{{ input.project_dir }}',
66
66
  excludes=[
67
67
  '*/deployment/venv',
@@ -69,96 +69,92 @@ copy_resource = ResourceMaker(
69
69
  ]
70
70
  )
71
71
 
72
- register_local_app_module = create_register_app_module(
73
- module='local', upstreams=[copy_resource]
72
+ register_local_module = create_register_module(
73
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.local',
74
+ alias=f'{SNAKE_APP_NAME_TPL}_local',
75
+ inputs=[app_name_input],
76
+ upstreams=[copy_resource]
74
77
  )
75
78
 
76
- register_container_app_module = create_register_app_module(
77
- module='container', upstreams=[register_local_app_module]
79
+ register_container_module = create_register_module(
80
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.container',
81
+ alias=f'{SNAKE_APP_NAME_TPL}_container',
82
+ inputs=[app_name_input],
83
+ upstreams=[register_local_module]
78
84
  )
79
85
 
80
- register_image_app_module = create_register_app_module(
81
- module='image', upstreams=[register_container_app_module]
86
+ register_image_module = create_register_module(
87
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.image',
88
+ alias=f'{SNAKE_APP_NAME_TPL}_image',
89
+ inputs=[app_name_input],
90
+ upstreams=[register_container_module]
82
91
  )
83
92
 
84
- register_deployment_app_module = create_register_app_module(
85
- module='deployment', upstreams=[register_image_app_module]
93
+ register_deployment_module = create_register_module(
94
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
95
+ alias=f'{SNAKE_APP_NAME_TPL}_deployment',
96
+ inputs=[app_name_input],
97
+ upstreams=[register_image_module]
86
98
  )
87
99
 
88
- add_project_task = create_add_project_automation_task(
100
+ ensure_project_tasks = create_ensure_project_tasks(
89
101
  upstreams=[copy_resource]
90
102
  )
91
103
 
92
- register_start = create_register_app_task(
93
- task_name='register-start',
94
- project_automation_file_name='start_project.py',
95
- project_automation_task_name='start',
96
- app_automation_file_name='local.py',
97
- app_automation_task_var_name_tpl='start_{snake_app_name}',
98
- upstreams=[add_project_task]
104
+ add_start_upstream = create_add_start_upstream(
105
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.local',
106
+ upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}',
107
+ upstreams=[ensure_project_tasks],
108
+ inputs=[app_name_input]
99
109
  )
100
110
 
101
- register_start_container = create_register_app_task(
102
- task_name='register-start-container',
103
- project_automation_file_name='start_project_containers.py',
104
- project_automation_task_name='start-containers',
105
- app_automation_file_name='container.py',
106
- app_automation_task_var_name_tpl='start_{snake_app_name}_container',
107
- upstreams=[add_project_task]
111
+ add_start_container_upstream = create_add_start_containers_upstream(
112
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
113
+ upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}_container',
114
+ upstreams=[ensure_project_tasks],
115
+ inputs=[app_name_input]
108
116
  )
109
117
 
110
- register_stop_container = create_register_app_task(
111
- task_name='register-stop-container',
112
- project_automation_file_name='stop_project_containers.py',
113
- project_automation_task_name='stop-containers',
114
- app_automation_file_name='container.py',
115
- app_automation_task_var_name_tpl='stop_{snake_app_name}_container',
116
- upstreams=[add_project_task]
118
+ add_stop_container_upstream = create_add_stop_containers_upstream(
119
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
120
+ upstream_task_var=f'stop_{SNAKE_APP_NAME_TPL}_container',
121
+ upstreams=[ensure_project_tasks],
122
+ inputs=[app_name_input]
117
123
  )
118
124
 
119
- register_remove_container = create_register_app_task(
120
- task_name='register-remove-container',
121
- project_automation_file_name='remove_project_containers.py',
122
- project_automation_task_name='remove-containers',
123
- app_automation_file_name='container.py',
124
- app_automation_task_var_name_tpl='remove_{snake_app_name}_container',
125
- upstreams=[add_project_task]
125
+ add_remove_container_upstream = create_add_remove_containers_upstream(
126
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
127
+ upstream_task_var=f'remove_{SNAKE_APP_NAME_TPL}_container',
128
+ upstreams=[ensure_project_tasks],
129
+ inputs=[app_name_input]
126
130
  )
127
131
 
128
- register_push_image = create_register_app_task(
129
- task_name='register-push-image',
130
- project_automation_file_name='push_project_images.py',
131
- project_automation_task_name='push-images',
132
- app_automation_file_name='image.py',
133
- app_automation_task_var_name_tpl='push_{snake_app_name}_image',
134
- upstreams=[add_project_task]
132
+ add_build_image_upstream = create_add_build_images_upstream(
133
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
134
+ upstream_task_var=f'build_{SNAKE_APP_NAME_TPL}_image',
135
+ upstreams=[ensure_project_tasks],
136
+ inputs=[app_name_input]
135
137
  )
136
138
 
137
- register_build_image = create_register_app_task(
138
- task_name='register-build-image',
139
- project_automation_file_name='build_project_images.py',
140
- project_automation_task_name='build-images',
141
- app_automation_file_name='image.py',
142
- app_automation_task_var_name_tpl='build_{snake_app_name}_image',
143
- upstreams=[add_project_task]
139
+ add_push_image_upstream = create_add_push_images_upstream(
140
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
141
+ upstream_task_var=f'push_{SNAKE_APP_NAME_TPL}_image',
142
+ upstreams=[ensure_project_tasks],
143
+ inputs=[app_name_input]
144
144
  )
145
145
 
146
- register_deploy = create_register_app_task(
147
- task_name='register-deploy',
148
- project_automation_file_name='deploy_project.py',
149
- project_automation_task_name='deploy',
150
- app_automation_file_name='deployment.py',
151
- app_automation_task_var_name_tpl='deploy_{snake_app_name}',
152
- upstreams=[add_project_task]
146
+ add_deploy_upstream = create_add_deploy_upstream(
147
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
148
+ upstream_task_var=f'deploy_{SNAKE_APP_NAME_TPL}',
149
+ upstreams=[ensure_project_tasks],
150
+ inputs=[app_name_input]
153
151
  )
154
152
 
155
- register_destroy = create_register_app_task(
156
- task_name='register-destroy',
157
- project_automation_file_name='destroy_project.py',
158
- project_automation_task_name='destroy',
159
- app_automation_file_name='deployment.py',
160
- app_automation_task_var_name_tpl='destroy_{snake_app_name}',
161
- upstreams=[add_project_task]
153
+ add_destroy_upstream = create_add_destroy_upstream(
154
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
155
+ upstream_task_var=f'destroy_{SNAKE_APP_NAME_TPL}',
156
+ upstreams=[ensure_project_tasks],
157
+ inputs=[app_name_input]
162
158
  )
163
159
 
164
160
 
@@ -166,18 +162,18 @@ register_destroy = create_register_app_task(
166
162
  name='simple-python-app',
167
163
  group=project_add_group,
168
164
  upstreams=[
169
- register_local_app_module,
170
- register_container_app_module,
171
- register_image_app_module,
172
- register_deployment_app_module,
173
- register_start,
174
- register_start_container,
175
- register_stop_container,
176
- register_remove_container,
177
- register_build_image,
178
- register_push_image,
179
- register_deploy,
180
- register_destroy
165
+ register_local_module,
166
+ register_container_module,
167
+ register_image_module,
168
+ register_deployment_module,
169
+ add_start_upstream,
170
+ add_start_container_upstream,
171
+ add_stop_container_upstream,
172
+ add_remove_container_upstream,
173
+ add_build_image_upstream,
174
+ add_push_image_upstream,
175
+ add_deploy_upstream,
176
+ add_destroy_upstream
181
177
  ],
182
178
  runner=runner
183
179
  )
@@ -0,0 +1,7 @@
1
+ if [ ! -d .venv ]
2
+ then
3
+ echo "Init virtual environment"
4
+ python -m venv .venv
5
+ fi
6
+ echo "Activate virtual environment"
7
+ source .venv/bin/activate
@@ -0,0 +1,6 @@
1
+ PYTHONUNBUFFERED=1
2
+ echo "Install packages"
3
+ pip install -r requirements.txt
4
+
5
+ echo "Start app"
6
+ uvicorn main:app --host {{env.get("APP_HOST", "0.0.0.0")}} --port {{env.get("APP_PORT", "8080")}}
@@ -1,2 +1 @@
1
- (pulumi stack select {{input.snake_zrb_app_name_pulumi_stack}} || pulumi stack init {{input.snake_zrb_app_name_pulumi_stack}})
2
1
  pulumi destroy --skip-preview
@@ -0,0 +1 @@
1
+ (pulumi stack select {{input.snake_zrb_app_name_pulumi_stack}} || pulumi stack init {{input.snake_zrb_app_name_pulumi_stack}})
@@ -1,2 +1 @@
1
- (pulumi stack select {{input.snake_zrb_app_name_pulumi_stack}} || pulumi stack init {{input.snake_zrb_app_name_pulumi_stack}})
2
1
  pulumi up --skip-preview
@@ -1,7 +1,7 @@
1
1
  from zrb import (
2
2
  DockerComposeTask, Env, EnvFile, HTTPChecker, ServiceConfig, runner
3
3
  )
4
- from zrb.builtin._group import project_group
4
+ from zrb.builtin.group import project_group
5
5
  from ._common import (
6
6
  RESOURCE_DIR, APP_DIR, local_input, host_input, https_input
7
7
  )
@@ -1,5 +1,5 @@
1
1
  from zrb import CmdTask, Env, EnvFile, IntInput, StrInput, ChoiceInput, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
  from .image import push_snake_zrb_app_name_image, image_input, image_env
4
4
  from ._common import (
5
5
  CURRENT_DIR, DEPLOYMENT_DIR, TEMPLATE_ENV_FILE_NAME
@@ -77,7 +77,10 @@ deploy_snake_zrb_app_name = CmdTask(
77
77
  image_env,
78
78
  deployment_replica_env,
79
79
  ],
80
- cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'pulumi-up.sh'),
80
+ cmd_path=[
81
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-init-stack.sh'),
82
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-up.sh'),
83
+ ]
81
84
  )
82
85
  runner.register(deploy_snake_zrb_app_name)
83
86
 
@@ -97,6 +100,9 @@ destroy_snake_zrb_app_name = CmdTask(
97
100
  image_env,
98
101
  deployment_replica_env,
99
102
  ],
100
- cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'pulumi-destroy.sh'),
103
+ cmd_path=[
104
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-init-stack.sh'),
105
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-destroy.sh'),
106
+ ]
101
107
  )
102
108
  runner.register(destroy_snake_zrb_app_name)
@@ -1,5 +1,5 @@
1
1
  from zrb import DockerComposeTask, Env, StrInput, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
  from ._common import (
4
4
  RESOURCE_DIR, local_input
5
5
  )
@@ -1,5 +1,5 @@
1
1
  from zrb import CmdTask, Env, EnvFile, HTTPChecker, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
  from ._common import (
4
4
  CURRENT_DIR, APP_DIR, TEMPLATE_ENV_FILE_NAME,
5
5
  local_input, host_input, https_input
@@ -36,7 +36,10 @@ start_snake_zrb_app_name = CmdTask(
36
36
  default='zrbAppHttpPort'
37
37
  )
38
38
  ],
39
- cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'start.sh'),
39
+ cmd_path=[
40
+ os.path.join(CURRENT_DIR, 'cmd', 'app-activate-venv.sh'),
41
+ os.path.join(CURRENT_DIR, 'cmd', 'app-start.sh'),
42
+ ],
40
43
  checkers=[
41
44
  HTTPChecker(
42
45
  name='check-kebab-zrb-app-name',
@@ -1,3 +1,3 @@
1
1
  pulumi>=3.0.0,<4.0.0
2
- pulumi-kubernetes>=3.0.0,<4.0.0
3
- python-dotenv==0.21.1
2
+ pulumi-kubernetes>=3.0.0,<4.2.0
3
+ python-dotenv==1.0.0
zrb/builtin/git.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ._group import git_group
2
+ from .group import git_group
3
3
  from ..task.decorator import python_task
4
4
  from ..task.task import Task
5
5
  from ..task_input.str_input import StrInput
@@ -15,11 +15,8 @@ ubuntu_group = Group(
15
15
  ubuntu_install_group = Group(
16
16
  name='install', description='Install things on ubuntu', parent=ubuntu_group
17
17
  )
18
- principle_group = Group(
19
- name='principle', description='Principle related commands'
20
- )
21
- principle_show_group = Group(
22
- name='show', description='Showing principles', parent=principle_group
18
+ explain_group = Group(
19
+ name='explain', description='Explain things'
23
20
  )
24
21
  base64_group = Group(
25
22
  name='base64', description='Base64 operations'
zrb/builtin/md5.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ._group import md5_group
2
+ from .group import md5_group
3
3
  from ..task.decorator import python_task
4
4
  from ..task_input.str_input import StrInput
5
5
  from ..runner import runner
zrb/builtin/project.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from typing import Any, Mapping
2
- from ._group import project_group
2
+ from .group import project_group
3
3
  from ..task.decorator import python_task
4
4
  from ..task_input.bool_input import BoolInput
5
5
  from ..runner import runner
zrb/builtin/ubuntu.py CHANGED
@@ -1,4 +1,4 @@
1
- from ._group import ubuntu_group, ubuntu_install_group
1
+ from .group import ubuntu_group, ubuntu_install_group
2
2
  from ..task.cmd_task import CmdTask
3
3
  from ..runner import runner
4
4
 
zrb/config/config.py CHANGED
@@ -1,18 +1,20 @@
1
1
  from ..helper.string.conversion import to_boolean, to_logging_level
2
+ from typeguard import typechecked
2
3
  import os
3
- import pkg_resources
4
+ import importlib.metadata as metadata
4
5
 
5
6
 
6
- def get_version():
7
+ @typechecked
8
+ def get_version() -> str:
7
9
  try:
8
- dist = pkg_resources.get_distribution("zrb")
9
- return dist.version
10
- except pkg_resources.DistributionNotFound:
10
+ return metadata.version("zrb")
11
+ except metadata.PackageNotFoundError:
11
12
  import flit
12
13
  meta = flit.read_module_metadata("zrb")
13
- return meta["module"]["version"]
14
+ return str(meta["module"]["version"])
14
15
 
15
16
 
17
+ @typechecked
16
18
  def get_current_shell() -> str:
17
19
  current_shell = os.getenv('SHELL', '')
18
20
  if current_shell.endswith('zsh'):
@@ -1,9 +1,11 @@
1
1
  from typing import Iterable, Optional
2
+ from typeguard import typechecked
2
3
  from termcolor import colored as term_colored, COLORS
3
4
  import random
4
5
 
5
6
 
6
- def get_random_color():
7
+ @typechecked
8
+ def get_random_color() -> str:
7
9
  colors = [
8
10
  'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'light_green',
9
11
  'light_yellow', 'light_blue', 'light_magenta', 'light_cyan',
@@ -11,10 +13,12 @@ def get_random_color():
11
13
  return random.choice(colors)
12
14
 
13
15
 
16
+ @typechecked
14
17
  def is_valid_color(color: str) -> bool:
15
18
  return color in COLORS
16
19
 
17
20
 
21
+ @typechecked
18
22
  def colored(
19
23
  text: str,
20
24
  color: Optional[str] = None,
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import random
2
3
 
3
4
 
5
+ @typechecked
4
6
  def get_random_icon() -> str:
5
7
  icons = [
6
8
  '🐶', '🐱', '🐭', '🐹', '🦊', '🐻', '🐨', '🐯', '🦁', '🐮', '🐷', '🍎', '🍐',
@@ -1,7 +1,9 @@
1
+ from typeguard import typechecked
1
2
  import random
2
3
  import string
3
4
 
4
5
 
6
+ @typechecked
5
7
  def get_random_name(
6
8
  separator: str = '-',
7
9
  add_random_digit: bool = True,
@@ -18,6 +18,7 @@ class Advertisement():
18
18
  print(colored(self.content, attrs=['dark']), file=sys.stderr)
19
19
 
20
20
 
21
+ @typechecked
21
22
  def get_advertisement(
22
23
  advertisements: Iterable[Advertisement]
23
24
  ) -> Optional[Advertisement]:
zrb/helper/cli.py CHANGED
@@ -1,6 +1,7 @@
1
+ from typeguard import typechecked
1
2
  from ..runner import runner
2
- from .loader.load_module import load_module
3
3
  from ..config.config import init_scripts, should_load_builtin
4
+ from .loader.load_module import load_module
4
5
  from .log import logger
5
6
  from .accessories.color import colored
6
7
 
@@ -9,6 +10,7 @@ import os
9
10
  import sys
10
11
 
11
12
 
13
+ @typechecked
12
14
  def create_cli() -> click.Group:
13
15
  cli = click.Group(name='zrb', help='Super framework for your super app.')
14
16
  # load from ZRB_INIT_SCRIPTS environment
@@ -31,6 +33,7 @@ def create_cli() -> click.Group:
31
33
  return cli
32
34
 
33
35
 
36
+ @typechecked
34
37
  def _load_zrb_init(project_dir: str):
35
38
  project_script = os.path.join(project_dir, 'zrb_init.py')
36
39
  if not os.path.isfile(project_script):
@@ -43,6 +46,7 @@ def _load_zrb_init(project_dir: str):
43
46
  load_module(script_path=project_script)
44
47
 
45
48
 
49
+ @typechecked
46
50
  def _get_new_python_path(project_dir: str) -> str:
47
51
  current_python_path = os.getenv('PYTHONPATH')
48
52
  if current_python_path is None or current_python_path == '':
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  class AddArgumentTransformer(cst.CSTTransformer):
5
7
  def __init__(
6
8
  self, function_name: str, argument_name: str, argument_type: str
@@ -26,6 +28,7 @@ class AddArgumentTransformer(cst.CSTTransformer):
26
28
  return updated_node
27
29
 
28
30
 
31
+ @typechecked
29
32
  def add_argument_to_function(
30
33
  code: str, function_name: str, argument_name: str, argument_type: str
31
34
  ) -> str:
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  class AddArgumentTransformer(cst.CSTTransformer):
5
7
  def __init__(self, function_name: str, argument_name: str):
6
8
  self.function_name = function_name
@@ -21,6 +23,7 @@ class AddArgumentTransformer(cst.CSTTransformer):
21
23
  return updated_node
22
24
 
23
25
 
26
+ @typechecked
24
27
  def add_argument_to_function_call(
25
28
  code: str, function_name: str, argument_name: str
26
29
  ) -> str:
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  def add_assert_resource(code: str, resource: str) -> str:
5
7
  """
6
8
  Adds an assertion statement to the end of a module that checks whether
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  def add_function_call(code: str, function_name: str, parameters: list) -> str:
5
7
  """
6
8
  Adds a function call statement to the end of a module with the specified
@@ -1,7 +1,9 @@
1
+ from typeguard import typechecked
1
2
  from typing import Optional, Union, Tuple
2
3
  import libcst as cst
3
4
 
4
5
 
6
+ @typechecked
5
7
  def add_import_module(
6
8
  code: str,
7
9
  module_path: str,
@@ -87,6 +89,7 @@ def _get_new_import(
87
89
  )
88
90
 
89
91
 
92
+ @typechecked
90
93
  def _split_module_path(module_path) -> Tuple[str, str]:
91
94
  prefix = ''
92
95
  suffix = ''
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  class AddKeyValuePairTransformer(cst.CSTTransformer):
5
7
  def __init__(
6
8
  self, dict_name: str,
@@ -1,7 +1,9 @@
1
+ from typeguard import typechecked
1
2
  from typing import Optional
2
3
  import libcst as cst
3
4
 
4
5
 
6
+ @typechecked
5
7
  class AddPropertyTransformer(cst.CSTTransformer):
6
8
  def __init__(
7
9
  self,
@@ -51,6 +53,7 @@ class AddPropertyTransformer(cst.CSTTransformer):
51
53
  return updated_node.with_changes(body=new_body)
52
54
 
53
55
 
56
+ @typechecked
54
57
  def add_property_to_class(
55
58
  code: str,
56
59
  class_name: str,
@@ -1,6 +1,8 @@
1
+ from typeguard import typechecked
1
2
  import libcst as cst
2
3
 
3
4
 
5
+ @typechecked
4
6
  class TaskTransformer(cst.CSTTransformer):
5
7
  def __init__(self, task_name: str, upstream_task_name: str):
6
8
  super().__init__()
@@ -74,6 +76,7 @@ class TaskTransformer(cst.CSTTransformer):
74
76
  )
75
77
 
76
78
 
79
+ @typechecked
77
80
  def add_upstream_to_task(
78
81
  code: str, task_name: str, upstream_task_name: str
79
82
  ) -> str: