aury-boot 0.0.5__py3-none-any.whl → 0.0.8__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.
- aury/boot/_version.py +2 -2
- aury/boot/application/__init__.py +15 -0
- aury/boot/application/adapter/__init__.py +112 -0
- aury/boot/application/adapter/base.py +511 -0
- aury/boot/application/adapter/config.py +242 -0
- aury/boot/application/adapter/decorators.py +259 -0
- aury/boot/application/adapter/exceptions.py +202 -0
- aury/boot/application/adapter/http.py +325 -0
- aury/boot/application/app/middlewares.py +7 -4
- aury/boot/application/config/multi_instance.py +42 -26
- aury/boot/application/config/settings.py +111 -191
- aury/boot/application/middleware/logging.py +14 -1
- aury/boot/commands/generate.py +22 -22
- aury/boot/commands/init.py +41 -9
- aury/boot/commands/templates/project/AGENTS.md.tpl +8 -4
- aury/boot/commands/templates/project/aury_docs/01-model.md.tpl +17 -16
- aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +82 -43
- aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl +14 -14
- aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +40 -28
- aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +9 -9
- aury/boot/commands/templates/project/aury_docs/15-events.md.tpl +8 -8
- aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +403 -0
- aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +19 -19
- aury/boot/commands/templates/project/config.py.tpl +10 -10
- aury/boot/commands/templates/project/env_templates/_header.tpl +10 -0
- aury/boot/commands/templates/project/env_templates/admin.tpl +49 -0
- aury/boot/commands/templates/project/env_templates/cache.tpl +14 -0
- aury/boot/commands/templates/project/env_templates/database.tpl +22 -0
- aury/boot/commands/templates/project/env_templates/log.tpl +18 -0
- aury/boot/commands/templates/project/env_templates/messaging.tpl +46 -0
- aury/boot/commands/templates/project/env_templates/rpc.tpl +28 -0
- aury/boot/commands/templates/project/env_templates/scheduler.tpl +18 -0
- aury/boot/commands/templates/project/env_templates/service.tpl +18 -0
- aury/boot/commands/templates/project/env_templates/storage.tpl +38 -0
- aury/boot/commands/templates/project/env_templates/third_party.tpl +43 -0
- aury/boot/common/logging/__init__.py +26 -674
- aury/boot/common/logging/context.py +132 -0
- aury/boot/common/logging/decorators.py +118 -0
- aury/boot/common/logging/format.py +315 -0
- aury/boot/common/logging/setup.py +214 -0
- aury/boot/infrastructure/database/config.py +6 -14
- aury/boot/infrastructure/tasks/config.py +5 -13
- aury/boot/infrastructure/tasks/manager.py +8 -4
- aury/boot/testing/base.py +2 -2
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.8.dist-info}/METADATA +2 -1
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.8.dist-info}/RECORD +48 -27
- aury/boot/commands/templates/project/env.example.tpl +0 -281
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.8.dist-info}/WHEEL +0 -0
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.8.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""日志配置和初始化。
|
|
2
|
+
|
|
3
|
+
提供 setup_logging 和 register_log_sink 功能。
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
from aury.boot.common.logging.context import (
|
|
14
|
+
ServiceContext,
|
|
15
|
+
_to_service_context,
|
|
16
|
+
get_service_context,
|
|
17
|
+
get_trace_id,
|
|
18
|
+
set_service_context,
|
|
19
|
+
)
|
|
20
|
+
from aury.boot.common.logging.format import create_console_sink, format_message
|
|
21
|
+
|
|
22
|
+
# 全局日志配置状态
|
|
23
|
+
_log_config: dict[str, Any] = {
|
|
24
|
+
"log_dir": "logs",
|
|
25
|
+
"rotation": "00:00",
|
|
26
|
+
"retention_days": 7,
|
|
27
|
+
"file_format": "",
|
|
28
|
+
"initialized": False,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def register_log_sink(
|
|
33
|
+
name: str,
|
|
34
|
+
*,
|
|
35
|
+
filter_key: str | None = None,
|
|
36
|
+
level: str = "INFO",
|
|
37
|
+
sink_format: str | None = None,
|
|
38
|
+
) -> None:
|
|
39
|
+
"""注册自定义日志 sink。
|
|
40
|
+
|
|
41
|
+
使用 logger.bind() 标记的日志会写入对应文件。
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
name: 日志文件名前缀(如 "access" -> access_2024-01-01.log)
|
|
45
|
+
filter_key: 过滤键名,日志需要 logger.bind(key=True) 才会写入
|
|
46
|
+
level: 日志级别
|
|
47
|
+
sink_format: 自定义格式(默认使用简化格式)
|
|
48
|
+
|
|
49
|
+
使用示例:
|
|
50
|
+
# 注册 access 日志
|
|
51
|
+
register_log_sink("access", filter_key="access")
|
|
52
|
+
|
|
53
|
+
# 写入 access 日志
|
|
54
|
+
logger.bind(access=True).info("GET /api/users 200 0.05s")
|
|
55
|
+
"""
|
|
56
|
+
if not _log_config["initialized"]:
|
|
57
|
+
raise RuntimeError("请先调用 setup_logging() 初始化日志系统")
|
|
58
|
+
|
|
59
|
+
log_dir = _log_config["log_dir"]
|
|
60
|
+
rotation = _log_config["rotation"]
|
|
61
|
+
retention_days = _log_config["retention_days"]
|
|
62
|
+
|
|
63
|
+
default_format = (
|
|
64
|
+
"{time:YYYY-MM-DD HH:mm:ss} | "
|
|
65
|
+
"{extra[trace_id]} | "
|
|
66
|
+
"{message}"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# 创建 filter
|
|
70
|
+
if filter_key:
|
|
71
|
+
def sink_filter(record, key=filter_key):
|
|
72
|
+
return record["extra"].get(key, False)
|
|
73
|
+
else:
|
|
74
|
+
sink_filter = None
|
|
75
|
+
|
|
76
|
+
logger.add(
|
|
77
|
+
os.path.join(log_dir, f"{name}_{{time:YYYY-MM-DD}}.log"),
|
|
78
|
+
rotation=rotation,
|
|
79
|
+
retention=f"{retention_days} days",
|
|
80
|
+
level=level,
|
|
81
|
+
format=sink_format or default_format,
|
|
82
|
+
encoding="utf-8",
|
|
83
|
+
enqueue=True,
|
|
84
|
+
delay=True,
|
|
85
|
+
filter=sink_filter,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
logger.debug(f"注册日志 sink: {name} (filter_key={filter_key})")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def setup_logging(
|
|
92
|
+
log_level: str = "INFO",
|
|
93
|
+
log_dir: str | None = None,
|
|
94
|
+
service_type: ServiceContext | str = ServiceContext.API,
|
|
95
|
+
enable_file_rotation: bool = True,
|
|
96
|
+
rotation_time: str = "00:00",
|
|
97
|
+
retention_days: int = 7,
|
|
98
|
+
rotation_size: str = "50 MB",
|
|
99
|
+
enable_console: bool = True,
|
|
100
|
+
) -> None:
|
|
101
|
+
"""设置日志配置。
|
|
102
|
+
|
|
103
|
+
日志文件按服务类型分离:
|
|
104
|
+
- {service_type}_info_{date}.log - INFO/WARNING/DEBUG 日志
|
|
105
|
+
- {service_type}_error_{date}.log - ERROR/CRITICAL 日志
|
|
106
|
+
|
|
107
|
+
轮转策略:
|
|
108
|
+
- 文件名包含日期,每天自动创建新文件
|
|
109
|
+
- 单文件超过大小限制时,会轮转产生 .1, .2 等后缀
|
|
110
|
+
|
|
111
|
+
可通过 register_log_sink() 注册额外的日志文件(如 access.log)。
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
log_level: 日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)
|
|
115
|
+
log_dir: 日志目录(默认:./logs)
|
|
116
|
+
service_type: 服务类型(app/scheduler/worker)
|
|
117
|
+
enable_file_rotation: 是否启用日志轮转
|
|
118
|
+
rotation_time: 每日轮转时间(默认:00:00)
|
|
119
|
+
retention_days: 日志保留天数(默认:7 天)
|
|
120
|
+
rotation_size: 单文件大小上限(默认:50 MB)
|
|
121
|
+
enable_console: 是否输出到控制台
|
|
122
|
+
"""
|
|
123
|
+
log_level = log_level.upper()
|
|
124
|
+
log_dir = log_dir or "logs"
|
|
125
|
+
os.makedirs(log_dir, exist_ok=True)
|
|
126
|
+
|
|
127
|
+
# 滚动策略:基于大小轮转(文件名已包含日期,每天自动新文件)
|
|
128
|
+
rotation = rotation_size if enable_file_rotation else None
|
|
129
|
+
|
|
130
|
+
# 标准化服务类型
|
|
131
|
+
service_type_enum = _to_service_context(service_type)
|
|
132
|
+
|
|
133
|
+
# 清理旧的 sink,避免重复日志(idempotent)
|
|
134
|
+
logger.remove()
|
|
135
|
+
|
|
136
|
+
# 保存全局配置(供 register_log_sink 使用)
|
|
137
|
+
_log_config.update({
|
|
138
|
+
"log_dir": log_dir,
|
|
139
|
+
"rotation": rotation,
|
|
140
|
+
"retention_days": retention_days,
|
|
141
|
+
"initialized": True,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
# 设置默认服务上下文
|
|
145
|
+
set_service_context(service_type_enum)
|
|
146
|
+
|
|
147
|
+
# 配置 patcher,确保每条日志都有 service 和 trace_id
|
|
148
|
+
logger.configure(patcher=lambda record: (
|
|
149
|
+
record["extra"].update({
|
|
150
|
+
"trace_id": get_trace_id(),
|
|
151
|
+
# 记录字符串值,便于过滤器比较
|
|
152
|
+
"service": get_service_context().value,
|
|
153
|
+
})
|
|
154
|
+
))
|
|
155
|
+
|
|
156
|
+
# 控制台输出(使用 Java 风格堆栈)
|
|
157
|
+
if enable_console:
|
|
158
|
+
logger.add(
|
|
159
|
+
create_console_sink(),
|
|
160
|
+
format="{message}", # 简单格式,避免解析 <module> 等函数名
|
|
161
|
+
level=log_level,
|
|
162
|
+
colorize=False, # 颜色在 sink 内处理
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
# 为 app 和 scheduler 分别创建日志文件(通过 ContextVar 区分)
|
|
166
|
+
# API 模式下会同时运行嵌入式 scheduler,需要两个文件
|
|
167
|
+
contexts_to_create: list[str] = [service_type_enum.value]
|
|
168
|
+
# API 模式下也需要 scheduler 日志文件
|
|
169
|
+
if service_type_enum is ServiceContext.API:
|
|
170
|
+
contexts_to_create.append(ServiceContext.SCHEDULER.value)
|
|
171
|
+
|
|
172
|
+
for ctx in contexts_to_create:
|
|
173
|
+
# INFO 级别文件(使用 Java 风格堆栈)
|
|
174
|
+
info_file = os.path.join(
|
|
175
|
+
log_dir,
|
|
176
|
+
f"{ctx}_info_{{time:YYYY-MM-DD}}.log" if enable_file_rotation else f"{ctx}_info.log"
|
|
177
|
+
)
|
|
178
|
+
logger.add(
|
|
179
|
+
info_file,
|
|
180
|
+
format=lambda record: format_message(record),
|
|
181
|
+
rotation=rotation,
|
|
182
|
+
retention=f"{retention_days} days",
|
|
183
|
+
level=log_level, # >= INFO 都写入(包含 WARNING/ERROR/CRITICAL)
|
|
184
|
+
encoding="utf-8",
|
|
185
|
+
enqueue=True,
|
|
186
|
+
filter=lambda record, c=ctx: (
|
|
187
|
+
record["extra"].get("service") == c
|
|
188
|
+
and not record["extra"].get("access", False)
|
|
189
|
+
),
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# ERROR 级别文件(使用 Java 风格堆栈)
|
|
193
|
+
error_file = os.path.join(
|
|
194
|
+
log_dir,
|
|
195
|
+
f"{ctx}_error_{{time:YYYY-MM-DD}}.log" if enable_file_rotation else f"{ctx}_error.log"
|
|
196
|
+
)
|
|
197
|
+
logger.add(
|
|
198
|
+
error_file,
|
|
199
|
+
format=lambda record: format_message(record),
|
|
200
|
+
rotation=rotation,
|
|
201
|
+
retention=f"{retention_days} days",
|
|
202
|
+
level="ERROR",
|
|
203
|
+
encoding="utf-8",
|
|
204
|
+
enqueue=True,
|
|
205
|
+
filter=lambda record, c=ctx: record["extra"].get("service") == c,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
logger.info(f"日志系统初始化完成 | 服务: {service_type} | 级别: {log_level} | 目录: {log_dir}")
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
__all__ = [
|
|
212
|
+
"register_log_sink",
|
|
213
|
+
"setup_logging",
|
|
214
|
+
]
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"""数据库配置。
|
|
2
2
|
|
|
3
|
-
Infrastructure
|
|
3
|
+
Infrastructure 层配置数据类,由 application 层传入。
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
from pydantic import Field
|
|
9
|
-
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
10
9
|
|
|
11
10
|
# 支持的事务隔离级别
|
|
12
11
|
ISOLATION_LEVELS = (
|
|
@@ -18,17 +17,15 @@ ISOLATION_LEVELS = (
|
|
|
18
17
|
)
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
class DatabaseConfig(
|
|
20
|
+
class DatabaseConfig(BaseModel):
|
|
22
21
|
"""数据库基础设施配置。
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
环境变量前缀: DATABASE_
|
|
27
|
-
示例: DATABASE_URL, DATABASE_ECHO, DATABASE_POOL_SIZE
|
|
23
|
+
纯数据类,由 application 层构造并传入 infrastructure 层。
|
|
24
|
+
不直接读取环境变量。
|
|
28
25
|
"""
|
|
29
26
|
|
|
30
27
|
url: str = Field(
|
|
31
|
-
description="数据库连接URL(支持所有 SQLAlchemy
|
|
28
|
+
description="数据库连接URL(支持所有 SQLAlchemy 支持的数据库)"
|
|
32
29
|
)
|
|
33
30
|
echo: bool = Field(
|
|
34
31
|
default=False,
|
|
@@ -54,11 +51,6 @@ class DatabaseConfig(BaseSettings):
|
|
|
54
51
|
default=None,
|
|
55
52
|
description="事务隔离级别: READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE / AUTOCOMMIT"
|
|
56
53
|
)
|
|
57
|
-
|
|
58
|
-
model_config = SettingsConfigDict(
|
|
59
|
-
env_prefix="DATABASE_",
|
|
60
|
-
case_sensitive=False,
|
|
61
|
-
)
|
|
62
54
|
|
|
63
55
|
|
|
64
56
|
__all__ = [
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
"""任务队列配置。
|
|
2
2
|
|
|
3
|
-
Infrastructure
|
|
3
|
+
Infrastructure 层配置数据类,由 application 层传入。
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
from pydantic import Field
|
|
9
|
-
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
class TaskConfig(
|
|
11
|
+
class TaskConfig(BaseModel):
|
|
13
12
|
"""任务队列基础设施配置。
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
环境变量前缀: TASK_
|
|
18
|
-
示例: TASK_BROKER_URL, TASK_MAX_RETRIES
|
|
14
|
+
纯数据类,由 application 层构造并传入 infrastructure 层。
|
|
15
|
+
不直接读取环境变量。
|
|
19
16
|
"""
|
|
20
17
|
|
|
21
18
|
broker_url: str = Field(
|
|
@@ -30,11 +27,6 @@ class TaskConfig(BaseSettings):
|
|
|
30
27
|
default=3600000,
|
|
31
28
|
description="任务执行时间限制(毫秒)"
|
|
32
29
|
)
|
|
33
|
-
|
|
34
|
-
model_config = SettingsConfigDict(
|
|
35
|
-
env_prefix="TASK_",
|
|
36
|
-
case_sensitive=False,
|
|
37
|
-
)
|
|
38
30
|
|
|
39
31
|
|
|
40
32
|
__all__ = [
|
|
@@ -226,8 +226,6 @@ class TaskManager:
|
|
|
226
226
|
logger.warning("任务管理器已初始化,跳过")
|
|
227
227
|
return self
|
|
228
228
|
|
|
229
|
-
self._task_config = task_config or TaskConfig()
|
|
230
|
-
|
|
231
229
|
# 处理 run_mode 参数
|
|
232
230
|
if run_mode is None:
|
|
233
231
|
self._run_mode = TaskRunMode.WORKER # 默认 Worker 模式(调度者)
|
|
@@ -240,8 +238,14 @@ class TaskManager:
|
|
|
240
238
|
else:
|
|
241
239
|
self._run_mode = run_mode
|
|
242
240
|
|
|
243
|
-
# 获取 broker URL(优先级:参数 >
|
|
244
|
-
url = broker_url or
|
|
241
|
+
# 获取 broker URL(优先级:参数 > 配置)
|
|
242
|
+
url = broker_url or (task_config.broker_url if task_config else None)
|
|
243
|
+
|
|
244
|
+
# 保存配置(如果没有传入,从 broker_url 构造)
|
|
245
|
+
if task_config:
|
|
246
|
+
self._task_config = task_config
|
|
247
|
+
elif url:
|
|
248
|
+
self._task_config = TaskConfig(broker_url=url)
|
|
245
249
|
if not url:
|
|
246
250
|
logger.warning("未配置任务队列URL,任务功能将被禁用")
|
|
247
251
|
return self
|
aury/boot/testing/base.py
CHANGED
|
@@ -103,7 +103,7 @@ class TestCase(ABC): # noqa: B024
|
|
|
103
103
|
|
|
104
104
|
|
|
105
105
|
# Pytest fixtures 支持
|
|
106
|
-
@pytest.fixture
|
|
106
|
+
@pytest.fixture()
|
|
107
107
|
async def test_case():
|
|
108
108
|
"""Pytest fixture,提供测试用例实例。"""
|
|
109
109
|
case = TestCase()
|
|
@@ -115,7 +115,7 @@ async def test_case():
|
|
|
115
115
|
await case._cleanup()
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
@pytest.fixture
|
|
118
|
+
@pytest.fixture()
|
|
119
119
|
async def db_session(test_case: TestCase):
|
|
120
120
|
"""Pytest fixture,提供数据库会话。"""
|
|
121
121
|
await test_case.setup_db()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aury-boot
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.8
|
|
4
4
|
Summary: Aury Boot - 基于 FastAPI 生态的企业级 API 开发框架
|
|
5
5
|
Requires-Python: >=3.13
|
|
6
6
|
Requires-Dist: alembic>=1.17.2
|
|
@@ -49,6 +49,7 @@ Requires-Dist: asyncpg>=0.31.0; extra == 'postgres'
|
|
|
49
49
|
Provides-Extra: rabbitmq
|
|
50
50
|
Requires-Dist: amqp>=5.3.1; extra == 'rabbitmq'
|
|
51
51
|
Provides-Extra: recommended
|
|
52
|
+
Requires-Dist: aiosqlite>=0.21.0; extra == 'recommended'
|
|
52
53
|
Requires-Dist: apscheduler>=3.11.1; extra == 'recommended'
|
|
53
54
|
Requires-Dist: asyncpg>=0.31.0; extra == 'recommended'
|
|
54
55
|
Requires-Dist: aury-sdk-storage[aws]>=0.0.1; extra == 'recommended'
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
aury/boot/__init__.py,sha256=pCno-EInnpIBa1OtxNYF-JWf9j95Cd2h6vmu0xqa_-4,1791
|
|
2
|
-
aury/boot/_version.py,sha256=
|
|
3
|
-
aury/boot/application/__init__.py,sha256=
|
|
2
|
+
aury/boot/_version.py,sha256=j-ar4gJGiWIawqKXhvv9hGJWLfwu0tISl-0GV97B7a0,704
|
|
3
|
+
aury/boot/application/__init__.py,sha256=0o_XmiwFCeAu06VHggS8I1e7_nSMoRq0Hcm0fYfCywU,3071
|
|
4
|
+
aury/boot/application/adapter/__init__.py,sha256=e1bcSb1bxUMfofTwiCuHBZJk5-STkMCWPF2EJXHQ7UU,3976
|
|
5
|
+
aury/boot/application/adapter/base.py,sha256=Ar_66fiHPDEmV-1DKnqXKwc53p3pozG31bgTJTEUriY,15763
|
|
6
|
+
aury/boot/application/adapter/config.py,sha256=X6ppQMldyJbEdG1GcQSc2SulLtyeBTr8OAboYIjkSu0,8153
|
|
7
|
+
aury/boot/application/adapter/decorators.py,sha256=yyGu_16bWWUiO36gxCeQWgG0DN19p5PqjHQan_Fvi0A,8959
|
|
8
|
+
aury/boot/application/adapter/exceptions.py,sha256=Kzm-ytRxdUnSMIcWCSOHPxo4Jh_A6YbyxlOVIUs-5F4,6183
|
|
9
|
+
aury/boot/application/adapter/http.py,sha256=4TADsSzdSRU63307dmmo-2U_JpVP12mwTFy66B5Ps-w,10759
|
|
4
10
|
aury/boot/application/app/__init__.py,sha256=I8FfCKDuDQsGzAK6BevyfdtAwieMUVYu6qgVQzBazpE,830
|
|
5
11
|
aury/boot/application/app/base.py,sha256=5v7wtksCCyp_QYVpxddd9xSujoVp1zX9pP6CPy4vwUE,16711
|
|
6
12
|
aury/boot/application/app/components.py,sha256=tt4a4ZVcRJZbvStj5W9AYf9omGqKVu0qFu5pn1q2VSU,20312
|
|
7
|
-
aury/boot/application/app/middlewares.py,sha256=
|
|
13
|
+
aury/boot/application/app/middlewares.py,sha256=BXe2H14FHzJUVpQM6DZUm-zfZRXSXIi1QIZ4_3izfHw,3306
|
|
8
14
|
aury/boot/application/app/startup.py,sha256=bkRT4cCzXPnTOBSNs-TLcKvFGwqBgwXeO8_gQq9Gc1s,7895
|
|
9
15
|
aury/boot/application/config/__init__.py,sha256=Dd-myRSBCM18DXXsi863h0cJG5VFrI10xMRtjnvelGo,1894
|
|
10
|
-
aury/boot/application/config/multi_instance.py,sha256=
|
|
11
|
-
aury/boot/application/config/settings.py,sha256
|
|
16
|
+
aury/boot/application/config/multi_instance.py,sha256=RXSp-xP8-bKMDEhq3SeL7T3lS8-vpRlvBEVBuZVjVK4,6475
|
|
17
|
+
aury/boot/application/config/settings.py,sha256=n2VorLbdmiY2uKSIbZJYSrEKkUq043FpnGWaXIxhWSI,29195
|
|
12
18
|
aury/boot/application/constants/__init__.py,sha256=DCXs13_VVaQWHqO-qpJoZwRd7HIexiirtw_nu8msTXE,340
|
|
13
19
|
aury/boot/application/constants/components.py,sha256=hDRs3YxpnfIFcGaUa1DYqBRwmV2_dceOlcCXabHE3fk,1006
|
|
14
20
|
aury/boot/application/constants/scheduler.py,sha256=S77FBIvHlyruvlabRWZJ2J1YAs2xWXPQI2yuGdGUDNA,471
|
|
@@ -23,7 +29,7 @@ aury/boot/application/interfaces/__init__.py,sha256=EGbiCL8IoGseylLVZO29Lkt3luyg
|
|
|
23
29
|
aury/boot/application/interfaces/egress.py,sha256=t8FK17V649rsm65uAeBruYr2mhfcqJiIzkS8UPsOzlc,5346
|
|
24
30
|
aury/boot/application/interfaces/ingress.py,sha256=rlflJ4nxAZ2Mc3Iy8ZX__GRgfAWcMYYzLhHL2NSk4_U,2425
|
|
25
31
|
aury/boot/application/middleware/__init__.py,sha256=T01fmbcdO0Sm6JE74g23uuDyebBGYA4DMZMDBl0L00w,258
|
|
26
|
-
aury/boot/application/middleware/logging.py,sha256=
|
|
32
|
+
aury/boot/application/middleware/logging.py,sha256=VXd472GJpOQ_n54896tQHauoPSdXyklGD_ZgMoIKsHQ,12633
|
|
27
33
|
aury/boot/application/migrations/__init__.py,sha256=Z5Gizx7f3AImRcl3cooiIDAZcNi5W-6GvB7mK5w1TNA,204
|
|
28
34
|
aury/boot/application/migrations/manager.py,sha256=G7mzkNA3MFjyQmM2UwY0ZFNgGGVS4W5GoG2Sbj5AUXk,23685
|
|
29
35
|
aury/boot/application/migrations/setup.py,sha256=P89QSMV2JQQb1FuyA9KHhgqSzKWZneCmOtOrLvEmKYQ,6261
|
|
@@ -40,8 +46,8 @@ aury/boot/commands/app.py,sha256=-kHcWdZ_D4xDwjOiUkcNSCTYKIUYz39HJV87eaZpeY8,755
|
|
|
40
46
|
aury/boot/commands/config.py,sha256=gPkG_jSWrXidjpyVdzABH7uRhoCgX5yrOcdKabtX5wY,4928
|
|
41
47
|
aury/boot/commands/docker.py,sha256=7mKorZCPZgxH1XFslzo6W-uzpe61hGXz86JKOhOeBlo,9006
|
|
42
48
|
aury/boot/commands/docs.py,sha256=-uCvrKj0_shdeBY08W6zx5vNpsBM3yc_IIOOQzoFbqE,11647
|
|
43
|
-
aury/boot/commands/generate.py,sha256=
|
|
44
|
-
aury/boot/commands/init.py,sha256=
|
|
49
|
+
aury/boot/commands/generate.py,sha256=WZieSXuofxJOC7NBiVGpBigB9NZ4GMcF2F1ReTNun1I,44420
|
|
50
|
+
aury/boot/commands/init.py,sha256=HcfBLaU3MwF0tSRTVUEUEA__INwB_cbF7DKRPQ_1Lf0,32358
|
|
45
51
|
aury/boot/commands/scheduler.py,sha256=BCIGQcGryXpsYNF-mncP6v5kNoz6DZ10DMzMKVDiXxA,3516
|
|
46
52
|
aury/boot/commands/worker.py,sha256=qAcPdoKpMBLYoi45X_y2-nobuYKxscJpooEB_0HhM4o,4163
|
|
47
53
|
aury/boot/commands/migrate/__init__.py,sha256=W9OhkX8ILdolySofgdP2oYoJGG9loQd5FeSwkniU3qM,455
|
|
@@ -54,16 +60,15 @@ aury/boot/commands/templates/generate/model.py.tpl,sha256=knFwMyGZ7wMpzH4_bQD_V1
|
|
|
54
60
|
aury/boot/commands/templates/generate/repository.py.tpl,sha256=xoEg6lPAaLIRDeFy4I0FBsPPVLSy91h6xosAlaCL_mM,590
|
|
55
61
|
aury/boot/commands/templates/generate/schema.py.tpl,sha256=HIaY5B0UG_S188nQLrZDEJ0q73WPdb7BmCdc0tseZA4,545
|
|
56
62
|
aury/boot/commands/templates/generate/service.py.tpl,sha256=2hwQ8e4a5d_bIMx_jGDobdmKPMFLBlfQrQVQH4Ym5k4,1842
|
|
57
|
-
aury/boot/commands/templates/project/AGENTS.md.tpl,sha256=
|
|
63
|
+
aury/boot/commands/templates/project/AGENTS.md.tpl,sha256=lzRh23-8Buw5JgZ_BRuMH15gh6WmxJRU4dbZ57fyntA,7309
|
|
58
64
|
aury/boot/commands/templates/project/README.md.tpl,sha256=oCeBiukk6Pa3hrCKybkfM2sIRHsPZ15nlwuFTUSFDwY,2459
|
|
59
65
|
aury/boot/commands/templates/project/admin_console_init.py.tpl,sha256=K81L14thyEhRA8lFCQJVZL_NU22-sBz0xS68MJPeoCo,1541
|
|
60
|
-
aury/boot/commands/templates/project/config.py.tpl,sha256=
|
|
66
|
+
aury/boot/commands/templates/project/config.py.tpl,sha256=ZCZHHvTOv3dm0VcJqmqkvoIEzKoBBcfne_UYnqimc7s,869
|
|
61
67
|
aury/boot/commands/templates/project/conftest.py.tpl,sha256=chbETK81Hy26cWz6YZ2cFgy7HbnABzYCqeyMzgpa3eI,726
|
|
62
|
-
aury/boot/commands/templates/project/env.example.tpl,sha256=_wmkalKo2iCI79ji9pdhausJnSeDdh4BNMcLkz2B6NU,10645
|
|
63
68
|
aury/boot/commands/templates/project/gitignore.tpl,sha256=OI0nt9u2E9EC-jAMoh3gpqamsWo18uDgyPybgee_snQ,3053
|
|
64
69
|
aury/boot/commands/templates/project/main.py.tpl,sha256=qKKgO3btMPIpPfb-iyCD4AMEYMUunhq6GJyA2QplGZI,922
|
|
65
70
|
aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl,sha256=8Aept3yEAe9cVdRvkddr_oEF-lr2riPXYRzBuw_6DBA,2138
|
|
66
|
-
aury/boot/commands/templates/project/aury_docs/01-model.md.tpl,sha256=
|
|
71
|
+
aury/boot/commands/templates/project/aury_docs/01-model.md.tpl,sha256=1mQ3hGDxqEZjev4CD5-3dzYRFVonPNcAaStI1UBEUyM,6811
|
|
67
72
|
aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl,sha256=yfKPYZ7x74BEF7wFp9u3S7xKr4Ld9MqXOItGZo5NM9Q,6819
|
|
68
73
|
aury/boot/commands/templates/project/aury_docs/03-service.md.tpl,sha256=Dg_8RGSeRmmyQrhhpppEoxl-6C5pNe9M2OzVOl1kjSk,13102
|
|
69
74
|
aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl,sha256=ZwwKhUbLI--PEEmwnuo2fIZrhCEZagBN6fRNDTFCnNk,2891
|
|
@@ -73,12 +78,24 @@ aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl,sha256=EQMI7vJIwJ
|
|
|
73
78
|
aury/boot/commands/templates/project/aury_docs/08-scheduler.md.tpl,sha256=zk7RHjtx_QGjmeLy04Nk_qSc8sofTrubS2Tg7DxfEl4,858
|
|
74
79
|
aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl,sha256=swHOQ_pWPtW8Bsy1arPu2OeIgs1FoKsJ2AsVSYUWPHY,931
|
|
75
80
|
aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl,sha256=5zamjmVxp3q16De1w_il2vdzEho1O_FoZBN8PIVp2aI,2976
|
|
76
|
-
aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl,sha256=
|
|
77
|
-
aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl,sha256=
|
|
78
|
-
aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=
|
|
79
|
-
aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl,sha256=
|
|
80
|
-
aury/boot/commands/templates/project/aury_docs/15-events.md.tpl,sha256=
|
|
81
|
-
aury/boot/commands/templates/project/aury_docs/
|
|
81
|
+
aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl,sha256=jdczsKrQuvS3KbR2KdfCu0fUbFNbvP8DHzfYASV-4N0,3397
|
|
82
|
+
aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl,sha256=6z3mN54qP2jtpTFOJBLVexvEv0ZHXYKjncvpZG4yOdw,1883
|
|
83
|
+
aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=rdtlog3ajcSsT0fq9a_US3MPcZhTvDo72eT6hetg4aI,3376
|
|
84
|
+
aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl,sha256=4bxLQBbCi0Fue0VQWOPt6acZ5P00BoLkCoLPQe_8k4U,2396
|
|
85
|
+
aury/boot/commands/templates/project/aury_docs/15-events.md.tpl,sha256=a4wQRgVPuYUGTGmw_lX1HJH_yFTbD30mBz7Arc4zgfs,3361
|
|
86
|
+
aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl,sha256=wPbDKoIMw-d-wwvSWHGm0OF4r9PtoAsQWwTK0BJESCA,11377
|
|
87
|
+
aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl,sha256=s0tIhVEi7N9AOABGsFx0hD1g6YutG5ehAG0XMQQva0E,3020
|
|
88
|
+
aury/boot/commands/templates/project/env_templates/_header.tpl,sha256=Pt0X_I25o1th3CLR228L2-nlcC-lIkN8cPailohBEkU,513
|
|
89
|
+
aury/boot/commands/templates/project/env_templates/admin.tpl,sha256=wWt3iybOpBHtuw6CkoUJ1bzEL0aNgOzKDEkMKhI2oag,2032
|
|
90
|
+
aury/boot/commands/templates/project/env_templates/cache.tpl,sha256=_sK-p_FECj4mVvggNvgb4Wu0yGii0Ocz560syG7DU2c,498
|
|
91
|
+
aury/boot/commands/templates/project/env_templates/database.tpl,sha256=2lWzTKt4X0SpeBBCkrDV90Di4EfoAuqYzhVsh74vTUI,907
|
|
92
|
+
aury/boot/commands/templates/project/env_templates/log.tpl,sha256=Rw1yQ9xYvjoXHEqahDuCYzuaV2A2U9G98gmZ85k30RQ,604
|
|
93
|
+
aury/boot/commands/templates/project/env_templates/messaging.tpl,sha256=ICRLGw2FtJ0bNtkHnpy0CFyILqxOfFLbfejdFLJuuo8,1719
|
|
94
|
+
aury/boot/commands/templates/project/env_templates/rpc.tpl,sha256=Eh3UeBl5SWmvclAPt9TgVVV0pvqwr2BsuTNrY1lbgi8,1161
|
|
95
|
+
aury/boot/commands/templates/project/env_templates/scheduler.tpl,sha256=c8Grcs1rgBB58RHlxqmDMPHQl8BnbcqNW473ctmsojU,752
|
|
96
|
+
aury/boot/commands/templates/project/env_templates/service.tpl,sha256=b-a2GyRyoaunbDj_2kaSw3OFxcugscmPvUBG7w0XO8c,710
|
|
97
|
+
aury/boot/commands/templates/project/env_templates/storage.tpl,sha256=x983u0Y2AFTTO2JqtPsYmYKBNGXtGCknA4iHv0k2wSA,1330
|
|
98
|
+
aury/boot/commands/templates/project/env_templates/third_party.tpl,sha256=w5lcKLYRHrA_iB-FmqMM_0WMs6bvxpf3ZwgicthFxgU,1959
|
|
82
99
|
aury/boot/commands/templates/project/modules/api.py.tpl,sha256=G_IE-UC_pRhN7oOxy3dl_VLmR_omlKmHhWYi-AlyZIQ,471
|
|
83
100
|
aury/boot/commands/templates/project/modules/exceptions.py.tpl,sha256=TKY3XaQU50Z-sDHWi3_Ns-A4v50PFru08H2lzmKxAUw,2646
|
|
84
101
|
aury/boot/commands/templates/project/modules/schedules.py.tpl,sha256=P-R-0SDsoQ_lWfKYJXZT5DoNAVKGUjYiC3HBbUZCc3Y,633
|
|
@@ -87,7 +104,11 @@ aury/boot/common/__init__.py,sha256=MhNP3c_nwx8CyDkDF6p1f4DcTZ1CZZScg66FWdbdaZI,
|
|
|
87
104
|
aury/boot/common/exceptions/__init__.py,sha256=aS3rIXWc5qNNJbfMs_PNmBlFsyNdKUMErziNMd1yoB8,3176
|
|
88
105
|
aury/boot/common/i18n/__init__.py,sha256=2cy4kteU-1YsAHkuMDTr2c5o4G33fvtYUGKtzEy1Q6c,394
|
|
89
106
|
aury/boot/common/i18n/translator.py,sha256=_vEDL2SjEI1vwMNHbnJb0xErKUPLm7VmhyOuMBeCqRM,8412
|
|
90
|
-
aury/boot/common/logging/__init__.py,sha256=
|
|
107
|
+
aury/boot/common/logging/__init__.py,sha256=lRbIZCeKavzO90Fx7FrGW1AAqAg8TX5VrDo0pWA4Af0,1661
|
|
108
|
+
aury/boot/common/logging/context.py,sha256=WHPpfqHH0HIbaSPdpESjB5kV344ygDfrdrcOmDXz1JI,3842
|
|
109
|
+
aury/boot/common/logging/decorators.py,sha256=UaGMhRJdARNJ2VgCuRwaNX0DD5wIc1gAl6NDj7u8K2c,3354
|
|
110
|
+
aury/boot/common/logging/format.py,sha256=V1VoZCPFAaAXy20n3WehOsZGTHuboYMHnSFGa0GxhdU,9648
|
|
111
|
+
aury/boot/common/logging/setup.py,sha256=XPeoyFeIrsX8GbAFhBMccm_t1Zlh7_RcDl4_CqRLZtk,6864
|
|
91
112
|
aury/boot/contrib/__init__.py,sha256=fyk_St9VufIx64hsobv9EsOYzb_T5FbJHxjqtPds4g8,198
|
|
92
113
|
aury/boot/contrib/admin_console/__init__.py,sha256=HEesLFrtYtBFWTDrh5H3mR-4V4LRg5N4a2a1C4-Whgs,445
|
|
93
114
|
aury/boot/contrib/admin_console/auth.py,sha256=_goyjZ8Clssvmy8g84svenGfBqCe9OC5pIvCjIzt42g,4706
|
|
@@ -130,7 +151,7 @@ aury/boot/infrastructure/clients/redis/__init__.py,sha256=HGZVfcWmOPeiAk-rJ8Yun7
|
|
|
130
151
|
aury/boot/infrastructure/clients/redis/config.py,sha256=KfC2R7bcQ91zjTp8Q_S7j3ZemDLdejUYc3CrWsJlpNM,1421
|
|
131
152
|
aury/boot/infrastructure/clients/redis/manager.py,sha256=Dmfu6OWGe_PrBr9wbOhl3suUpuKMUJDnCz6xW-rU4fQ,8538
|
|
132
153
|
aury/boot/infrastructure/database/__init__.py,sha256=MsHNyrJ2CZJT-lbVZzOAJ0nFfFEmHrJqC0zw-cFS768,888
|
|
133
|
-
aury/boot/infrastructure/database/config.py,sha256=
|
|
154
|
+
aury/boot/infrastructure/database/config.py,sha256=5LYy4DuLL0XNjVnX2HUcrMh3c71eeZa-vWGM8QCkL0U,1408
|
|
134
155
|
aury/boot/infrastructure/database/exceptions.py,sha256=hUjsU23c0eMwogSDrKq_bQ6zvnY7PQSGaitbCEhhDZQ,766
|
|
135
156
|
aury/boot/infrastructure/database/manager.py,sha256=bgXNi6Gy-u18KQRjIgMshm__G_jui-8j03LpJbllc6Q,10009
|
|
136
157
|
aury/boot/infrastructure/database/query_tools/__init__.py,sha256=D-8Wxm8x48rg9G95aH_b4re7S4_IGJO9zznArYXldFo,5500
|
|
@@ -160,17 +181,17 @@ aury/boot/infrastructure/storage/base.py,sha256=aWBCmPHF5Hkj8VWH2BGkpdeLfqf9uWEC
|
|
|
160
181
|
aury/boot/infrastructure/storage/exceptions.py,sha256=Av1r94bRkeeeDo6vgAD9e_9YA9Ge6D7F2U1qzUs-8FE,622
|
|
161
182
|
aury/boot/infrastructure/storage/factory.py,sha256=-ua2N5Uw5K14F1FzkGjlqv9VQCtywuZEB9o_kL465IU,2479
|
|
162
183
|
aury/boot/infrastructure/tasks/__init__.py,sha256=Ne3VRVj4Y7x51UUkJH8nVrbxucCbalsQB7PmthqSfxY,513
|
|
163
|
-
aury/boot/infrastructure/tasks/config.py,sha256=
|
|
184
|
+
aury/boot/infrastructure/tasks/config.py,sha256=qOWjWZ7uZAr2bKc2xx7kdoiWisFqmBqw2uAcaA6Ud6s,747
|
|
164
185
|
aury/boot/infrastructure/tasks/constants.py,sha256=6lo5jGLPItntVKLgrz6uh4tz_F1a-ckEO97MlP5aGcA,836
|
|
165
186
|
aury/boot/infrastructure/tasks/exceptions.py,sha256=v6hlBbfs-oI_HbUZCxR3T8_c-U83s4_I0SvM7GHDUWE,605
|
|
166
|
-
aury/boot/infrastructure/tasks/manager.py,sha256=
|
|
187
|
+
aury/boot/infrastructure/tasks/manager.py,sha256=AGWCZwO3uFQhNZ-reyR2KinlkUsXF8z1bsJ8UmWPcTk,17328
|
|
167
188
|
aury/boot/testing/__init__.py,sha256=WbUSXcICNpr9RvrA2JzxRPcjMuTWDPTKOwXl0l4697U,703
|
|
168
|
-
aury/boot/testing/base.py,sha256=
|
|
189
|
+
aury/boot/testing/base.py,sha256=BQOA6V4RIecVJM9t7kto9YxL0Ij_jEsFBdpKceWBe3U,3725
|
|
169
190
|
aury/boot/testing/client.py,sha256=KOg1EemuIVsBG68G5y0DjSxZGcIQVdWQ4ASaHE3o1R0,4484
|
|
170
191
|
aury/boot/testing/factory.py,sha256=8GvwX9qIDu0L65gzJMlrWB0xbmJ-7zPHuwk3eECULcg,5185
|
|
171
192
|
aury/boot/toolkit/__init__.py,sha256=AcyVb9fDf3CaEmJPNkWC4iGv32qCPyk4BuFKSuNiJRQ,334
|
|
172
193
|
aury/boot/toolkit/http/__init__.py,sha256=zIPmpIZ9Qbqe25VmEr7jixoY2fkRbLm7NkCB9vKpg6I,11039
|
|
173
|
-
aury_boot-0.0.
|
|
174
|
-
aury_boot-0.0.
|
|
175
|
-
aury_boot-0.0.
|
|
176
|
-
aury_boot-0.0.
|
|
194
|
+
aury_boot-0.0.8.dist-info/METADATA,sha256=aMQMBHNb0zE5c8eVaEHZSAYEdtCiCKd3Ea5VOuX5_lg,7980
|
|
195
|
+
aury_boot-0.0.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
196
|
+
aury_boot-0.0.8.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
|
|
197
|
+
aury_boot-0.0.8.dist-info/RECORD,,
|