zrb 0.24.0__py3-none-any.whl → 0.24.1__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.
- zrb/action/runner.py +6 -5
- zrb/advertisement.py +1 -2
- zrb/builtin/base64/decode.py +1 -1
- zrb/builtin/base64/encode.py +1 -1
- zrb/builtin/devtool/install/_helper.py +2 -1
- zrb/builtin/env/get.py +3 -2
- zrb/builtin/eval.py +2 -1
- zrb/builtin/git/get_file_changes.py +2 -1
- zrb/builtin/md5/hash.py +1 -1
- zrb/builtin/md5/sum.py +1 -1
- zrb/builtin/project/_helper.py +3 -3
- zrb/builtin/project/add/app/generator/generator.py +1 -1
- 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
- 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
- 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
- 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
- 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
- zrb/builtin/project/add/app/python/python.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
- zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/fastapp/app/app.py +3 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +3 -4
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +1 -1
- zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
- zrb/builtin/project/add/fastapp/crud/crud.py +1 -1
- 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
- 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
- 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
- zrb/builtin/project/add/fastapp/field/field.py +1 -1
- zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +7 -8
- zrb/builtin/project/add/fastapp/module/module.py +1 -1
- zrb/builtin/project/add/plugin/plugin.py +1 -1
- zrb/builtin/project/add/project_task/add.py +1 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
- zrb/builtin/project/add/task/cmd/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/task/python/add.py +1 -1
- zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
- zrb/builtin/project/create/_helper.py +1 -1
- zrb/builtin/project/create/create.py +1 -1
- zrb/builtin/say.py +3 -3
- zrb/builtin/version.py +2 -1
- zrb/helper/accessories/color.py +2 -1
- zrb/helper/advertisement.py +2 -1
- zrb/helper/callable.py +2 -1
- zrb/helper/codemod/add_import_module.py +3 -2
- zrb/helper/codemod/add_property_to_class.py +2 -1
- zrb/helper/default_env.py +2 -1
- zrb/helper/docker_compose/fetch_external_env.py +4 -2
- zrb/helper/docker_compose/file.py +3 -1
- zrb/helper/env_map/fetch.py +3 -2
- zrb/helper/file/copy_tree.py +2 -1
- zrb/helper/file/match.py +2 -2
- zrb/helper/git/detect_changes.py +1 -1
- zrb/helper/map/conversion.py +3 -1
- zrb/helper/string/jinja.py +2 -1
- zrb/helper/string/parse_replacement.py +1 -1
- zrb/helper/typing.py +5 -27
- zrb/helper/util.py +1 -1
- zrb/task/any_task.py +9 -17
- zrb/task/any_task_event_handler.py +3 -1
- zrb/task/base_remote_cmd_task.py +3 -10
- zrb/task/base_task/base_task.py +9 -8
- zrb/task/base_task/component/base_task_model.py +6 -13
- zrb/task/base_task/component/common_task_model.py +15 -22
- zrb/task/base_task/component/renderer.py +3 -1
- zrb/task/base_task/component/trackers.py +1 -1
- zrb/task/checker.py +2 -1
- zrb/task/cmd_task.py +4 -11
- zrb/task/decorator.py +3 -1
- zrb/task/docker_compose_start_task.py +27 -32
- zrb/task/docker_compose_task.py +27 -35
- zrb/task/flow_task.py +19 -17
- zrb/task/http_checker.py +3 -9
- zrb/task/looper.py +4 -2
- zrb/task/notifier.py +3 -1
- zrb/task/parallel.py +4 -4
- zrb/task/path_checker.py +6 -12
- zrb/task/path_watcher.py +5 -13
- zrb/task/port_checker.py +3 -9
- zrb/task/recurring_task.py +5 -4
- zrb/task/remote_cmd_task.py +2 -1
- zrb/task/resource_maker.py +6 -13
- zrb/task/rsync_task.py +3 -1
- zrb/task/server.py +13 -12
- zrb/task/time_watcher.py +3 -10
- zrb/task/watcher.py +2 -1
- zrb/task/wiki_task.py +4 -3
- zrb/task_env/env.py +2 -1
- zrb/task_env/env_file.py +7 -6
- zrb/task_group/group.py +8 -7
- zrb/task_input/any_input.py +4 -3
- zrb/task_input/base_input.py +5 -3
- zrb/task_input/bool_input.py +2 -1
- zrb/task_input/choice_input.py +3 -1
- zrb/task_input/float_input.py +2 -1
- zrb/task_input/int_input.py +2 -1
- zrb/task_input/multiline_input.py +3 -1
- zrb/task_input/password_input.py +2 -1
- zrb/task_input/str_input.py +2 -1
- {zrb-0.24.0.dist-info → zrb-0.24.1.dist-info}/METADATA +1 -1
- {zrb-0.24.0.dist-info → zrb-0.24.1.dist-info}/RECORD +169 -168
- {zrb-0.24.0.dist-info → zrb-0.24.1.dist-info}/LICENSE +0 -0
- {zrb-0.24.0.dist-info → zrb-0.24.1.dist-info}/WHEEL +0 -0
- {zrb-0.24.0.dist-info → zrb-0.24.1.dist-info}/entry_points.txt +0 -0
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
import asyncio
|
2
2
|
import inspect
|
3
3
|
import logging
|
4
|
-
from
|
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:
|
63
|
+
async def create_events(self, event_names: list[str]):
|
63
64
|
return
|
64
65
|
|
65
|
-
async def delete_events(self, event_names:
|
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
|
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:
|
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:
|
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
|
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}]
|
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,
|
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) ->
|
21
|
+
async def get_all(self) -> list[Schema]:
|
22
22
|
count = await self.repo.count()
|
23
23
|
limit = 1000
|
24
|
-
schema_list:
|
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
|
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import logging
|
2
|
-
from
|
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:
|
32
|
-
self._keyword_fields: Optional[
|
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
|
-
) ->
|
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
|
-
) ->
|
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) ->
|
249
|
+
def _get_keyword_fields(self) -> list[InstrumentedAttribute]:
|
249
250
|
"""
|
250
251
|
Return list of fields for keyword filtering
|
251
252
|
"""
|
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
|
-
from typing import Generic,
|
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
|
-
) ->
|
19
|
+
) -> list[Schema]:
|
20
20
|
pass
|
21
21
|
|
22
22
|
@abstractmethod
|
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
|
-
from
|
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:
|
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,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:
|
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:
|
86
|
+
APP_CORS_ALLOW_METHODS: list[str] = json.loads(
|
88
87
|
os.getenv("APP_CORS_ALLOW_METHODS", '["*"]')
|
89
88
|
)
|
90
|
-
APP_CORS_ALLOW_HEADERS:
|
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(
|
@@ -1,4 +1,5 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Mapping
|
2
|
+
from typing import Optional
|
2
3
|
|
3
4
|
from component.messagebus.messagebus import Publisher
|
4
5
|
from module.auth.component import AccessTokenUtil, RefreshTokenUtil
|
@@ -81,7 +82,7 @@ class UserModel(HistoricalRepoModel[User, UserData, UserResult]):
|
|
81
82
|
for permission_name in permission_names
|
82
83
|
}
|
83
84
|
|
84
|
-
def _get_permission_names(self, user: User) ->
|
85
|
+
def _get_permission_names(self, user: User) -> list[str]:
|
85
86
|
permission_names = [permission.name for permission in user.permissions]
|
86
87
|
for group in user.groups:
|
87
88
|
additional_permission_names = [
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import logging
|
2
2
|
from abc import ABC, abstractmethod
|
3
|
-
from
|
3
|
+
from collections.abc import Mapping
|
4
|
+
from typing import Any
|
4
5
|
|
5
6
|
from component.repo import DBEntityMixin, DBRepo, Repo
|
6
7
|
from module.auth.component import PasswordHasher
|
@@ -46,7 +47,7 @@ class UserDBRepo(DBRepo[User, UserData], UserRepo):
|
|
46
47
|
|
47
48
|
async def get_by_user_login(self, user_login: UserLogin) -> User:
|
48
49
|
db = self._get_db_session()
|
49
|
-
db_users:
|
50
|
+
db_users: list[DBEntityUser] = []
|
50
51
|
try:
|
51
52
|
search_filter = or_(
|
52
53
|
DBEntityUser.username == user_login.identity,
|
@@ -1,5 +1,6 @@
|
|
1
|
+
from collections.abc import Mapping
|
1
2
|
from logging import Logger
|
2
|
-
from typing import Any,
|
3
|
+
from typing import Any, Union
|
3
4
|
|
4
5
|
from component.messagebus import Publisher
|
5
6
|
from component.repo import SearchFilter
|
@@ -30,7 +31,7 @@ def register_rpc(
|
|
30
31
|
|
31
32
|
@rpc_server.register("auth_is_user_authorized")
|
32
33
|
async def is_user_having_permission(
|
33
|
-
id: str, permission_name: Union[str,
|
34
|
+
id: str, permission_name: Union[str, list[str]]
|
34
35
|
) -> Mapping[str, bool]:
|
35
36
|
"""
|
36
37
|
Used by RPC Authenticator
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import
|
1
|
+
from typing import Optional
|
2
2
|
|
3
3
|
from module.auth.integration.model.permission_model import permission_model
|
4
4
|
from module.auth.schema.permission import PermissionData
|
@@ -14,7 +14,7 @@ ACTION_DESCRIPTION = {
|
|
14
14
|
|
15
15
|
|
16
16
|
async def ensure_entity_permission(
|
17
|
-
module_name: str, entity_name: str, action_names: Optional[
|
17
|
+
module_name: str, entity_name: str, action_names: Optional[list[str]] = None
|
18
18
|
):
|
19
19
|
if action_names is None:
|
20
20
|
action_names = DEFAULT_ACTION_NAMES
|
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
1
|
from component.schema import BaseCountSchema, BaseDateTimeSchema
|
4
2
|
from module.auth.schema.permission import Permission
|
5
3
|
|
@@ -10,7 +8,7 @@ class GroupBase(BaseDateTimeSchema):
|
|
10
8
|
|
11
9
|
|
12
10
|
class GroupData(GroupBase):
|
13
|
-
permissions:
|
11
|
+
permissions: list[str]
|
14
12
|
|
15
13
|
|
16
14
|
class Group(GroupBase):
|
@@ -18,8 +16,8 @@ class Group(GroupBase):
|
|
18
16
|
from_attributes = True
|
19
17
|
|
20
18
|
id: str
|
21
|
-
permissions:
|
19
|
+
permissions: list[Permission] = []
|
22
20
|
|
23
21
|
|
24
22
|
class GroupResult(BaseCountSchema):
|
25
|
-
data:
|
23
|
+
data: list[Group]
|
zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
1
|
from component.schema import BaseCountSchema, BaseDateTimeSchema
|
4
2
|
from module.auth.schema.group import Group
|
5
3
|
from module.auth.schema.permission import Permission
|
@@ -11,8 +9,8 @@ class UserBase(BaseDateTimeSchema):
|
|
11
9
|
phone: str
|
12
10
|
email: str
|
13
11
|
description: str
|
14
|
-
groups:
|
15
|
-
permissions:
|
12
|
+
groups: list[str]
|
13
|
+
permissions: list[str]
|
16
14
|
|
17
15
|
|
18
16
|
class UserData(UserBase):
|
@@ -21,15 +19,15 @@ class UserData(UserBase):
|
|
21
19
|
|
22
20
|
class User(UserBase):
|
23
21
|
id: str
|
24
|
-
permissions:
|
25
|
-
groups:
|
22
|
+
permissions: list[Permission] = []
|
23
|
+
groups: list[Group] = []
|
26
24
|
|
27
25
|
class Config:
|
28
26
|
from_attributes = True
|
29
27
|
|
30
28
|
|
31
29
|
class UserResult(BaseCountSchema):
|
32
|
-
data:
|
30
|
+
data: list[User]
|
33
31
|
|
34
32
|
|
35
33
|
class UserLogin(BaseModel):
|
@@ -5,7 +5,6 @@ from zrb.builtin.project.add.fastapp.app._input import app_name_input
|
|
5
5
|
from zrb.builtin.project.add.fastapp.crud._input import entity_name_input
|
6
6
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
7
7
|
from zrb.helper.typecheck import typechecked
|
8
|
-
from zrb.helper.typing import List
|
9
8
|
from zrb.task.any_task import AnyTask
|
10
9
|
from zrb.task.cmd_task import CmdTask
|
11
10
|
|
@@ -20,7 +19,7 @@ _NAV_PERMISSION = "{{util.to_snake_case(input.module_name)}}:{{util.to_snake_cas
|
|
20
19
|
|
21
20
|
|
22
21
|
@typechecked
|
23
|
-
def create_add_navigation_task(upstreams:
|
22
|
+
def create_add_navigation_task(upstreams: list[AnyTask]) -> AnyTask:
|
24
23
|
return CmdTask(
|
25
24
|
name="add-navigation",
|
26
25
|
inputs=[
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
import os
|
3
|
+
from typing import Any
|
3
4
|
|
4
5
|
from zrb.builtin.project._helper import validate_existing_project_dir
|
5
6
|
from zrb.builtin.project._input import project_dir_input
|
@@ -21,7 +22,6 @@ from zrb.builtin.project.add.fastapp.crud._task_factory import (
|
|
21
22
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
22
23
|
from zrb.helper import util
|
23
24
|
from zrb.helper.accessories.color import colored
|
24
|
-
from zrb.helper.typing import Any
|
25
25
|
from zrb.runner import runner
|
26
26
|
from zrb.task.cmd_task import CmdTask
|
27
27
|
from zrb.task.decorator import python_task
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from datetime import date, datetime, time
|
2
|
-
from typing import
|
2
|
+
from typing import Optional
|
3
3
|
|
4
4
|
from component.schema import BaseCountSchema, BaseDateTimeSchema
|
5
5
|
|
@@ -16,4 +16,4 @@ class PascalZrbEntityName(PascalZrbEntityNameData):
|
|
16
16
|
|
17
17
|
|
18
18
|
class PascalZrbEntityNameResult(BaseCountSchema):
|
19
|
-
data:
|
19
|
+
data: list[PascalZrbEntityName]
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
import os
|
3
|
+
from typing import Any
|
3
4
|
|
4
5
|
from zrb.builtin.project._helper import validate_existing_project_dir
|
5
6
|
from zrb.builtin.project._input import project_dir_input
|
@@ -23,7 +24,6 @@ from zrb.builtin.project.add.fastapp.field._input import (
|
|
23
24
|
from zrb.builtin.project.add.fastapp.module._input import module_name_input
|
24
25
|
from zrb.helper import util
|
25
26
|
from zrb.helper.accessories.color import colored
|
26
|
-
from zrb.helper.typing import Any
|
27
27
|
from zrb.runner import runner
|
28
28
|
from zrb.task.decorator import python_task
|
29
29
|
from zrb.task.task import Task
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
import os
|
3
|
+
from collections.abc import Mapping
|
4
|
+
from typing import Any
|
3
5
|
|
4
6
|
import jsons
|
5
7
|
from dotenv import dotenv_values
|
@@ -11,7 +13,6 @@ from zrb.helper.file.text import (
|
|
11
13
|
write_text_file_async,
|
12
14
|
)
|
13
15
|
from zrb.helper.typecheck import typechecked
|
14
|
-
from zrb.helper.typing import Any, List, Mapping
|
15
16
|
from zrb.helper.util import to_kebab_case, to_snake_case
|
16
17
|
from zrb.task.task import Task
|
17
18
|
|
@@ -37,7 +38,7 @@ async def create_microservice_config(
|
|
37
38
|
|
38
39
|
@typechecked
|
39
40
|
async def _add_docker_compose_service(
|
40
|
-
task: Task, modules:
|
41
|
+
task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
|
41
42
|
):
|
42
43
|
kebab_app_name = to_kebab_case(app_name)
|
43
44
|
snake_module_name = to_snake_case(module_name)
|
@@ -50,11 +51,9 @@ async def _add_docker_compose_service(
|
|
50
51
|
app_container_port_env_name = f"APP_{upper_snake_module_name}_MODULE_PORT"
|
51
52
|
app_container_port_env = (
|
52
53
|
"${" + app_container_port_env_name + ":-" + module_app_port_str + "}"
|
53
|
-
)
|
54
|
+
)
|
54
55
|
app_host_port_env_name = f"APP_{upper_snake_module_name}_HOST_MODULE_PORT"
|
55
|
-
app_host_port_env =
|
56
|
-
"${" + app_host_port_env_name + ":-" + module_app_port_str + "}"
|
57
|
-
) # noqa
|
56
|
+
app_host_port_env = "${" + app_host_port_env_name + ":-" + module_app_port_str + "}"
|
58
57
|
service_definition = _get_new_docker_compose_service_definition(
|
59
58
|
app_name=app_name,
|
60
59
|
module_name=module_name,
|
@@ -127,7 +126,7 @@ async def _create_automation_json_config(
|
|
127
126
|
task.print_out(f"Read json config from: {json_modules_file_path}")
|
128
127
|
json_str = await read_text_file_async(json_modules_file_path)
|
129
128
|
task.print_out(f'Add "{snake_module_name}" to json config')
|
130
|
-
modules:
|
129
|
+
modules: list[str] = jsons.loads(json_str)
|
131
130
|
modules.append(snake_module_name)
|
132
131
|
json_str = jsons.dumps(modules)
|
133
132
|
task.print_out(f"Write new json config to: {json_modules_file_path}")
|
@@ -137,7 +136,7 @@ async def _create_automation_json_config(
|
|
137
136
|
|
138
137
|
@typechecked
|
139
138
|
async def _append_compose_env(
|
140
|
-
task: Task, modules:
|
139
|
+
task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
|
141
140
|
):
|
142
141
|
kebab_app_name = to_kebab_case(app_name)
|
143
142
|
snake_module_name = to_snake_case(module_name)
|