zrb 0.23.4__py3-none-any.whl → 0.24.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 (98) hide show
  1. zrb/__init__.py +2 -0
  2. zrb/builtin/devtool/install/_input.py +2 -2
  3. 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 +5 -6
  4. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +5 -6
  5. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -52
  6. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/start.py +5 -6
  7. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/start.py +5 -6
  8. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/start.py +4 -6
  9. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/locustfile.py +1 -3
  10. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/template.env +1 -1
  11. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +59 -61
  12. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app.py +28 -28
  13. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_lifespan.py +15 -15
  14. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_state.py +2 -2
  15. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/db_connection.py +14 -2
  16. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/frontend_index.py +2 -2
  17. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/log.py +6 -6
  18. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/messagebus.py +33 -33
  19. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/rpc.py +9 -9
  20. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_scheme.py +2 -2
  21. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_util.py +7 -7
  22. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/model/user_model.py +6 -6
  23. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/refresh_token_util.py +7 -7
  24. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/user.py +18 -18
  25. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +2 -2
  26. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +8 -8
  27. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -2
  28. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py +8 -8
  29. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/template.env +5 -2
  30. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +7 -7
  31. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +7 -7
  32. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +7 -7
  33. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +14 -14
  34. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +3 -3
  35. zrb/builtin/project/add/fastapp/crud/_helper/__init__.py +7 -0
  36. zrb/builtin/project/add/fastapp/crud/_helper/_common.py +8 -0
  37. zrb/builtin/project/add/fastapp/crud/_helper/register_api.py +45 -0
  38. zrb/builtin/project/add/fastapp/crud/_helper/register_permission.py +40 -0
  39. zrb/builtin/project/add/fastapp/crud/_helper/register_rpc.py +45 -0
  40. zrb/builtin/project/add/fastapp/crud/crud.py +3 -24
  41. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +12 -1
  42. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +1 -0
  43. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +8 -7
  44. zrb/builtin/project/add/fastapp/field/_helper/__init__.py +17 -0
  45. zrb/builtin/project/add/fastapp/field/_helper/_common.py +102 -0
  46. zrb/builtin/project/add/fastapp/field/_helper/inject_delete_page.py +49 -0
  47. zrb/builtin/project/add/fastapp/field/_helper/inject_detail_page.py +49 -0
  48. zrb/builtin/project/add/fastapp/field/_helper/inject_insert_page.py +62 -0
  49. zrb/builtin/project/add/fastapp/field/_helper/inject_list_page.py +47 -0
  50. zrb/builtin/project/add/fastapp/field/_helper/inject_repo.py +47 -0
  51. zrb/builtin/project/add/fastapp/field/_helper/inject_schema.py +45 -0
  52. zrb/builtin/project/add/fastapp/field/_helper/inject_test.py +49 -0
  53. zrb/builtin/project/add/fastapp/field/_helper/inject_update_page.py +50 -0
  54. zrb/builtin/project/add/fastapp/field/_input.py +14 -2
  55. zrb/builtin/project/add/fastapp/field/field.py +51 -69
  56. zrb/builtin/project/add/fastapp/module/_helper/__init__.py +17 -0
  57. zrb/builtin/project/add/fastapp/module/_helper/append_all_disabled_env.py +22 -0
  58. zrb/builtin/project/add/fastapp/module/_helper/append_all_enabled_env.py +22 -0
  59. zrb/builtin/project/add/fastapp/module/_helper/append_deployment_template_env.py +25 -0
  60. zrb/builtin/project/add/fastapp/module/_helper/append_src_template_env.py +25 -0
  61. zrb/builtin/project/add/fastapp/module/_helper/create_app_config.py +29 -0
  62. zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +158 -0
  63. zrb/builtin/project/add/fastapp/module/_helper/register_migration.py +35 -0
  64. zrb/builtin/project/add/fastapp/module/_helper/register_module.py +33 -0
  65. zrb/builtin/project/add/fastapp/module/module.py +8 -37
  66. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -2
  67. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +8 -8
  68. zrb/builtin/project/add/plugin/plugin.py +2 -2
  69. zrb/builtin/project/create/create.py +2 -2
  70. zrb/builtin/version.py +3 -3
  71. zrb/config/config.py +14 -14
  72. zrb/helper/callable.py +3 -1
  73. zrb/helper/cli.py +4 -4
  74. zrb/helper/log.py +3 -3
  75. zrb/helper/typecheck.py +2 -2
  76. zrb/helper/typing.py +2 -2
  77. zrb/helper/util.py +12 -0
  78. zrb/runner.py +2 -2
  79. zrb/task/base_task/base_task.py +3 -3
  80. zrb/task/base_task/component/base_task_model.py +9 -9
  81. zrb/task/cmd_task.py +4 -4
  82. zrb/task/docker_compose_start_task.py +151 -0
  83. zrb/task/docker_compose_task.py +32 -15
  84. zrb/task_input/base_input.py +2 -2
  85. zrb/task_input/multiline_input.py +2 -2
  86. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/METADATA +2 -2
  87. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/RECORD +90 -73
  88. 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/init.py +0 -34
  89. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/init.py +0 -34
  90. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/init.py +0 -36
  91. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/init.py +0 -36
  92. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/init.py +0 -26
  93. zrb/builtin/project/add/fastapp/crud/_helper.py +0 -118
  94. zrb/builtin/project/add/fastapp/field/_helper.py +0 -328
  95. zrb/builtin/project/add/fastapp/module/_helper.py +0 -313
  96. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/LICENSE +0 -0
  97. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/WHEEL +0 -0
  98. {zrb-0.23.4.dist-info → zrb-0.24.0.dist-info}/entry_points.txt +0 -0
zrb/__init__.py CHANGED
@@ -14,6 +14,7 @@ from zrb.task.base_remote_cmd_task import BaseRemoteCmdTask, RemoteConfig
14
14
  from zrb.task.checker import Checker
15
15
  from zrb.task.cmd_task import CmdTask
16
16
  from zrb.task.decorator import python_task
17
+ from zrb.task.docker_compose_start_task import DockerComposeStartTask
17
18
  from zrb.task.docker_compose_task import DockerComposeTask, ServiceConfig
18
19
  from zrb.task.flow_task import FlowTask
19
20
  from zrb.task.http_checker import HTTPChecker
@@ -66,6 +67,7 @@ assert python_task
66
67
  assert Task
67
68
  assert CmdTask
68
69
  assert DockerComposeTask
70
+ assert DockerComposeStartTask
69
71
  assert ServiceConfig
70
72
  assert BaseRemoteCmdTask
71
73
  assert RemoteConfig
@@ -1,9 +1,9 @@
1
- from zrb.config.config import default_shell
1
+ from zrb.config.config import DEFAULT_SHELL
2
2
  from zrb.task_input.str_input import StrInput
3
3
 
4
4
  terminal_config_file_input = StrInput(
5
5
  name="config-file",
6
6
  shortcut="c",
7
7
  prompt="Config file",
8
- default="~/.zshrc" if default_shell == "zsh" else "~/.bashrc",
8
+ default="~/.zshrc" if DEFAULT_SHELL == "zsh" else "~/.bashrc",
9
9
  )
@@ -1,16 +1,17 @@
1
- from zrb import DockerComposeTask, HTTPChecker, runner
1
+ from zrb import DockerComposeStartTask, HTTPChecker, runner
2
2
 
3
3
  from ..._project import start_project_containers
4
4
  from .._constant import RESOURCE_DIR
5
5
  from .._input import host_input, https_input, local_input
6
+ from ..image import build_snake_zrb_app_name_image
6
7
  from ..image._env import image_env
7
8
  from ..image._input import image_input
8
9
  from ._env import compose_env_file, host_port_env
9
10
  from ._group import snake_zrb_app_name_container_group
10
11
  from ._service_config import snake_zrb_app_name_service_config
11
- from .init import init_snake_zrb_app_name_container
12
+ from .remove import remove_snake_zrb_app_name_container
12
13
 
13
- start_snake_zrb_app_name_container = DockerComposeTask(
14
+ start_snake_zrb_app_name_container = DockerComposeStartTask(
14
15
  icon="🐳",
15
16
  name="start",
16
17
  description="Start human readable zrb app name container",
@@ -22,10 +23,8 @@ start_snake_zrb_app_name_container = DockerComposeTask(
22
23
  image_input,
23
24
  ],
24
25
  should_execute="{{ input.local_snake_zrb_app_name}}",
25
- upstreams=[init_snake_zrb_app_name_container],
26
+ upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
26
27
  cwd=RESOURCE_DIR,
27
- compose_cmd="logs",
28
- compose_flags=["-f"],
29
28
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
30
29
  compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
31
30
  env_files=[compose_env_file],
@@ -1,16 +1,17 @@
1
- from zrb import DockerComposeTask, HTTPChecker, runner
1
+ from zrb import DockerComposeStartTask, HTTPChecker, runner
2
2
 
3
3
  from ..._project import start_project_containers
4
4
  from .._constant import RESOURCE_DIR
5
5
  from .._input import host_input, https_input, local_input
6
+ from ..image import build_snake_zrb_app_name_image
6
7
  from ..image._env import image_env
7
8
  from ..image._input import image_input
8
9
  from ._env import compose_env_file, host_port_env
9
10
  from ._group import snake_zrb_app_name_container_group
10
11
  from ._service_config import snake_zrb_app_name_service_config
11
- from .init import init_snake_zrb_app_name_container
12
+ from .remove import remove_snake_zrb_app_name_container
12
13
 
13
- start_snake_zrb_app_name_container = DockerComposeTask(
14
+ start_snake_zrb_app_name_container = DockerComposeStartTask(
14
15
  icon="🐳",
15
16
  name="start",
16
17
  description="Start human readable zrb app name container",
@@ -22,10 +23,8 @@ start_snake_zrb_app_name_container = DockerComposeTask(
22
23
  image_input,
23
24
  ],
24
25
  should_execute="{{ input.local_snake_zrb_app_name}}",
25
- upstreams=[init_snake_zrb_app_name_container],
26
+ upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
26
27
  cwd=RESOURCE_DIR,
27
- compose_cmd="logs",
28
- compose_flags=["-f"],
29
28
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
30
29
  compose_service_configs={"snake_zrb_app_name": snake_zrb_app_name_service_config},
31
30
  env_files=[compose_env_file],
@@ -1,51 +1,4 @@
1
- from typing import Any, List
2
-
3
- from zrb import Task
4
-
5
-
6
- def get_support_container_compose_profiles(*args: Any, **kwargs: Any) -> List[str]:
7
- task: Task = kwargs.get("_task")
8
- env_map = task.get_env_map()
9
- compose_profiles: List[str] = []
10
- broker_type = env_map.get("APP_BROKER_TYPE", "rabbitmq")
11
- if broker_type in ["rabbitmq", "kafka"]:
12
- compose_profiles.append(broker_type)
13
- if kwargs.get("enable_snake_zrb_app_name_monitoring", False):
14
- compose_profiles.append("monitoring")
15
- return compose_profiles
16
-
17
-
18
- def get_container_compose_profiles(*args: Any, **kwargs: Any) -> str:
19
- compose_profiles = get_support_container_compose_profiles(*args, **kwargs)
20
- compose_profiles.append(
21
- kwargs.get("snake_zrb_app_name_run_mode", "monolith"),
22
- )
23
- return compose_profiles
24
-
25
-
26
- def activate_support_compose_profile(*args: Any, **kwargs: Any) -> str:
27
- compose_profiles = get_support_container_compose_profiles(*args, **kwargs)
28
- compose_profile_str = ",".join(compose_profiles)
29
- return f"export COMPOSE_PROFILES={compose_profile_str}"
30
-
31
-
32
- def should_start_support_container(*args: Any, **kwargs: Any) -> bool:
33
- if not kwargs.get("local_snake_zrb_app_name", True):
34
- return False
35
- compose_profiles = get_support_container_compose_profiles(*args, **kwargs)
36
- return len(compose_profiles) > 0
37
-
38
-
39
- def should_start_local_monolith(*args: Any, **kwargs: Any) -> bool:
40
- if not kwargs.get("local_snake_zrb_app_name", True):
41
- return False
42
- return kwargs.get("snake_zrb_app_name_run_mode", "monolith") == "monolith"
43
-
44
-
45
- def activate_selected_compose_profile(*args: Any, **kwargs: Any) -> str:
46
- compose_profiles = get_container_compose_profiles(*args, **kwargs)
47
- compose_profile_str = ",".join(compose_profiles)
48
- return f"export COMPOSE_PROFILES={compose_profile_str}"
1
+ from typing import Any
49
2
 
50
3
 
51
4
  def activate_all_compose_profile(*args: Any, **kwargs: Any) -> str:
@@ -53,7 +6,3 @@ def activate_all_compose_profile(*args: Any, **kwargs: Any) -> str:
53
6
  ["monitoring", "monolith", "microservices", "kafka", "rabbitmq"]
54
7
  )
55
8
  return f"export COMPOSE_PROFILES={compose_profile_str}"
56
-
57
-
58
- def should_start_container(*args: Any, **kwargs: Any) -> bool:
59
- return kwargs.get("local_snake_zrb_app_name", True)
@@ -1,4 +1,4 @@
1
- from zrb import DockerComposeTask, runner
1
+ from zrb import DockerComposeStartTask, runner
2
2
 
3
3
  from ...._project import start_project_containers
4
4
  from ..._checker import (
@@ -13,16 +13,17 @@ from ..._checker import (
13
13
  )
14
14
  from ..._constant import PREFER_MICROSERVICES, RESOURCE_DIR
15
15
  from ..._input import host_input, https_input, local_input
16
+ from ...image import build_snake_zrb_app_name_image
16
17
  from ...image._env import image_env
17
18
  from ...image._input import image_input
18
19
  from .._env import compose_env_file, host_port_env
19
20
  from .._input import enable_monitoring_input
20
21
  from .._service_config import snake_zrb_app_name_service_configs
22
+ from ..remove import remove_snake_zrb_app_name_container
21
23
  from ._group import snake_zrb_app_name_microservices_container_group
22
24
  from ._helper import activate_microservices_compose_profile
23
- from .init import init_snake_zrb_app_name_microservices_container
24
25
 
25
- start_snake_zrb_app_name_microservices_container = DockerComposeTask(
26
+ start_snake_zrb_app_name_microservices_container = DockerComposeStartTask(
26
27
  icon="🐳",
27
28
  name="start",
28
29
  description="Start human readable zrb app name container",
@@ -35,11 +36,9 @@ start_snake_zrb_app_name_microservices_container = DockerComposeTask(
35
36
  image_input,
36
37
  ],
37
38
  should_execute="{{ input.local_snake_zrb_app_name}}",
38
- upstreams=[init_snake_zrb_app_name_microservices_container],
39
+ upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
39
40
  cwd=RESOURCE_DIR,
40
41
  setup_cmd=activate_microservices_compose_profile,
41
- compose_cmd="logs",
42
- compose_flags=["-f"],
43
42
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
44
43
  compose_service_configs=snake_zrb_app_name_service_configs,
45
44
  env_files=[compose_env_file],
@@ -1,4 +1,4 @@
1
- from zrb import DockerComposeTask, runner
1
+ from zrb import DockerComposeStartTask, runner
2
2
 
3
3
  from ...._project import start_project_containers
4
4
  from ..._checker import (
@@ -13,16 +13,17 @@ from ..._checker import (
13
13
  )
14
14
  from ..._constant import PREFER_MICROSERVICES, RESOURCE_DIR
15
15
  from ..._input import host_input, https_input, local_input
16
+ from ...image import build_snake_zrb_app_name_image
16
17
  from ...image._env import image_env
17
18
  from ...image._input import image_input
18
19
  from .._env import compose_env_file, host_port_env
19
20
  from .._input import enable_monitoring_input
20
21
  from .._service_config import snake_zrb_app_name_service_configs
22
+ from ..remove import remove_snake_zrb_app_name_container
21
23
  from ._group import snake_zrb_app_name_monolith_container_group
22
24
  from ._helper import activate_monolith_compose_profile
23
- from .init import init_snake_zrb_app_name_monolith_container
24
25
 
25
- start_snake_zrb_app_name_monolith_container = DockerComposeTask(
26
+ start_snake_zrb_app_name_monolith_container = DockerComposeStartTask(
26
27
  icon="🐳",
27
28
  name="start",
28
29
  description="Start human readable zrb app name container",
@@ -35,11 +36,9 @@ start_snake_zrb_app_name_monolith_container = DockerComposeTask(
35
36
  image_input,
36
37
  ],
37
38
  should_execute="{{ input.local_snake_zrb_app_name}}",
38
- upstreams=[init_snake_zrb_app_name_monolith_container],
39
+ upstreams=[build_snake_zrb_app_name_image, remove_snake_zrb_app_name_container],
39
40
  cwd=RESOURCE_DIR,
40
41
  setup_cmd=activate_monolith_compose_profile,
41
- compose_cmd="logs",
42
- compose_flags=["-f"],
43
42
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
44
43
  compose_service_configs=snake_zrb_app_name_service_configs,
45
44
  env_files=[compose_env_file],
@@ -1,4 +1,4 @@
1
- from zrb import DockerComposeTask, runner
1
+ from zrb import DockerComposeStartTask, runner
2
2
 
3
3
  from ..._checker import (
4
4
  kafka_outside_checker,
@@ -15,11 +15,11 @@ from ...image._input import image_input
15
15
  from .._env import compose_env_file
16
16
  from .._input import enable_monitoring_input
17
17
  from .._service_config import snake_zrb_app_name_service_configs
18
+ from ..remove import remove_snake_zrb_app_name_container
18
19
  from ._group import snake_zrb_app_name_support_container_group
19
20
  from ._helper import activate_support_compose_profile, should_start_support_container
20
- from .init import init_snake_zrb_app_name_support_container
21
21
 
22
- start_snake_zrb_app_name_support_container = DockerComposeTask(
22
+ start_snake_zrb_app_name_support_container = DockerComposeStartTask(
23
23
  icon="🐳",
24
24
  name="start",
25
25
  description="Start human readable zrb app name container",
@@ -32,11 +32,9 @@ start_snake_zrb_app_name_support_container = DockerComposeTask(
32
32
  image_input,
33
33
  ],
34
34
  should_execute=should_start_support_container,
35
- upstreams=[init_snake_zrb_app_name_support_container],
35
+ upstreams=[remove_snake_zrb_app_name_container],
36
36
  cwd=RESOURCE_DIR,
37
37
  setup_cmd=activate_support_compose_profile,
38
- compose_cmd="logs",
39
- compose_flags=["-f"],
40
38
  compose_env_prefix="CONTAINER_ZRB_ENV_PREFIX",
41
39
  compose_service_configs=snake_zrb_app_name_service_configs,
42
40
  env_files=[compose_env_file],
@@ -2,9 +2,7 @@ import os
2
2
 
3
3
  from locust import HttpUser, between, task
4
4
 
5
- access_token_cookie_key = os.getenv(
6
- "PUBLIC_AUTH_ACCESS_TOKEN_COOKIE_KEY", "access_token"
7
- )
5
+ access_token_cookie_key = os.getenv("APP_AUTH_ACCESS_TOKEN_COOKIE_KEY", "access_token")
8
6
  admin_username = os.getenv("APP_AUTH_ADMIN_USERNAME", "root")
9
7
  admin_password = os.getenv("APP_AUTH_ADMIN_PASSWORD", "toor")
10
8
 
@@ -1,3 +1,3 @@
1
- PUBLIC_AUTH_ACCESS_TOKEN_COOKIE_KEY=access_token
1
+ APP_AUTH_ACCESS_TOKEN_COOKIE_KEY=access_token
2
2
  APP_AUTH_ADMIN_USERNAME=root
3
3
  APP_AUTH_ADMIN_PASSWORD=toor
@@ -4,100 +4,98 @@ from typing import List
4
4
 
5
5
  from helper.conversion import str_to_boolean, str_to_logging_level
6
6
 
7
- app_src_dir = os.path.dirname(__file__)
7
+ APP_SRC_DIR = os.path.dirname(__file__)
8
8
 
9
- zrb_app_name = os.getenv("APP_NAME", "app")
10
- app_logging_level = str_to_logging_level(os.getenv("APP_LOGGING_LEVEL", "INFO"))
11
- app_host = os.getenv("APP_HOST", "0.0.0.0")
12
- app_port = int(os.getenv("APP_PORT", "8080"))
13
- app_reload = str_to_boolean(os.getenv("APP_RELOAD", "true"))
14
- app_max_not_ready = int(os.getenv("APP_MAX_NOT_READY", "10"))
9
+ APP_NAME = os.getenv("APP_NAME", "app")
10
+ APP_BRAND = os.getenv("PUBLIC_BRAND", "PascalZrbAppName")
11
+ APP_TITLE = os.getenv("PUBLIC_TITLE", "PascalZrbAppName")
15
12
 
16
- app_enable_otel = str_to_boolean(os.getenv("APP_ENABLE_OTEL", "false"))
17
- app_otel_exporter_otlp_endpoint = os.getenv(
13
+ APP_LOGGING_LEVEL = str_to_logging_level(os.getenv("APP_LOGGING_LEVEL", "INFO"))
14
+ APP_HOST = os.getenv("APP_HOST", "0.0.0.0")
15
+ APP_PORT = int(os.getenv("APP_PORT", "8080"))
16
+ APP_RELOAD = str_to_boolean(os.getenv("APP_RELOAD", "true"))
17
+ APP_MAX_NOT_READY = int(os.getenv("APP_MAX_NOT_READY", "10"))
18
+
19
+ APP_ENABLE_OTEL = str_to_boolean(os.getenv("APP_ENABLE_OTEL", "false"))
20
+ APP_OTEL_EXPORTER_OTLP_ENDPOINT = os.getenv(
18
21
  "APP_OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"
19
22
  )
20
23
 
21
- app_auth_access_token_cookie_key = os.getenv(
22
- "PUBLIC_AUTH_ACCESS_TOKEN_COOKIE_KEY", "access_token"
24
+ APP_AUTH_ACCESS_TOKEN_COOKIE_KEY = os.getenv(
25
+ "APP_AUTH_ACCESS_TOKEN_COOKIE_KEY", "access_token"
23
26
  )
24
- app_auth_refresh_token_cookie_key = os.getenv(
25
- "PUBLIC_AUTH_REFRESH_TOKEN_COOKIE_KEY", "refresh_token"
27
+ APP_AUTH_REFRESH_TOKEN_COOKIE_KEY = os.getenv(
28
+ "APP_AUTH_REFRESH_TOKEN_COOKIE_KEY", "refresh_token"
26
29
  )
27
30
 
28
- app_auth_access_token_type = os.getenv("APP_AUTH_ACCESS_TOKEN_TYPE", "jwt")
29
- app_auth_access_token_expire_seconds = int(
31
+ APP_AUTH_ACCESS_TOKEN_TYPE = os.getenv("APP_AUTH_ACCESS_TOKEN_TYPE", "jwt")
32
+ APP_AUTH_ACCESS_TOKEN_EXPIRE_SECONDS = int(
30
33
  os.getenv("APP_AUTH_ACCESS_TOKEN_EXPIRE_SECONDS", "300")
31
34
  )
32
- app_auth_refresh_token_type = os.getenv("APP_AUTH_REFRESH_TOKEN_TYPE", "jwt")
33
- app_auth_refresh_token_expire_seconds = int(
35
+ APP_AUTH_REFRESH_TOKEN_TYPE = os.getenv("APP_AUTH_REFRESH_TOKEN_TYPE", "jwt")
36
+ APP_AUTH_REFRESH_TOKEN_EXPIRE_SECONDS = int(
34
37
  os.getenv("APP_AUTH_REFRESH_TOKEN_EXPIRE_SECONDS", "86400")
35
38
  )
36
- app_auth_jwt_token_secret_key = os.getenv("APP_AUTH_JWT_TOKEN_SECRET_KEY", "secret")
37
- app_auth_jwt_token_algorithm = os.getenv("APP_AUTH_JWT_TOKEN_ALGORITHM", "HS256")
39
+ APP_AUTH_JWT_TOKEN_SECRET_KEY = os.getenv("APP_AUTH_JWT_TOKEN_SECRET_KEY", "secret")
40
+ APP_AUTH_JWT_TOKEN_ALGORITHM = os.getenv("APP_AUTH_JWT_TOKEN_ALGORITHM", "HS256")
41
+
42
+ APP_AUTH_ADMIN_ACTIVE = str_to_boolean(os.getenv("APP_AUTH_ADMIN_ACTIVE", "true"))
43
+ APP_AUTH_ADMIN_USER_ID = os.getenv("APP_AUTH_ADMIN_USER_ID", "root")
44
+ APP_AUTH_ADMIN_USERNAME = os.getenv("APP_AUTH_ADMIN_USERNAME", "admin")
45
+ APP_AUTH_ADMIN_PASSWORD = os.getenv("APP_AUTH_ADMIN_PASSWORD", "admin")
46
+ APP_AUTH_ADMIN_EMAIL = os.getenv("APP_AUTH_ADMIN_EMAIL", "")
47
+ APP_AUTH_ADMIN_PHONE = os.getenv("APP_AUTH_ADMIN_PHONE", "")
48
+ APP_AUTH_GUEST_USER_ID = os.getenv("APP_AUTH_GUEST_USER_ID", "guest")
49
+ APP_AUTH_GUEST_USERNAME = os.getenv("APP_AUTH_GUEST_USERNAME", "guest")
50
+ APP_AUTH_GUEST_EMAIL = os.getenv("APP_AUTH_GUEST_EMAIL", "")
51
+ APP_AUTH_GUEST_PHONE = os.getenv("APP_AUTH_GUEST_PHONE", "")
38
52
 
39
- app_auth_admin_active = str_to_boolean(os.getenv("APP_AUTH_ADMIN_ACTIVE", "true"))
40
- app_auth_admin_user_id = os.getenv("APP_AUTH_ADMIN_USER_ID", "root")
41
- app_auth_admin_username = os.getenv("APP_AUTH_ADMIN_USERNAME", "admin")
42
- app_auth_admin_password = os.getenv("APP_AUTH_ADMIN_PASSWORD", "admin")
43
- app_auth_admin_email = os.getenv("APP_AUTH_ADMIN_EMAIL", "")
44
- app_auth_admin_phone = os.getenv("APP_AUTH_ADMIN_PHONE", "")
45
- app_auth_guest_user_id = os.getenv("APP_AUTH_GUEST_USER_ID", "guest")
46
- app_auth_guest_username = os.getenv("APP_AUTH_GUEST_USERNAME", "guest")
47
- app_auth_guest_email = os.getenv("APP_AUTH_GUEST_EMAIL", "")
48
- app_auth_guest_phone = os.getenv("APP_AUTH_GUEST_PHONE", "")
53
+ APP_DB_CONNECTION = os.getenv("APP_DB_CONNECTION", "sqlite://")
54
+ APP_DB_ENGINE_SHOW_LOG = str_to_boolean(os.getenv("APP_DB_ENGINE_SHOW_LOG", "false"))
55
+ APP_DB_AUTO_MIGRATE = str_to_boolean(os.getenv("APP_DB_AUTO_MIGRATE", "true"))
56
+ APP_DB_POOL_PRE_PING = str_to_boolean(os.getenv("APP_DB_POOL_PRE_PING", "true"))
57
+ APP_DB_POOL_SIZE = int(os.getenv("APP_DB_POOL_SIZE", "20"))
58
+ APP_DB_POOL_MAX_OVERFLOW = int(os.getenv("APP_DB_POOL_MAX_OVERFLOW", "0"))
49
59
 
50
- app_db_connection = os.getenv("APP_DB_CONNECTION", "sqlite://")
51
- app_db_engine_show_log = str_to_boolean(os.getenv("APP_DB_ENGINE_SHOW_LOG", "false"))
52
- app_db_auto_migrate = str_to_boolean(os.getenv("APP_DB_AUTO_MIGRATE", "true"))
53
60
 
54
- app_broker_type = os.getenv("APP_BROKER_TYPE", "mock")
61
+ APP_BROKER_TYPE = os.getenv("APP_BROKER_TYPE", "mock")
55
62
 
56
- app_enable_rpc_server: bool = str_to_boolean(os.getenv("APP_ENABLE_RPC_SERVER", "true"))
63
+ APP_ENABLE_RPC_SERVER: bool = str_to_boolean(os.getenv("APP_ENABLE_RPC_SERVER", "true"))
57
64
 
58
- app_enable_event_handler: bool = str_to_boolean(
65
+ APP_ENABLE_EVENT_HANDLER: bool = str_to_boolean(
59
66
  os.getenv("APP_ENABLE_EVENT_HANDLER", "true")
60
67
  )
61
68
 
62
- app_enable_frontend: bool = str_to_boolean(os.getenv("APP_ENABLE_FRONTEND", "true"))
69
+ APP_ENABLE_FRONTEND: bool = str_to_boolean(os.getenv("APP_ENABLE_FRONTEND", "true"))
63
70
 
64
- app_enable_api: bool = str_to_boolean(os.getenv("APP_ENABLE_API", "true"))
71
+ APP_ENABLE_API: bool = str_to_boolean(os.getenv("APP_ENABLE_API", "true"))
65
72
 
66
- app_rmq_connection_string = os.getenv(
73
+ APP_RMQ_CONNECTION_STRING = os.getenv(
67
74
  "APP_RMQ_CONNECTION", "amqp://guest:guest@localhost/"
68
75
  )
69
76
 
70
- app_kafka_bootstrap_servers = os.getenv("APP_KAFKA_BOOTSTRAP_SERVERS", "localhost:9092")
71
- app_kafka_security_protocol = os.getenv("APP_KAFKA_SECURITY_PROTOCOL", "PLAINTEXT")
72
- app_kafka_sasl_mechanism = os.getenv("APP_KAFKA_SASL_MECHANISM", "SCRAM-SHA-512")
73
- app_kafka_sasl_user = os.getenv("APP_KAFKA_SASL_USER", "admin")
74
- app_kafka_sasl_pass = os.getenv("APP_KAFKA_SASL_PASS", "admin")
77
+ APP_KAFKA_BOOTSTRAP_SERVERS = os.getenv("APP_KAFKA_BOOTSTRAP_SERVERS", "localhost:9092")
78
+ APP_KAFKA_SECURITY_PROTOCOL = os.getenv("APP_KAFKA_SECURITY_PROTOCOL", "PLAINTEXT")
79
+ APP_KAFKA_SASL_MECHANISM = os.getenv("APP_KAFKA_SASL_MECHANISM", "SCRAM-SHA-512")
80
+ APP_KAFKA_SASL_USER = os.getenv("APP_KAFKA_SASL_USER", "admin")
81
+ APP_KAFKA_SASL_PASS = os.getenv("APP_KAFKA_SASL_PASS", "admin")
75
82
 
76
- app_cors_allow_origins: List[str] = json.loads(
83
+ APP_CORS_ALLOW_ORIGINS: List[str] = json.loads(
77
84
  os.getenv("APP_CORS_ALLOW_ORIGINS", '["*"]')
78
85
  )
79
- app_cors_allow_origin_regex: str = os.getenv("APP_CORS_ALLOW_ORIGIN_REGEX", "")
80
- app_cors_allow_methods: List[str] = json.loads(
86
+ APP_CORS_ALLOW_ORIGIN_REGEX: str = os.getenv("APP_CORS_ALLOW_ORIGIN_REGEX", "")
87
+ APP_CORS_ALLOW_METHODS: List[str] = json.loads(
81
88
  os.getenv("APP_CORS_ALLOW_METHODS", '["*"]')
82
89
  )
83
- app_cors_allow_headers: List[str] = json.loads(
90
+ APP_CORS_ALLOW_HEADERS: List[str] = json.loads(
84
91
  os.getenv("APP_CORS_ALLOW_HEADERS", '["*"]')
85
92
  )
86
- app_cors_allow_credentials: bool = str_to_boolean(
93
+ APP_CORS_ALLOW_CREDENTIALS: bool = str_to_boolean(
87
94
  os.getenv("APP_CORS_ALLOW_CREDENTIALS", "false")
88
95
  )
89
- app_cors_expose_headers: bool = str_to_boolean(
96
+ APP_CORS_EXPOSE_HEADERS: bool = str_to_boolean(
90
97
  os.getenv("APP_CORS_EXPOSE_HEADERS", "false")
91
98
  )
92
- app_cors_max_age: int = int(os.getenv("APP_CORS_MAX_AGE", "600"))
93
- app_enable_auth_module = str_to_boolean(os.getenv("APP_ENABLE_AUTH_MODULE", "true"))
94
- app_enable_log_module = str_to_boolean(os.getenv("APP_ENABLE_LOG_MODULE", "true"))
95
-
96
- public_brand = os.getenv("PUBLIC_BRAND", "PascalZrbAppName")
97
- public_title = os.getenv("PUBLIC_TITLE", "PascalZrbAppName")
98
- public_auth_access_token_cookie_key = os.getenv(
99
- "PUBLIC_AUTH_ACCESS_TOKEN_COOKIE_KEY", "access_token"
100
- )
101
- public_auth_refresh_token_cookie_key = os.getenv(
102
- "PUBLIC_AUTH_REFRESH_TOKEN_COOKIE_KEY", "refresh_token"
103
- )
99
+ APP_CORS_MAX_AGE: int = int(os.getenv("APP_CORS_MAX_AGE", "600"))
100
+ APP_ENABLE_AUTH_MODULE = str_to_boolean(os.getenv("APP_ENABLE_AUTH_MODULE", "true"))
101
+ APP_ENABLE_LOG_MODULE = str_to_boolean(os.getenv("APP_ENABLE_LOG_MODULE", "true"))
@@ -1,17 +1,17 @@
1
1
  from config import (
2
- app_cors_allow_credentials,
3
- app_cors_allow_headers,
4
- app_cors_allow_methods,
5
- app_cors_allow_origin_regex,
6
- app_cors_allow_origins,
7
- app_cors_expose_headers,
8
- app_cors_max_age,
9
- app_enable_frontend,
10
- public_auth_access_token_cookie_key,
11
- public_auth_refresh_token_cookie_key,
12
- public_brand,
13
- public_title,
14
- zrb_app_name,
2
+ APP_AUTH_ACCESS_TOKEN_COOKIE_KEY,
3
+ APP_AUTH_REFRESH_TOKEN_COOKIE_KEY,
4
+ APP_BRAND,
5
+ APP_CORS_ALLOW_CREDENTIALS,
6
+ APP_CORS_ALLOW_HEADERS,
7
+ APP_CORS_ALLOW_METHODS,
8
+ APP_CORS_ALLOW_ORIGIN_REGEX,
9
+ APP_CORS_ALLOW_ORIGINS,
10
+ APP_CORS_EXPOSE_HEADERS,
11
+ APP_CORS_MAX_AGE,
12
+ APP_ENABLE_FRONTEND,
13
+ APP_NAME,
14
+ APP_TITLE,
15
15
  )
16
16
  from fastapi import FastAPI, status
17
17
  from fastapi.middleware.cors import CORSMiddleware
@@ -21,9 +21,9 @@ from integration.app.app_state import app_state
21
21
  from integration.frontend_index import frontend_index_response
22
22
  from schema.frontend_config import FrontendConfig
23
23
 
24
- app = FastAPI(title=zrb_app_name, lifespan=app_lifespan)
24
+ app = FastAPI(title=APP_NAME, lifespan=app_lifespan)
25
25
 
26
- if app_enable_frontend:
26
+ if APP_ENABLE_FRONTEND:
27
27
 
28
28
  @app.middleware("http")
29
29
  async def catch_all(request, call_next):
@@ -38,13 +38,13 @@ if app_enable_frontend:
38
38
 
39
39
  app.add_middleware(
40
40
  CORSMiddleware,
41
- allow_origins=app_cors_allow_origins,
42
- allow_origin_regex=app_cors_allow_origin_regex,
43
- allow_methods=app_cors_allow_methods,
44
- allow_headers=app_cors_allow_headers,
45
- allow_credentials=app_cors_allow_credentials,
46
- expose_headers=app_cors_expose_headers,
47
- max_age=app_cors_max_age,
41
+ allow_origins=APP_CORS_ALLOW_ORIGINS,
42
+ allow_origin_regex=APP_CORS_ALLOW_ORIGIN_REGEX,
43
+ allow_methods=APP_CORS_ALLOW_METHODS,
44
+ allow_headers=APP_CORS_ALLOW_HEADERS,
45
+ allow_credentials=APP_CORS_ALLOW_CREDENTIALS,
46
+ expose_headers=APP_CORS_EXPOSE_HEADERS,
47
+ max_age=APP_CORS_MAX_AGE,
48
48
  )
49
49
 
50
50
 
@@ -60,7 +60,7 @@ def get_application_liveness_status():
60
60
  """
61
61
  if app_state.get_liveness():
62
62
  return JSONResponse(
63
- content={"app": zrb_app_name, "alive": True}, status_code=status.HTTP_200_OK
63
+ content={"app": APP_NAME, "alive": True}, status_code=status.HTTP_200_OK
64
64
  )
65
65
  return JSONResponse(
66
66
  content={"message": "Service is not alive"},
@@ -81,7 +81,7 @@ def get_application_readiness_status():
81
81
  """
82
82
  if app_state.get_readiness():
83
83
  return JSONResponse(
84
- content={"app": zrb_app_name, "ready": True}, status_code=status.HTTP_200_OK
84
+ content={"app": APP_NAME, "ready": True}, status_code=status.HTTP_200_OK
85
85
  )
86
86
  return JSONResponse(
87
87
  content={"message": "Service is not ready"},
@@ -93,8 +93,8 @@ def get_application_readiness_status():
93
93
  @app.get("/api/v1/frontend/configs", response_model=FrontendConfig)
94
94
  def get_configs() -> FrontendConfig:
95
95
  return FrontendConfig(
96
- brand=public_brand,
97
- title=public_title,
98
- access_token_cookie_key=public_auth_access_token_cookie_key,
99
- refresh_token_cookie_key=public_auth_refresh_token_cookie_key,
96
+ brand=APP_BRAND,
97
+ title=APP_TITLE,
98
+ access_token_cookie_key=APP_AUTH_ACCESS_TOKEN_COOKIE_KEY,
99
+ refresh_token_cookie_key=APP_AUTH_REFRESH_TOKEN_COOKIE_KEY,
100
100
  )
@@ -2,12 +2,12 @@ import os
2
2
  from contextlib import asynccontextmanager
3
3
 
4
4
  from config import (
5
- app_db_auto_migrate,
6
- app_enable_event_handler,
7
- app_enable_frontend,
8
- app_enable_rpc_server,
9
- app_src_dir,
10
- zrb_app_name,
5
+ APP_DB_AUTO_MIGRATE,
6
+ APP_ENABLE_EVENT_HANDLER,
7
+ APP_ENABLE_FRONTEND,
8
+ APP_ENABLE_RPC_SERVER,
9
+ APP_NAME,
10
+ APP_SRC_DIR,
11
11
  )
12
12
  from fastapi import FastAPI
13
13
  from fastapi.staticfiles import StaticFiles
@@ -21,24 +21,24 @@ from migrate import migrate
21
21
 
22
22
  @asynccontextmanager
23
23
  async def app_lifespan(app: FastAPI):
24
- logger.info(f"{zrb_app_name} started")
25
- if app_db_auto_migrate:
24
+ logger.info(f"{APP_NAME} started")
25
+ if APP_DB_AUTO_MIGRATE:
26
26
  await migrate()
27
27
  app_state.set_liveness(True)
28
- if app_enable_event_handler:
28
+ if APP_ENABLE_EVENT_HANDLER:
29
29
  create_task(consumer.start(), on_error=set_not_ready_on_error)
30
- if app_enable_rpc_server:
30
+ if APP_ENABLE_RPC_SERVER:
31
31
  create_task(rpc_server.start(), on_error=set_not_ready_on_error)
32
- if app_enable_frontend:
33
- build_path = os.path.join(app_src_dir, "frontend", "build")
32
+ if APP_ENABLE_FRONTEND:
33
+ build_path = os.path.join(APP_SRC_DIR, "frontend", "build")
34
34
  app.mount(
35
35
  path="",
36
36
  app=StaticFiles(directory=build_path, html=True),
37
37
  name="frontend-static-resources",
38
38
  )
39
39
  app_state.set_readiness(True)
40
- logger.info(f"{zrb_app_name} started")
40
+ logger.info(f"{APP_NAME} started")
41
41
  yield
42
- if app_enable_event_handler:
42
+ if APP_ENABLE_EVENT_HANDLER:
43
43
  await consumer.stop()
44
- logger.info(f"{zrb_app_name} closed")
44
+ logger.info(f"{APP_NAME} closed")
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from config import app_max_not_ready
3
+ from config import APP_MAX_NOT_READY
4
4
  from integration.log import logger
5
5
 
6
6
 
@@ -35,5 +35,5 @@ app_state = AppState()
35
35
  async def set_not_ready_on_error(exception: Exception):
36
36
  logger.critical(exception)
37
37
  app_state.set_readiness(False)
38
- await asyncio.sleep(app_max_not_ready)
38
+ await asyncio.sleep(APP_MAX_NOT_READY)
39
39
  app_state.set_liveness(False)
@@ -1,6 +1,12 @@
1
1
  import time
2
2
 
3
- from config import app_db_connection, app_db_engine_show_log
3
+ from config import (
4
+ APP_DB_CONNECTION,
5
+ APP_DB_ENGINE_SHOW_LOG,
6
+ APP_DB_POOL_MAX_OVERFLOW,
7
+ APP_DB_POOL_PRE_PING,
8
+ APP_DB_POOL_SIZE,
9
+ )
4
10
  from integration.log import logger
5
11
  from sqlalchemy import Engine, create_engine, event
6
12
 
@@ -27,4 +33,10 @@ def after_cursor_execute(conn, cursor, statement, parameters, context, executema
27
33
  )
28
34
 
29
35
 
30
- engine: Engine = create_engine(app_db_connection, echo=app_db_engine_show_log)
36
+ engine: Engine = create_engine(
37
+ APP_DB_CONNECTION,
38
+ echo=APP_DB_ENGINE_SHOW_LOG,
39
+ pool_pre_ping=APP_DB_POOL_PRE_PING,
40
+ pool_size=APP_DB_POOL_SIZE,
41
+ max_identifier_length=APP_DB_POOL_MAX_OVERFLOW,
42
+ )
@@ -1,9 +1,9 @@
1
1
  import os
2
2
 
3
- from config import app_src_dir
3
+ from config import APP_SRC_DIR
4
4
  from fastapi.responses import HTMLResponse
5
5
 
6
- index_html_path = os.path.join(app_src_dir, "frontend", "build", "index.html")
6
+ index_html_path = os.path.join(APP_SRC_DIR, "frontend", "build", "index.html")
7
7
  with open(index_html_path, "r") as f:
8
8
  index_html_content = f.read()
9
9