zrb 0.24.0__py3-none-any.whl → 0.26.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. zrb/action/runner.py +8 -5
  2. zrb/advertisement.py +1 -2
  3. zrb/builtin/__init__.py +4 -0
  4. zrb/builtin/base64/decode.py +1 -1
  5. zrb/builtin/base64/encode.py +1 -1
  6. zrb/builtin/devtool/install/_helper.py +2 -1
  7. zrb/builtin/docker/prune.py +11 -3
  8. zrb/builtin/env/get.py +3 -2
  9. zrb/builtin/eval.py +2 -1
  10. zrb/builtin/git/get_file_changes.py +2 -1
  11. zrb/builtin/md5/hash.py +1 -1
  12. zrb/builtin/md5/sum.py +1 -1
  13. zrb/builtin/monorepo/__init__.py +7 -0
  14. zrb/builtin/monorepo/_config.py +11 -0
  15. zrb/builtin/monorepo/_group.py +3 -0
  16. zrb/builtin/monorepo/_task.py +99 -0
  17. zrb/builtin/monorepo/add.py +40 -0
  18. zrb/builtin/monorepo/pull.py +23 -0
  19. zrb/builtin/monorepo/push.py +35 -0
  20. zrb/builtin/project/_helper.py +3 -3
  21. zrb/builtin/project/_input.py +2 -2
  22. zrb/builtin/project/add/app/generator/generator.py +1 -1
  23. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/snake_zrb_generator_name.py +1 -1
  24. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
  25. 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 +1 -1
  26. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
  27. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
  28. zrb/builtin/project/add/app/python/python.py +1 -1
  29. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
  30. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +1 -1
  31. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
  32. zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
  33. zrb/builtin/project/add/fastapp/app/app.py +3 -1
  34. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -1
  35. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
  36. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
  37. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
  38. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/stop.py +2 -0
  39. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
  40. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
  41. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
  42. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
  43. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
  44. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
  45. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
  46. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
  47. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
  48. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
  49. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
  50. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
  51. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
  52. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
  53. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
  54. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
  55. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
  56. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
  57. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
  58. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
  59. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
  60. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
  61. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
  62. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
  63. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
  64. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +3 -4
  65. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +4443 -0
  66. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
  67. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
  68. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
  69. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
  70. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
  71. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
  72. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
  73. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
  74. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
  75. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
  76. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
  77. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
  78. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
  79. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
  80. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
  81. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
  82. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
  83. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
  84. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +1 -1
  85. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +1 -1
  86. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +1 -1
  87. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +1 -1
  88. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +1 -1
  89. zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
  90. zrb/builtin/project/add/fastapp/crud/crud.py +1 -1
  91. zrb/builtin/project/add/fastapp/crud/nodejs/codemod/package-lock.json +3 -3
  92. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +2 -1
  93. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +2 -2
  94. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +1 -1
  95. zrb/builtin/project/add/fastapp/field/field.py +1 -1
  96. zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +7 -8
  97. zrb/builtin/project/add/fastapp/module/module.py +1 -1
  98. zrb/builtin/project/add/plugin/plugin.py +1 -1
  99. zrb/builtin/project/add/project_task/add.py +1 -1
  100. zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
  101. zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
  102. zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
  103. zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
  104. zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
  105. zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
  106. zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
  107. zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
  108. zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
  109. zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
  110. zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
  111. zrb/builtin/project/add/task/cmd/add.py +1 -1
  112. zrb/builtin/project/add/task/docker_compose/add.py +1 -1
  113. zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
  114. zrb/builtin/project/add/task/python/add.py +1 -1
  115. zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
  116. zrb/builtin/project/create/_helper.py +1 -1
  117. zrb/builtin/project/create/create.py +1 -1
  118. zrb/builtin/say.py +3 -3
  119. zrb/builtin/version.py +2 -1
  120. zrb/config/config.py +12 -2
  121. zrb/helper/accessories/color.py +2 -1
  122. zrb/helper/advertisement.py +2 -1
  123. zrb/helper/asyncio_task.py +23 -0
  124. zrb/helper/callable.py +2 -1
  125. zrb/helper/cli.py +17 -3
  126. zrb/helper/codemod/add_import_module.py +3 -2
  127. zrb/helper/codemod/add_property_to_class.py +2 -1
  128. zrb/helper/default_env.py +2 -1
  129. zrb/helper/docker_compose/fetch_external_env.py +4 -2
  130. zrb/helper/docker_compose/file.py +3 -1
  131. zrb/helper/env_map/fetch.py +3 -2
  132. zrb/helper/file/copy_tree.py +2 -1
  133. zrb/helper/file/match.py +2 -2
  134. zrb/helper/git/detect_changes.py +1 -1
  135. zrb/helper/loader/load_module.py +7 -46
  136. zrb/helper/loader/load_script.py +57 -0
  137. zrb/helper/map/conversion.py +3 -1
  138. zrb/helper/string/jinja.py +2 -1
  139. zrb/helper/string/parse_replacement.py +1 -1
  140. zrb/helper/typing.py +5 -27
  141. zrb/helper/util.py +1 -1
  142. zrb/task/any_task.py +9 -17
  143. zrb/task/any_task_event_handler.py +3 -1
  144. zrb/task/base_remote_cmd_task.py +3 -10
  145. zrb/task/base_task/base_task.py +12 -8
  146. zrb/task/base_task/component/base_task_model.py +6 -13
  147. zrb/task/base_task/component/common_task_model.py +15 -22
  148. zrb/task/base_task/component/renderer.py +3 -1
  149. zrb/task/base_task/component/trackers.py +1 -1
  150. zrb/task/checker.py +2 -1
  151. zrb/task/cmd_task.py +6 -18
  152. zrb/task/decorator.py +3 -1
  153. zrb/task/docker_compose_start_task.py +27 -32
  154. zrb/task/docker_compose_task.py +27 -35
  155. zrb/task/flow_task.py +19 -17
  156. zrb/task/http_checker.py +3 -9
  157. zrb/task/looper.py +4 -2
  158. zrb/task/notifier.py +3 -1
  159. zrb/task/parallel.py +4 -4
  160. zrb/task/path_checker.py +6 -12
  161. zrb/task/path_watcher.py +5 -13
  162. zrb/task/port_checker.py +3 -9
  163. zrb/task/recurring_task.py +5 -4
  164. zrb/task/remote_cmd_task.py +2 -1
  165. zrb/task/resource_maker.py +6 -13
  166. zrb/task/rsync_task.py +3 -1
  167. zrb/task/server.py +13 -12
  168. zrb/task/time_watcher.py +3 -10
  169. zrb/task/watcher.py +2 -1
  170. zrb/task/wiki_task.py +4 -3
  171. zrb/task_env/env.py +2 -1
  172. zrb/task_env/env_file.py +7 -6
  173. zrb/task_group/group.py +8 -7
  174. zrb/task_input/any_input.py +4 -3
  175. zrb/task_input/base_input.py +5 -3
  176. zrb/task_input/bool_input.py +2 -1
  177. zrb/task_input/choice_input.py +3 -1
  178. zrb/task_input/float_input.py +2 -1
  179. zrb/task_input/int_input.py +2 -1
  180. zrb/task_input/multiline_input.py +3 -1
  181. zrb/task_input/password_input.py +2 -1
  182. zrb/task_input/str_input.py +2 -1
  183. {zrb-0.24.0.dist-info → zrb-0.26.0.dist-info}/METADATA +1 -1
  184. {zrb-0.24.0.dist-info → zrb-0.26.0.dist-info}/RECORD +187 -176
  185. {zrb-0.24.0.dist-info → zrb-0.26.0.dist-info}/LICENSE +0 -0
  186. {zrb-0.24.0.dist-info → zrb-0.26.0.dist-info}/WHEEL +0 -0
  187. {zrb-0.24.0.dist-info → zrb-0.26.0.dist-info}/entry_points.txt +0 -0
zrb/action/runner.py CHANGED
@@ -1,11 +1,13 @@
1
1
  import sys
2
+ from collections.abc import Callable, Mapping
3
+ from typing import Any, Union
2
4
 
3
5
  import click
4
6
 
5
7
  from zrb.helper.accessories.color import colored
8
+ from zrb.helper.asyncio_task import stop_asyncio_sync
6
9
  from zrb.helper.log import logger
7
10
  from zrb.helper.typecheck import typechecked
8
- from zrb.helper.typing import Any, Callable, List, Mapping, Union
9
11
  from zrb.task.any_task import AnyTask
10
12
  from zrb.task_group.group import Group as TaskGroup
11
13
 
@@ -24,11 +26,11 @@ class Runner:
24
26
  def __init__(self, env_prefix: str = ""):
25
27
  logger.info(colored("Create runner", attrs=["dark"]))
26
28
  self.__env_prefix = env_prefix
27
- self.__tasks: List[AnyTask] = []
29
+ self.__tasks: list[AnyTask] = []
28
30
  self.__registered_groups: Mapping[str, click.Group] = {}
29
- self.__top_levels: List[CliSubcommand] = []
30
- self.__subcommands: Mapping[str, List[click.Group]] = {}
31
- self.__registered_task_cli_name: List[str] = []
31
+ self.__top_levels: list[CliSubcommand] = []
32
+ self.__subcommands: Mapping[str, list[click.Group]] = {}
33
+ self.__registered_task_cli_name: list[str] = []
32
34
  logger.info(colored("Runner created", attrs=["dark"]))
33
35
 
34
36
  def register(self, *tasks: AnyTask):
@@ -119,6 +121,7 @@ class Runner:
119
121
  try:
120
122
  function(*args, **kwargs)
121
123
  except Exception:
124
+ stop_asyncio_sync()
122
125
  sys.exit(1)
123
126
  finally:
124
127
  task.clear_xcom()
zrb/advertisement.py CHANGED
@@ -1,13 +1,12 @@
1
1
  from zrb.helper.accessories.color import colored
2
2
  from zrb.helper.advertisement import Advertisement
3
3
  from zrb.helper.log import logger
4
- from zrb.helper.typing import List
5
4
 
6
5
  logger.debug(colored("Loading zrb.advertisement", attrs=["dark"]))
7
6
 
8
7
  # flake8: noqa E501
9
8
 
10
- advertisements: List[Advertisement] = [
9
+ advertisements: list[Advertisement] = [
11
10
  Advertisement(
12
11
  content="\n".join(
13
12
  [
zrb/builtin/__init__.py CHANGED
@@ -24,6 +24,7 @@ from zrb.builtin.eval import evaluate
24
24
  from zrb.builtin.explain import explain_group, explain_tasks
25
25
  from zrb.builtin.git import clear_git_branch, get_git_file_changes, git_group
26
26
  from zrb.builtin.md5 import hash_text_md5, md5_group, sum_file_md5
27
+ from zrb.builtin.monorepo import add_to_monorepo, pull_from_monorepo, push_to_monorepo
27
28
  from zrb.builtin.process import (
28
29
  get_process_pid_by_name,
29
30
  get_process_pid_by_port,
@@ -113,6 +114,9 @@ assert add_project_tasks
113
114
  assert add_cmd_task
114
115
  assert add_docker_compose_task
115
116
  assert add_python_task
117
+ assert add_to_monorepo
118
+ assert pull_from_monorepo
119
+ assert push_to_monorepo
116
120
  assert ubuntu_group
117
121
  assert ubuntu_install_group
118
122
  assert update_ubuntu
@@ -1,8 +1,8 @@
1
1
  import base64
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.base64._group import base64_group
4
5
  from zrb.builtin.base64._input import text_input
5
- from zrb.helper.typing import Any
6
6
  from zrb.runner import runner
7
7
  from zrb.task.decorator import python_task
8
8
 
@@ -1,8 +1,8 @@
1
1
  import base64
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.base64._group import base64_group
4
5
  from zrb.builtin.base64._input import text_input
5
- from zrb.helper.typing import Any
6
6
  from zrb.runner import runner
7
7
  from zrb.task.decorator import python_task
8
8
 
@@ -1,8 +1,9 @@
1
1
  import os
2
+ from collections.abc import Callable
3
+ from typing import Any
2
4
 
3
5
  from zrb.helper.file.text import read_text_file_async, write_text_file_async
4
6
  from zrb.helper.typecheck import typechecked
5
- from zrb.helper.typing import Any, Callable
6
7
  from zrb.task.task import Task
7
8
 
8
9
 
@@ -1,15 +1,23 @@
1
1
  from zrb.builtin.docker._group import docker_group
2
2
  from zrb.runner import runner
3
3
  from zrb.task.cmd_task import CmdTask
4
+ from zrb.task_input.bool_input import BoolInput
4
5
 
5
6
  prune_docker = CmdTask(
6
7
  name="prune",
7
8
  group=docker_group,
8
9
  description="Prune unused images and volumes",
10
+ inputs=[
11
+ BoolInput(
12
+ name="all", shortcut="a", prompt="Remove all unused images", default=False
13
+ ),
14
+ BoolInput(
15
+ name="volume", shortcut="v", prompt="Prune anonymous volume", default=False
16
+ ),
17
+ ],
9
18
  cmd=[
10
- "docker system prune -af",
11
- "docker image prune -af",
12
- "docker system prune -af --volumes",
19
+ "docker system prune -f {% if input.all %}-a{% endif %} {% if input.volume %}--volumes{% endif %}", # noqa
20
+ "docker image prune -f {% if input.all %}-a{% endif %}",
13
21
  "docker system df",
14
22
  ],
15
23
  )
zrb/builtin/env/get.py CHANGED
@@ -1,6 +1,7 @@
1
+ from typing import Any
2
+
1
3
  from zrb.builtin.env._group import env_group
2
4
  from zrb.helper.accessories.color import colored
3
- from zrb.helper.typing import Any, List
4
5
  from zrb.runner import runner
5
6
  from zrb.task.decorator import python_task
6
7
  from zrb.task.task import Task
@@ -15,7 +16,7 @@ async def get_env(*args: Any, **kwargs: Any):
15
16
  names = list(env_map.keys())
16
17
  names.sort()
17
18
  colored_equal = colored("=", color="grey", attrs=["dark"])
18
- env_lines: List[str] = []
19
+ env_lines: list[str] = []
19
20
  for name in names:
20
21
  value = env_map[name]
21
22
  colored_name = colored(name, color="green", attrs=["bold"])
zrb/builtin/eval.py CHANGED
@@ -1,4 +1,5 @@
1
- from zrb.helper.typing import Any
1
+ from typing import Any
2
+
2
3
  from zrb.runner import runner
3
4
  from zrb.task.decorator import python_task
4
5
  from zrb.task_input.str_input import StrInput
@@ -1,8 +1,9 @@
1
+ from typing import Any
2
+
1
3
  from zrb.builtin.git._group import git_group
2
4
  from zrb.helper.accessories.color import colored
3
5
  from zrb.helper.git.detect_changes import get_modified_file_states
4
6
  from zrb.helper.task import show_lines
5
- from zrb.helper.typing import Any
6
7
  from zrb.runner import runner
7
8
  from zrb.task.decorator import python_task
8
9
  from zrb.task_input.bool_input import BoolInput
zrb/builtin/md5/hash.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import hashlib
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.md5._group import md5_group
4
- from zrb.helper.typing import Any
5
5
  from zrb.runner import runner
6
6
  from zrb.task.decorator import python_task
7
7
  from zrb.task_input.str_input import StrInput
zrb/builtin/md5/sum.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import hashlib
2
+ from typing import Any
2
3
 
3
4
  import aiofiles
4
5
 
5
6
  from zrb.builtin.md5._group import md5_group
6
- from zrb.helper.typing import Any
7
7
  from zrb.runner import runner
8
8
  from zrb.task.decorator import python_task
9
9
  from zrb.task_input.str_input import StrInput
@@ -0,0 +1,7 @@
1
+ from zrb.builtin.monorepo.add import add_to_monorepo
2
+ from zrb.builtin.monorepo.pull import pull_from_monorepo
3
+ from zrb.builtin.monorepo.push import push_to_monorepo
4
+
5
+ assert add_to_monorepo
6
+ assert pull_from_monorepo
7
+ assert push_to_monorepo
@@ -0,0 +1,11 @@
1
+ import json
2
+ import os
3
+ from collections.abc import Mapping
4
+
5
+ _PROJECT_DIR = os.getenv("ZRB_PROJECT_DIR", ".")
6
+ MONOREPO_CONFIG_FILE = os.path.join(_PROJECT_DIR, "monorepo.zrb.json")
7
+ MONOREPO_CONFIG: Mapping[str, Mapping[str, str]] = {}
8
+
9
+ if os.path.isfile(MONOREPO_CONFIG_FILE):
10
+ with open(MONOREPO_CONFIG_FILE, "r") as file:
11
+ MONOREPO_CONFIG = json.load(file)
@@ -0,0 +1,3 @@
1
+ from zrb.task_group.group import Group
2
+
3
+ monorepo_group = Group(name="monorepo", description="Monorepo management")
@@ -0,0 +1,99 @@
1
+ import os
2
+ from datetime import datetime
3
+
4
+ from zrb.builtin.monorepo._config import MONOREPO_CONFIG
5
+ from zrb.builtin.monorepo._group import monorepo_group
6
+ from zrb.helper.util import to_kebab_case
7
+ from zrb.runner import runner
8
+ from zrb.task.cmd_task import CmdTask
9
+ from zrb.task_group.group import Group
10
+ from zrb.task_input.str_input import StrInput
11
+
12
+ _PROJECT_DIR = os.getenv("ZRB_PROJECT_DIR", ".")
13
+
14
+ _pull_monorepo = CmdTask(
15
+ name="pull-monorepo",
16
+ inputs=[StrInput(name="message")],
17
+ cwd=_PROJECT_DIR,
18
+ cmd=[
19
+ "git add . -A",
20
+ 'git commit -m "{{input.message}}"',
21
+ 'git pull origin "$(git branch --show-current)"',
22
+ ],
23
+ retry=0,
24
+ )
25
+
26
+ PULL_SUBREPO_UPSTREAM = _pull_monorepo
27
+ PUSH_SUBREPO_UPSTREAM = _pull_monorepo
28
+ for name, config in MONOREPO_CONFIG.items():
29
+ kebab_name = to_kebab_case(name)
30
+ group = Group(
31
+ name=kebab_name, parent=monorepo_group, description=f"Subrepo {name} management"
32
+ )
33
+ subrepo_origin = config.get("origin", "")
34
+ subrepo_folder = config.get("folder", "")
35
+ subrepo_branch = config.get("branch", "main")
36
+
37
+ # define pull subrepo
38
+ pull_subrepo = CmdTask(
39
+ name="pull",
40
+ group=group,
41
+ inputs=[
42
+ StrInput(
43
+ name="message",
44
+ shortcut="m",
45
+ prompt="Commit Messsage",
46
+ default=lambda m: f"Pulling from subrepo at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
47
+ )
48
+ ],
49
+ cmd=[
50
+ f'if [ ! -d "{subrepo_folder}" ]',
51
+ "then",
52
+ " echo Run subtree add",
53
+ f' git subtree add --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
54
+ "fi",
55
+ "echo Run subtree pull",
56
+ "set -e",
57
+ f'git subtree pull --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
58
+ ],
59
+ retry=0,
60
+ )
61
+ _pull_monorepo >> pull_subrepo
62
+ linked_pull_subrepo = pull_subrepo.copy()
63
+ PULL_SUBREPO_UPSTREAM >> linked_pull_subrepo
64
+ PULL_SUBREPO_UPSTREAM = linked_pull_subrepo
65
+ runner.register(pull_subrepo)
66
+
67
+ # define push subrepo
68
+ push_subrepo = CmdTask(
69
+ name="push",
70
+ group=group,
71
+ inputs=[
72
+ StrInput(
73
+ name="message",
74
+ shortcut="m",
75
+ prompt="Commit Messsage",
76
+ default=lambda m: f"Pushing to subrepo at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
77
+ )
78
+ ],
79
+ cmd=[
80
+ f'if [ ! -d "{subrepo_folder}" ]',
81
+ "then",
82
+ " echo Run subtree add",
83
+ f' git subtree add --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
84
+ "fi",
85
+ "echo Run subtree pull",
86
+ "set -e",
87
+ f'git subtree pull --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
88
+ "set +e",
89
+ "git add . -A",
90
+ 'git commit -m "{{input.message}}"',
91
+ f'git subtree push --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
92
+ ],
93
+ retry=0,
94
+ )
95
+ _pull_monorepo >> push_subrepo
96
+ linked_push_subrepo = push_subrepo.copy()
97
+ PUSH_SUBREPO_UPSTREAM >> push_subrepo
98
+ PUSH_SUBREPO_UPSTREAM = linked_push_subrepo
99
+ runner.register(push_subrepo)
@@ -0,0 +1,40 @@
1
+ import json
2
+ from collections.abc import Mapping
3
+
4
+ from zrb.builtin.monorepo._config import MONOREPO_CONFIG, MONOREPO_CONFIG_FILE
5
+ from zrb.builtin.monorepo._group import monorepo_group
6
+ from zrb.runner import runner
7
+ from zrb.task.any_task import AnyTask
8
+ from zrb.task.decorator import python_task
9
+ from zrb.task_input.str_input import StrInput
10
+
11
+
12
+ @python_task(
13
+ name="add",
14
+ group=monorepo_group,
15
+ inputs=[
16
+ StrInput(name="alias", shortcut="a", prompt="Repo Alias", prompt_required=True),
17
+ StrInput(name="folder", shortcut="d", prompt="Directory", prompt_required=True),
18
+ StrInput(name="origin", shortcut="o", prompt="Repo URL", prompt_required=True),
19
+ StrInput(
20
+ name="branch",
21
+ shortcut="b",
22
+ prompt="Repo Branch",
23
+ prompt_required=True,
24
+ default="main",
25
+ ),
26
+ ],
27
+ description="Add repo to monorepo",
28
+ runner=runner,
29
+ )
30
+ def add_to_monorepo(*args, **kwargs):
31
+ task: AnyTask = kwargs.get("_task")
32
+ input_map: Mapping[str, str] = task.get_input_map()
33
+ config = dict(MONOREPO_CONFIG)
34
+ config[input_map.get("alias", "")] = {
35
+ "folder": input_map.get("folder", ""),
36
+ "branch": input_map.get("branch", ""),
37
+ "origin": input_map.get("origin", ""),
38
+ }
39
+ with open(MONOREPO_CONFIG_FILE, "w") as file:
40
+ json.dump(config, file, indent=2)
@@ -0,0 +1,23 @@
1
+ from datetime import datetime
2
+
3
+ from zrb.builtin.monorepo._group import monorepo_group
4
+ from zrb.builtin.monorepo._task import PULL_SUBREPO_UPSTREAM
5
+ from zrb.runner import runner
6
+ from zrb.task.task import Task
7
+ from zrb.task_input.str_input import StrInput
8
+
9
+ pull_from_monorepo = Task(
10
+ name="pull",
11
+ group=monorepo_group,
12
+ description="Pulling from subrepos",
13
+ inputs=[
14
+ StrInput(
15
+ name="message",
16
+ shortcut="m",
17
+ prompt="Commit Messsage",
18
+ default=lambda m: f"Pulling from subrepos at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
19
+ )
20
+ ],
21
+ )
22
+ PULL_SUBREPO_UPSTREAM >> pull_from_monorepo
23
+ runner.register(pull_from_monorepo)
@@ -0,0 +1,35 @@
1
+ from datetime import datetime
2
+
3
+ from zrb.builtin.monorepo._group import monorepo_group
4
+ from zrb.builtin.monorepo._task import PUSH_SUBREPO_UPSTREAM
5
+ from zrb.runner import runner
6
+ from zrb.task.cmd_task import CmdTask
7
+ from zrb.task.task import Task
8
+ from zrb.task_input.str_input import StrInput
9
+
10
+ _push_monorepo = CmdTask(
11
+ name="push-monorepo",
12
+ inputs=[StrInput(name="message")],
13
+ cmd=[
14
+ "git add . -A",
15
+ 'git commit -m "{{input.message}}"',
16
+ 'git push origin "$(git branch --show-current)"',
17
+ ],
18
+ retry=0,
19
+ )
20
+
21
+ push_to_monorepo = Task(
22
+ name="push",
23
+ group=monorepo_group,
24
+ description="Pushing to subrepos",
25
+ inputs=[
26
+ StrInput(
27
+ name="message",
28
+ shortcut="m",
29
+ prompt="Commit Messsage",
30
+ default=lambda m: f"Pushing to subrepos at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
31
+ )
32
+ ],
33
+ )
34
+ PUSH_SUBREPO_UPSTREAM >> _push_monorepo >> push_to_monorepo
35
+ runner.register(push_to_monorepo)
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from typing import Any, Optional
2
3
 
3
4
  from zrb.builtin.project._input import project_dir_input
4
5
  from zrb.helper import util
@@ -7,7 +8,6 @@ from zrb.helper.codemod.add_assert_resource import add_assert_resource
7
8
  from zrb.helper.codemod.add_import_module import add_import_module
8
9
  from zrb.helper.file.text import read_text_file_async, write_text_file_async
9
10
  from zrb.helper.typecheck import typechecked
10
- from zrb.helper.typing import Any, List, Optional
11
11
  from zrb.task.any_task import AnyTask
12
12
  from zrb.task.decorator import python_task
13
13
  from zrb.task.task import Task
@@ -61,8 +61,8 @@ async def register_module_to_project(
61
61
  @typechecked
62
62
  def create_register_module(
63
63
  module_path: str,
64
- inputs: Optional[List[AnyInput]] = None,
65
- upstreams: Optional[List[AnyTask]] = None,
64
+ inputs: Optional[list[AnyInput]] = None,
65
+ upstreams: Optional[list[AnyTask]] = None,
66
66
  alias: Optional[str] = None,
67
67
  task_name: str = "register-module",
68
68
  ) -> Task:
@@ -2,12 +2,12 @@ import os
2
2
 
3
3
  from zrb.task_input.str_input import StrInput
4
4
 
5
- SYSTEM_USER = os.getenv("USER", "incognito")
5
+ _PROJECT_DIR = os.getenv("ZRB_PROJECT_DIR", ".")
6
6
 
7
7
  project_dir_input = StrInput(
8
8
  name="project-dir",
9
9
  shortcut="d",
10
10
  description="Project directory",
11
11
  prompt="Project directory",
12
- default=".",
12
+ default=_PROJECT_DIR,
13
13
  )
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.project._helper import validate_existing_project_dir
4
5
  from zrb.builtin.project._input import project_dir_input
@@ -13,7 +14,6 @@ from zrb.builtin.project.add.app.generator._input import (
13
14
  from zrb.helper.accessories.color import colored
14
15
  from zrb.helper.codemod.add_assert_resource import add_assert_resource
15
16
  from zrb.helper.codemod.add_import_module import add_import_module
16
- from zrb.helper.typing import Any
17
17
  from zrb.helper.util import to_kebab_case, to_snake_case
18
18
  from zrb.runner import runner
19
19
  from zrb.task.decorator import python_task
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.project._helper import (
4
5
  create_register_module,
@@ -8,7 +9,6 @@ from zrb.builtin.project._helper import (
8
9
  from zrb.builtin.project._input import project_dir_input
9
10
  from zrb.builtin.project.add.app._group import project_add_app_group
10
11
  from zrb.helper.accessories.color import colored
11
- from zrb.helper.typing import Any
12
12
  from zrb.helper.util import to_kebab_case
13
13
  from zrb.runner import runner
14
14
  from zrb.task.decorator import python_task
@@ -15,7 +15,7 @@ remove_snake_zrb_app_name_container = DockerComposeTask(
15
15
  cwd=RESOURCE_DIR,
16
16
  compose_cmd="down",
17
17
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
18
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
18
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
19
19
  env_files=[compose_env_file],
20
20
  envs=[
21
21
  image_env,
@@ -26,7 +26,7 @@ start_snake_zrb_app_name_container = DockerComposeStartTask(
26
26
  upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
27
27
  cwd=RESOURCE_DIR,
28
28
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
29
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
29
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
30
30
  env_files=[compose_env_file],
31
31
  envs=[
32
32
  image_env,
@@ -15,7 +15,7 @@ stop_snake_zrb_app_name_container = DockerComposeTask(
15
15
  cwd=RESOURCE_DIR,
16
16
  compose_cmd="stop",
17
17
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
18
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
18
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
19
19
  env_files=[compose_env_file],
20
20
  envs=[
21
21
  image_env,
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.project._helper import (
4
5
  create_register_module,
@@ -17,7 +18,6 @@ from zrb.builtin.project.add.app.python._input import (
17
18
  http_port_input,
18
19
  )
19
20
  from zrb.helper.accessories.color import colored
20
- from zrb.helper.typing import Any
21
21
  from zrb.helper.util import to_kebab_case
22
22
  from zrb.runner import runner
23
23
  from zrb.task.decorator import python_task
@@ -15,7 +15,7 @@ remove_snake_zrb_app_name_container = DockerComposeTask(
15
15
  cwd=RESOURCE_DIR,
16
16
  compose_cmd="down",
17
17
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
18
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
18
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
19
19
  env_files=[compose_env_file],
20
20
  envs=[
21
21
  image_env,
@@ -26,7 +26,7 @@ start_snake_zrb_app_name_container = DockerComposeStartTask(
26
26
  upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
27
27
  cwd=RESOURCE_DIR,
28
28
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
29
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
29
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
30
30
  env_files=[compose_env_file],
31
31
  envs=[
32
32
  image_env,
@@ -15,7 +15,7 @@ stop_snake_zrb_app_name_container = DockerComposeTask(
15
15
  cwd=RESOURCE_DIR,
16
16
  compose_cmd="stop",
17
17
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
18
- compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
18
+ compose_service_configs={"kebab-zrb-app-name": snake_zrb_app_name_service_config},
19
19
  env_files=[compose_env_file],
20
20
  envs=[
21
21
  image_env,
@@ -1,5 +1,3 @@
1
- version: '3'
2
-
3
1
  x-logging: &default-logging
4
2
  options:
5
3
  max-size: "100m"
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from typing import Any
2
3
 
3
4
  from zrb.builtin.project._helper import (
4
5
  create_register_module,
@@ -16,8 +17,8 @@ from zrb.builtin.project.add.fastapp.app._input import (
16
17
  env_prefix_input,
17
18
  http_port_input,
18
19
  )
20
+ from zrb.config.config import VERSION
19
21
  from zrb.helper.accessories.color import colored
20
- from zrb.helper.typing import Any
21
22
  from zrb.helper.util import to_kebab_case
22
23
  from zrb.runner import runner
23
24
  from zrb.task.decorator import python_task
@@ -70,6 +71,7 @@ copy_resource = ResourceMaker(
70
71
  "zrb-app-image-name": "{{input.app_image_name}}",
71
72
  "zrbAppHttpAuthPort": '{{util.coalesce(input.http_port, "3001") + 1}}',
72
73
  "zrbAppHttpLogPort": '{{util.coalesce(input.http_port, "3001") + 2}}',
74
+ "zrbVersion": VERSION,
73
75
  },
74
76
  template_path=os.path.join(_CURRENT_DIR, "template"),
75
77
  destination_path="{{ input.project_dir }}",
@@ -3,6 +3,6 @@ from typing import Any
3
3
 
4
4
  def activate_all_compose_profile(*args: Any, **kwargs: Any) -> str:
5
5
  compose_profile_str = ",".join(
6
- ["monitoring", "monolith", "microservices", "kafka", "rabbitmq"]
6
+ ["monitoring", "monolith", "microservices", "kafka", "postgres", "rabbitmq"]
7
7
  )
8
8
  return f"export COMPOSE_PROFILES={compose_profile_str}"
@@ -1,5 +1,5 @@
1
1
  import os
2
- from typing import Mapping
2
+ from collections.abc import Mapping
3
3
 
4
4
  from zrb import Env, EnvFile, ServiceConfig
5
5
  from zrb.helper.util import to_kebab_case
@@ -1,4 +1,4 @@
1
- from typing import Any, List
1
+ from typing import Any
2
2
 
3
3
  from ..support._helper import get_support_container_compose_profiles
4
4
 
@@ -18,7 +18,7 @@ def should_start_microservices_container(*args: Any, **kwargs: Any) -> bool:
18
18
 
19
19
  def _get_microservices_container_compose_profiles(
20
20
  *args: Any, **kwargs: Any
21
- ) -> List[str]:
21
+ ) -> list[str]:
22
22
  compose_profiles = get_support_container_compose_profiles(*args, **kwargs)
23
23
  compose_profiles.append("microservices")
24
24
  return compose_profiles
@@ -1,4 +1,4 @@
1
- from typing import Any, List
1
+ from typing import Any
2
2
 
3
3
  from ..support._helper import get_support_container_compose_profiles
4
4
 
@@ -16,7 +16,7 @@ def should_start_monolith_container(*args: Any, **kwargs: Any) -> bool:
16
16
  return len(compose_profiles) > 0
17
17
 
18
18
 
19
- def _get_monolith_container_compose_profiles(*args: Any, **kwargs: Any) -> List[str]:
19
+ def _get_monolith_container_compose_profiles(*args: Any, **kwargs: Any) -> list[str]:
20
20
  compose_profiles = get_support_container_compose_profiles(*args, **kwargs)
21
21
  compose_profiles.append("monolith")
22
22
  return compose_profiles