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
@@ -5,6 +5,7 @@ from .._constant import RESOURCE_DIR
5
5
  from ..image._env import image_env
6
6
  from ._env import compose_env_file, host_port_env
7
7
  from ._group import snake_zrb_app_name_container_group
8
+ from ._helper import activate_all_compose_profile
8
9
  from ._service_config import snake_zrb_app_name_service_configs
9
10
 
10
11
  stop_snake_zrb_app_name_container = DockerComposeTask(
@@ -13,6 +14,7 @@ stop_snake_zrb_app_name_container = DockerComposeTask(
13
14
  description="Stop human readable zrb app name container",
14
15
  group=snake_zrb_app_name_container_group,
15
16
  cwd=RESOURCE_DIR,
17
+ setup_cmd=activate_all_compose_profile,
16
18
  compose_cmd="stop",
17
19
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
18
20
  compose_service_configs=snake_zrb_app_name_service_configs,
@@ -1,4 +1,4 @@
1
- from typing import Any, List
1
+ from typing import Any
2
2
 
3
3
  from zrb import Task
4
4
 
@@ -16,10 +16,12 @@ def should_start_support_container(*args: Any, **kwargs: Any) -> bool:
16
16
  return len(compose_profiles) > 0
17
17
 
18
18
 
19
- def get_support_container_compose_profiles(*args: Any, **kwargs: Any) -> List[str]:
19
+ def get_support_container_compose_profiles(*args: Any, **kwargs: Any) -> list[str]:
20
20
  task: Task = kwargs.get("_task")
21
21
  env_map = task.get_env_map()
22
- compose_profiles: List[str] = []
22
+ compose_profiles: list[str] = []
23
+ if env_map.get("APP_DB_CONNECTION", "").startswith("postgresql"):
24
+ compose_profiles.append("postgres")
23
25
  broker_type = env_map.get("APP_BROKER_TYPE", "rabbitmq")
24
26
  if broker_type in ["rabbitmq", "kafka"]:
25
27
  compose_profiles.append(broker_type)
@@ -1,4 +1,4 @@
1
1
  echo "Installing node packages, might take a while"
2
2
  npm install --save-dev
3
3
  echo "Building frontend"
4
- npm run build:watch
4
+ npm run build
@@ -1,4 +1,4 @@
1
1
  echo "Installing node packages, might take a while"
2
2
  npm install --save-dev
3
3
  echo "Building frontend"
4
- npm run build
4
+ npm run build:watch
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from zrb import Env, EnvFile
4
2
  from zrb.helper.util import to_kebab_case, to_snake_case
5
3
 
@@ -7,7 +5,7 @@ from .._constant import APP_TEMPLATE_ENV_FILE_NAME, MODULES
7
5
  from .._env import app_enable_otel_env
8
6
 
9
7
 
10
- def get_service_envs(base_port: int, module_index: int, module_name: str) -> List[Env]:
8
+ def get_service_envs(base_port: int, module_index: int, module_name: str) -> list[Env]:
11
9
  kebab_module_name = to_kebab_case(module_name)
12
10
  snake_module_name = to_snake_case(module_name)
13
11
  upper_snake_module_name = snake_module_name.upper()
@@ -48,8 +46,8 @@ def get_service_env_file(module_name: str) -> EnvFile:
48
46
  )
49
47
 
50
48
 
51
- def get_disable_all_module_envs() -> List[Env]:
52
- disable_all_module_envs: List[Env] = []
49
+ def get_disable_all_module_envs() -> list[Env]:
50
+ disable_all_module_envs: list[Env] = []
53
51
  for module in MODULES:
54
52
  snake_module_name = to_snake_case(module)
55
53
  upper_snake_module_name = snake_module_name.upper()
@@ -1,8 +1,8 @@
1
1
  import os
2
+ from typing import Any
2
3
 
3
4
  from zrb import Task, python_task, runner
4
5
  from zrb.helper.accessories.color import colored
5
- from zrb.helper.typing import Any
6
6
 
7
7
  from ..._project import start_project
8
8
  from .._constant import PREFER_MICROSERVICES
@@ -10,7 +10,7 @@ from .._input import host_input, https_input, local_input
10
10
  from ..container._input import enable_monitoring_input
11
11
  from ._group import snake_zrb_app_name_microservices_group
12
12
  from .start_gateway import start_snake_zrb_app_name_gateway
13
- from .start_microservices import start_snake_zrb_app_name_microservices
13
+ from .start_services import start_snake_zrb_app_name_services
14
14
 
15
15
  _CURRENT_DIR = os.path.dirname(__file__)
16
16
 
@@ -28,7 +28,7 @@ _CURRENT_DIR = os.path.dirname(__file__)
28
28
  ],
29
29
  upstreams=[
30
30
  start_snake_zrb_app_name_gateway,
31
- *start_snake_zrb_app_name_microservices,
31
+ *start_snake_zrb_app_name_services,
32
32
  ],
33
33
  )
34
34
  def start_snake_zrb_app_name_microservices(*args: Any, **kwargs: Any):
@@ -1,5 +1,4 @@
1
1
  import os
2
- from typing import List
3
2
 
4
3
  from zrb import CmdTask, HTTPChecker, Task
5
4
  from zrb.helper.util import to_kebab_case
@@ -16,7 +15,7 @@ _CURRENT_DIR = os.path.dirname(__file__)
16
15
 
17
16
 
18
17
  _disable_all_module_envs = get_disable_all_module_envs()
19
- start_snake_zrb_app_name_microservices: List[Task] = []
18
+ start_snake_zrb_app_name_services: list[Task] = []
20
19
  for _module_index, _module_name in enumerate(MODULES):
21
20
  _service_env_file = get_service_env_file(_module_name)
22
21
  _service_envs = get_service_envs(zrbAppHttpPort, _module_index, _module_name)
@@ -52,4 +51,4 @@ for _module_index, _module_name in enumerate(MODULES):
52
51
  )
53
52
  ],
54
53
  )
55
- start_snake_zrb_app_name_microservices.append(_start_service)
54
+ start_snake_zrb_app_name_services.append(_start_service)
@@ -1,7 +1,7 @@
1
1
  import copy
2
2
  import os
3
3
  import re
4
- from typing import List, Mapping
4
+ from collections.abc import Mapping
5
5
 
6
6
  import jsons
7
7
  from dotenv import dotenv_values
@@ -22,7 +22,7 @@ ENABLE_MONITORING: bool = os.getenv("ENABLE_MONITORING", "0") in [
22
22
  ]
23
23
 
24
24
  MODULE_JSON_STR: str = os.getenv("MODULES", "[]")
25
- MODULES: List[str] = jsons.loads(MODULE_JSON_STR)
25
+ MODULES: list[str] = jsons.loads(MODULE_JSON_STR)
26
26
 
27
27
  APP_DIR: str = os.path.abspath(os.path.join(CURRENT_DIR, "..", "src"))
28
28
  TEMPLATE_ENV_FILE_NAME: str = os.path.join(APP_DIR, "template.env")
@@ -56,7 +56,7 @@ SIGNOZ_CLICKHOUSE_PASSWORD: str = os.getenv("SIGNOZ_CLICKHOUSE_PASSWORD", "toor"
56
56
 
57
57
 
58
58
  def get_app_monolith_env_map(
59
- template_env_map: Mapping[str, str], modules: List[str]
59
+ template_env_map: Mapping[str, str], modules: list[str]
60
60
  ) -> Mapping[str, str]:
61
61
  env_map = copy.deepcopy(template_env_map)
62
62
  env_map["APP_RMQ_CONNECTION"] = (
@@ -84,7 +84,7 @@ def get_app_monolith_env_map(
84
84
 
85
85
 
86
86
  def get_app_gateway_env_map(
87
- template_env_map: Mapping[str, str], modules: List[str]
87
+ template_env_map: Mapping[str, str], modules: list[str]
88
88
  ) -> Mapping[str, str]:
89
89
  env_map = get_app_monolith_env_map(template_env_map, modules)
90
90
  for module_name in modules:
@@ -99,7 +99,7 @@ def get_app_gateway_env_map(
99
99
 
100
100
 
101
101
  def get_app_service_env_map(
102
- template_env_map: Mapping[str, str], modules: List[str], current_module: str
102
+ template_env_map: Mapping[str, str], modules: list[str], current_module: str
103
103
  ) -> Mapping[str, str]:
104
104
  env_map = get_app_monolith_env_map(template_env_map, modules)
105
105
  for module_name in modules:
@@ -1,5 +1,5 @@
1
1
  import os
2
- from typing import List, Mapping
2
+ from collections.abc import Mapping
3
3
 
4
4
  import pulumi_kubernetes as k8s
5
5
  from _common import (
@@ -24,8 +24,8 @@ app_port = int(os.getenv("APP_PORT", app_monolith_env_map.get("APP_PORT", "8080"
24
24
  app_gateway_env_map = get_app_gateway_env_map(TEMPLATE_ENV_MAP, MODULES)
25
25
 
26
26
 
27
- def create_app_microservices_deployments() -> List[k8s.apps.v1.Deployment]:
28
- deployments: List[k8s.apps.v1.Deployment] = []
27
+ def create_app_microservices_deployments() -> list[k8s.apps.v1.Deployment]:
28
+ deployments: list[k8s.apps.v1.Deployment] = []
29
29
  deployments.append(
30
30
  _create_app_deployment(
31
31
  resource_name="kebab-zrb-app-name-gateway",
@@ -58,8 +58,8 @@ def create_app_microservices_deployments() -> List[k8s.apps.v1.Deployment]:
58
58
  return deployments
59
59
 
60
60
 
61
- def create_app_microservices_services() -> List[k8s.core.v1.Service]:
62
- services: List[k8s.core.v1.Service] = []
61
+ def create_app_microservices_services() -> list[k8s.core.v1.Service]:
62
+ services: list[k8s.core.v1.Service] = []
63
63
  services.append(
64
64
  _create_app_service(
65
65
  resource_name="kebab-zrb-app-name-gateway",
@@ -1,5 +1,3 @@
1
- version: '3'
2
-
3
1
  x-logging: &default-logging
4
2
  options:
5
3
  max-size: "100m"
@@ -112,6 +110,8 @@ services:
112
110
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-postgresql
113
111
  hostname: postgresql
114
112
  restart: unless-stopped
113
+ profiles:
114
+ - postgres
115
115
  environment:
116
116
  POSTGRES_USER: ${POSTGRES_USER:-postgres}
117
117
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin}
@@ -1,4 +1,5 @@
1
- from typing import Any, Mapping, Optional
1
+ from collections.abc import Mapping
2
+ from typing import Any, Optional
2
3
 
3
4
  from fastapi import HTTPException
4
5
 
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import List, Mapping, Optional
3
+ from collections.abc import Mapping
4
+ from typing import Optional
4
5
 
5
6
  from aiokafka import __version__
6
7
  from aiokafka.admin import AIOKafkaAdminClient, NewTopic
@@ -44,7 +45,7 @@ class KafkaAdmin(Admin):
44
45
  self.sasl_oauth_token_provider = sasl_oauth_token_provider
45
46
  self._existing_events: Mapping[str, bool] = {}
46
47
 
47
- async def create_events(self, event_names: List[str]):
48
+ async def create_events(self, event_names: list[str]):
48
49
  # Only handle non-existing events
49
50
  event_names = [
50
51
  event_name
@@ -72,7 +73,7 @@ class KafkaAdmin(Admin):
72
73
  for event_name in event_names:
73
74
  self._existing_events[event_name] = True
74
75
 
75
- async def delete_events(self, event_names: List[str]):
76
+ async def delete_events(self, event_names: list[str]):
76
77
  # Only handle existing events
77
78
  event_names = [
78
79
  event_name
@@ -1,7 +1,8 @@
1
1
  import asyncio
2
2
  import inspect
3
3
  import logging
4
- from typing import Any, Callable, Mapping, Optional
4
+ from collections.abc import Callable, Mapping
5
+ from typing import Any, Optional
5
6
 
6
7
  from aiokafka import AIOKafkaConsumer, __version__
7
8
  from aiokafka.consumer.consumer import RoundRobinPartitionAssignor
@@ -1,5 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Any, Callable, List, Mapping, Optional
2
+ from collections.abc import Callable, Mapping
3
+ from typing import Any, Optional
3
4
 
4
5
  from component.serializer.serializer import JsonSerializer, Serializer
5
6
 
@@ -8,11 +9,11 @@ TEventHandler = Callable[[Any], Any]
8
9
 
9
10
  class Admin(ABC):
10
11
  @abstractmethod
11
- async def create_events(self, event_names: List[str]):
12
+ async def create_events(self, event_names: list[str]):
12
13
  pass
13
14
 
14
15
  @abstractmethod
15
- async def delete_events(self, event_names: List[str]):
16
+ async def delete_events(self, event_names: list[str]):
16
17
  pass
17
18
 
18
19
 
@@ -1,7 +1,8 @@
1
1
  import asyncio
2
2
  import inspect
3
3
  import logging
4
- from typing import Any, Callable, List, Mapping
4
+ from collections.abc import Callable, Mapping
5
+ from typing import Any
5
6
 
6
7
  from component.messagebus.messagebus import (
7
8
  Admin,
@@ -59,8 +60,8 @@ class MockPublisher(Publisher):
59
60
 
60
61
 
61
62
  class MockAdmin(Admin):
62
- async def create_events(self, event_names: List[str]):
63
+ async def create_events(self, event_names: list[str]):
63
64
  return
64
65
 
65
- async def delete_events(self, event_names: List[str]):
66
+ async def delete_events(self, event_names: list[str]):
66
67
  return
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import Any, List, Mapping, Optional
3
+ from collections.abc import Mapping
4
+ from typing import Any, Optional
4
5
 
5
6
  import aiormq
6
7
  from component.messagebus.messagebus import Admin
@@ -28,7 +29,7 @@ class RMQAdmin(Admin):
28
29
  self.configs = configs
29
30
  self._existing_events: Mapping[str, bool] = {}
30
31
 
31
- async def create_events(self, event_names: List[str]):
32
+ async def create_events(self, event_names: list[str]):
32
33
  # Only handle non-existing events
33
34
  event_names = [
34
35
  event_name
@@ -60,7 +61,7 @@ class RMQAdmin(Admin):
60
61
  exc_info=True,
61
62
  )
62
63
 
63
- async def delete_events(self, event_names: List[str]):
64
+ async def delete_events(self, event_names: list[str]):
64
65
  # Only handle existing events
65
66
  event_names = [
66
67
  event_name
@@ -1,7 +1,8 @@
1
1
  import asyncio
2
2
  import inspect
3
3
  import logging
4
- from typing import Any, Callable, Mapping, Optional
4
+ from collections.abc import Callable, Mapping
5
+ from typing import Any, Optional
5
6
 
6
7
  import aiormq
7
8
  from component.messagebus.messagebus import (
@@ -68,7 +69,7 @@ class RMQConsumer(Consumer):
68
69
  await self._connect()
69
70
  event_names = list(self._handlers.keys())
70
71
  await self.rmq_admin.create_events(event_names)
71
- f'🐰 [{self.identifier}] Listening from "{event_names}"'
72
+ f'🐰 [{self.identifier}] listening from "{event_names}"'
72
73
  for event_name in event_names:
73
74
  queue_name = self.rmq_admin.get_queue_name(event_name)
74
75
  on_message = self._create_consumer_callback(self.channel, event_name)
@@ -1,4 +1,4 @@
1
- from typing import Generic, List, Optional, Type, TypeVar
1
+ from typing import Generic, Optional, Type, TypeVar
2
2
 
3
3
  from component.repo.repo import Repo
4
4
  from component.repo.search_filter import SearchFilter
@@ -18,10 +18,10 @@ class RepoModel(Generic[Schema, SchemaData, SchemaResult]):
18
18
  async def get_by_id(self, id: str) -> Schema:
19
19
  return await self.repo.get_by_id(id)
20
20
 
21
- async def get_all(self) -> List[Schema]:
21
+ async def get_all(self) -> list[Schema]:
22
22
  count = await self.repo.count()
23
23
  limit = 1000
24
- schema_list: List[Schema] = []
24
+ schema_list: list[Schema] = []
25
25
  for offset in range(0, count, limit):
26
26
  partial_schema_list = await self.repo.get(limit=limit, offset=offset)
27
27
  schema_list += partial_schema_list
@@ -1,5 +1,6 @@
1
1
  import logging
2
- from typing import Any, List, Mapping, Optional, Type, TypeVar
2
+ from collections.abc import Mapping
3
+ from typing import Any, Optional, Type, TypeVar
3
4
 
4
5
  from component.repo.repo import Repo
5
6
  from component.repo.search_filter import SearchFilter
@@ -28,8 +29,8 @@ class DBRepo(Repo[Schema, SchemaData]):
28
29
  ):
29
30
  self.logger = logger
30
31
  self.engine = engine
31
- self.db_entity_attribute_names: List[str] = dir(self.db_entity_cls)
32
- self._keyword_fields: Optional[List[InstrumentedAttribute]] = None
32
+ self.db_entity_attribute_names: list[str] = dir(self.db_entity_cls)
33
+ self._keyword_fields: Optional[list[InstrumentedAttribute]] = None
33
34
 
34
35
  async def get_by_id(self, id: str) -> Schema:
35
36
  """
@@ -48,7 +49,7 @@ class DBRepo(Repo[Schema, SchemaData]):
48
49
  search_filter: Optional[SearchFilter] = None,
49
50
  limit: int = 100,
50
51
  offset: int = 0,
51
- ) -> List[Schema]:
52
+ ) -> list[Schema]:
52
53
  """
53
54
  Find multiple records by keyword with limit and offset.
54
55
  """
@@ -164,7 +165,7 @@ class DBRepo(Repo[Schema, SchemaData]):
164
165
  criterion: _ColumnExpressionArgument[bool],
165
166
  limit: int = 100,
166
167
  offset: int = 0,
167
- ) -> List[DBEntity]:
168
+ ) -> list[DBEntity]:
168
169
  try:
169
170
  db_query = db.query(self.db_entity_cls).filter(criterion)
170
171
  if "created_at" in self.db_entity_attribute_names:
@@ -245,7 +246,7 @@ class DBRepo(Repo[Schema, SchemaData]):
245
246
  ]
246
247
  return or_(*keyword_criterion)
247
248
 
248
- def _get_keyword_fields(self) -> List[InstrumentedAttribute]:
249
+ def _get_keyword_fields(self) -> list[InstrumentedAttribute]:
249
250
  """
250
251
  Return list of fields for keyword filtering
251
252
  """
@@ -1,5 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Generic, List, Optional, TypeVar
2
+ from typing import Generic, Optional, TypeVar
3
3
 
4
4
  from component.repo.search_filter import SearchFilter
5
5
  from pydantic import BaseModel
@@ -16,7 +16,7 @@ class Repo(Generic[Schema, SchemaData], ABC):
16
16
  @abstractmethod
17
17
  async def get(
18
18
  self, search_filter: Optional[SearchFilter], limit: int, offset: int
19
- ) -> List[Schema]:
19
+ ) -> list[Schema]:
20
20
  pass
21
21
 
22
22
  @abstractmethod
@@ -1,4 +1,5 @@
1
- from typing import Any, Mapping
1
+ from collections.abc import Mapping
2
+ from typing import Any
2
3
 
3
4
  from pydantic import BaseModel
4
5
 
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import Any, Callable
3
+ from collections.abc import Callable
4
+ from typing import Any
4
5
 
5
6
  from component.messagebus.messagebus import Admin, Consumer, Publisher
6
7
  from component.rpc.rpc import Caller, Message, Result
@@ -1,6 +1,7 @@
1
1
  import inspect
2
2
  import logging
3
- from typing import Any, Mapping
3
+ from collections.abc import Mapping
4
+ from typing import Any
4
5
 
5
6
  from component.messagebus.messagebus import Consumer, Publisher
6
7
  from component.rpc.rpc import Message, Result, Server, TRPCHandler
@@ -1,5 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Any, Callable, List, Mapping, TypeVar
2
+ from collections.abc import Callable, Mapping
3
+ from typing import Any, TypeVar
3
4
 
4
5
  TRPCHandler = Callable[..., Any]
5
6
  TMessage = TypeVar("TMessage", bound="Message")
@@ -27,7 +28,7 @@ class Server(ABC):
27
28
 
28
29
 
29
30
  class Message:
30
- def __init__(self, reply_event: str, args: List[Any], kwargs: Mapping[str, Any]):
31
+ def __init__(self, reply_event: str, args: list[Any], kwargs: Mapping[str, Any]):
31
32
  self.reply_event = reply_event
32
33
  self.args = args
33
34
  self.kwargs = kwargs
@@ -1,5 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Any, Callable
2
+ from collections.abc import Callable
3
+ from typing import Any
3
4
 
4
5
  import jsons
5
6
 
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import os
3
- from typing import List
4
3
 
5
4
  from helper.conversion import str_to_boolean, str_to_logging_level
6
5
 
@@ -80,14 +79,14 @@ APP_KAFKA_SASL_MECHANISM = os.getenv("APP_KAFKA_SASL_MECHANISM", "SCRAM-SHA-512"
80
79
  APP_KAFKA_SASL_USER = os.getenv("APP_KAFKA_SASL_USER", "admin")
81
80
  APP_KAFKA_SASL_PASS = os.getenv("APP_KAFKA_SASL_PASS", "admin")
82
81
 
83
- APP_CORS_ALLOW_ORIGINS: List[str] = json.loads(
82
+ APP_CORS_ALLOW_ORIGINS: list[str] = json.loads(
84
83
  os.getenv("APP_CORS_ALLOW_ORIGINS", '["*"]')
85
84
  )
86
85
  APP_CORS_ALLOW_ORIGIN_REGEX: str = os.getenv("APP_CORS_ALLOW_ORIGIN_REGEX", "")
87
- APP_CORS_ALLOW_METHODS: List[str] = json.loads(
86
+ APP_CORS_ALLOW_METHODS: list[str] = json.loads(
88
87
  os.getenv("APP_CORS_ALLOW_METHODS", '["*"]')
89
88
  )
90
- APP_CORS_ALLOW_HEADERS: List[str] = json.loads(
89
+ APP_CORS_ALLOW_HEADERS: list[str] = json.loads(
91
90
  os.getenv("APP_CORS_ALLOW_HEADERS", '["*"]')
92
91
  )
93
92
  APP_CORS_ALLOW_CREDENTIALS: bool = str_to_boolean(