zrb 0.24.0__py3-none-any.whl → 0.26.2__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 (194) 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/_common.sh +15 -0
  15. zrb/builtin/monorepo/_config.py +11 -0
  16. zrb/builtin/monorepo/_group.py +3 -0
  17. zrb/builtin/monorepo/_helper.py +140 -0
  18. zrb/builtin/monorepo/_task.py +126 -0
  19. zrb/builtin/monorepo/add-subrepo.sh +22 -0
  20. zrb/builtin/monorepo/add.py +48 -0
  21. zrb/builtin/monorepo/pull-monorepo.sh +18 -0
  22. zrb/builtin/monorepo/pull-subrepo.sh +18 -0
  23. zrb/builtin/monorepo/pull.py +24 -0
  24. zrb/builtin/monorepo/push-monorepo.sh +18 -0
  25. zrb/builtin/monorepo/push-subrepo.sh +18 -0
  26. zrb/builtin/monorepo/push.py +24 -0
  27. zrb/builtin/project/_helper.py +3 -3
  28. zrb/builtin/project/_input.py +2 -2
  29. zrb/builtin/project/add/app/generator/generator.py +1 -1
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. zrb/builtin/project/add/app/python/python.py +1 -1
  36. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
  37. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +1 -1
  38. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
  39. zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
  40. zrb/builtin/project/add/fastapp/app/app.py +3 -1
  41. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -1
  42. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
  43. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
  44. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
  45. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/stop.py +2 -0
  46. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
  47. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
  48. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
  49. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
  50. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
  51. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
  52. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
  53. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
  54. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
  55. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
  56. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
  57. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
  58. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
  59. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
  60. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
  61. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
  62. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
  63. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
  64. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
  65. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
  66. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
  67. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
  68. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
  69. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
  70. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
  71. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +3 -4
  72. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +4443 -0
  73. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
  74. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
  75. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
  76. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
  77. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
  78. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
  79. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
  80. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
  81. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
  82. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
  83. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
  84. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
  85. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
  86. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
  87. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
  88. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
  89. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
  90. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
  91. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +1 -1
  92. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +1 -1
  93. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +1 -1
  94. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +1 -1
  95. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +1 -1
  96. zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
  97. zrb/builtin/project/add/fastapp/crud/crud.py +1 -1
  98. zrb/builtin/project/add/fastapp/crud/nodejs/codemod/package-lock.json +3 -3
  99. 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
  100. 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
  101. 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
  102. zrb/builtin/project/add/fastapp/field/field.py +1 -1
  103. zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +7 -8
  104. zrb/builtin/project/add/fastapp/module/module.py +1 -1
  105. zrb/builtin/project/add/plugin/plugin.py +1 -1
  106. zrb/builtin/project/add/project_task/add.py +1 -1
  107. zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
  108. zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
  109. zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
  110. zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
  111. zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
  112. zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
  113. zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
  114. zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
  115. zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
  116. zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
  117. zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
  118. zrb/builtin/project/add/task/cmd/add.py +1 -1
  119. zrb/builtin/project/add/task/docker_compose/add.py +1 -1
  120. zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
  121. zrb/builtin/project/add/task/python/add.py +1 -1
  122. zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
  123. zrb/builtin/project/create/_helper.py +1 -1
  124. zrb/builtin/project/create/create.py +1 -1
  125. zrb/builtin/say.py +3 -3
  126. zrb/builtin/version.py +2 -1
  127. zrb/config/config.py +12 -2
  128. zrb/helper/accessories/color.py +2 -1
  129. zrb/helper/advertisement.py +2 -1
  130. zrb/helper/asyncio_task.py +26 -0
  131. zrb/helper/callable.py +2 -1
  132. zrb/helper/cli.py +16 -3
  133. zrb/helper/codemod/add_import_module.py +3 -2
  134. zrb/helper/codemod/add_property_to_class.py +2 -1
  135. zrb/helper/default_env.py +2 -1
  136. zrb/helper/docker_compose/fetch_external_env.py +4 -2
  137. zrb/helper/docker_compose/file.py +3 -1
  138. zrb/helper/env_map/fetch.py +3 -2
  139. zrb/helper/file/copy_tree.py +2 -1
  140. zrb/helper/file/match.py +2 -2
  141. zrb/helper/git/detect_changes.py +1 -1
  142. zrb/helper/loader/load_module.py +7 -46
  143. zrb/helper/loader/load_script.py +57 -0
  144. zrb/helper/map/conversion.py +3 -1
  145. zrb/helper/string/jinja.py +2 -1
  146. zrb/helper/string/parse_replacement.py +1 -1
  147. zrb/helper/typing.py +5 -27
  148. zrb/helper/util.py +1 -1
  149. zrb/task/any_task.py +9 -17
  150. zrb/task/any_task_event_handler.py +3 -1
  151. zrb/task/base_remote_cmd_task.py +3 -10
  152. zrb/task/base_task/base_task.py +12 -8
  153. zrb/task/base_task/component/base_task_model.py +6 -13
  154. zrb/task/base_task/component/common_task_model.py +15 -22
  155. zrb/task/base_task/component/renderer.py +3 -1
  156. zrb/task/base_task/component/trackers.py +1 -1
  157. zrb/task/checker.py +2 -1
  158. zrb/task/cmd_task.py +6 -18
  159. zrb/task/decorator.py +3 -1
  160. zrb/task/docker_compose_start_task.py +27 -32
  161. zrb/task/docker_compose_task.py +27 -35
  162. zrb/task/flow_task.py +19 -18
  163. zrb/task/http_checker.py +3 -9
  164. zrb/task/looper.py +4 -2
  165. zrb/task/notifier.py +3 -1
  166. zrb/task/parallel.py +4 -4
  167. zrb/task/path_checker.py +6 -12
  168. zrb/task/path_watcher.py +5 -13
  169. zrb/task/port_checker.py +3 -9
  170. zrb/task/recurring_task.py +5 -4
  171. zrb/task/remote_cmd_task.py +2 -1
  172. zrb/task/resource_maker.py +6 -13
  173. zrb/task/rsync_task.py +3 -1
  174. zrb/task/server.py +13 -12
  175. zrb/task/time_watcher.py +3 -10
  176. zrb/task/watcher.py +2 -1
  177. zrb/task/wiki_task.py +4 -3
  178. zrb/task_env/env.py +2 -1
  179. zrb/task_env/env_file.py +7 -6
  180. zrb/task_group/group.py +8 -7
  181. zrb/task_input/any_input.py +4 -3
  182. zrb/task_input/base_input.py +5 -3
  183. zrb/task_input/bool_input.py +2 -1
  184. zrb/task_input/choice_input.py +3 -1
  185. zrb/task_input/float_input.py +2 -1
  186. zrb/task_input/int_input.py +2 -1
  187. zrb/task_input/multiline_input.py +3 -1
  188. zrb/task_input/password_input.py +2 -1
  189. zrb/task_input/str_input.py +2 -1
  190. {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/METADATA +1 -1
  191. {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/RECORD +194 -176
  192. {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/LICENSE +0 -0
  193. {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/WHEEL +0 -0
  194. {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/entry_points.txt +0 -0
@@ -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(