aury-boot 0.0.13__py3-none-any.whl → 0.0.15__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/middleware/logging.py +1 -13
- aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +5 -41
- aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +1 -1
- aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +76 -11
- aury/boot/common/logging/__init__.py +0 -5
- aury/boot/common/logging/context.py +1 -52
- aury/boot/infrastructure/database/manager.py +8 -2
- {aury_boot-0.0.13.dist-info → aury_boot-0.0.15.dist-info}/METADATA +1 -1
- {aury_boot-0.0.13.dist-info → aury_boot-0.0.15.dist-info}/RECORD +12 -12
- {aury_boot-0.0.13.dist-info → aury_boot-0.0.15.dist-info}/WHEEL +0 -0
- {aury_boot-0.0.13.dist-info → aury_boot-0.0.15.dist-info}/entry_points.txt +0 -0
aury/boot/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
31
|
+
__version__ = version = '0.0.15'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 15)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -17,7 +17,7 @@ from starlette.requests import Request
|
|
|
17
17
|
from starlette.responses import Response
|
|
18
18
|
|
|
19
19
|
from aury.boot.application.errors import global_exception_handler
|
|
20
|
-
from aury.boot.common.logging import
|
|
20
|
+
from aury.boot.common.logging import logger, set_trace_id
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def log_request[T](func: Callable[..., T]) -> Callable[..., T]:
|
|
@@ -187,12 +187,6 @@ class RequestLoggingMiddleware(BaseHTTPMiddleware):
|
|
|
187
187
|
)
|
|
188
188
|
logger.log(log_level.upper(), response_log)
|
|
189
189
|
|
|
190
|
-
# 记录请求上下文(user_id, tenant_id 等用户注册的字段)
|
|
191
|
-
request_contexts = get_request_contexts()
|
|
192
|
-
if request_contexts:
|
|
193
|
-
ctx_str = " | ".join(f"{k}: {v}" for k, v in request_contexts.items())
|
|
194
|
-
logger.info(f"[REQUEST_CONTEXT] Trace-ID: {trace_id} | {ctx_str}")
|
|
195
|
-
|
|
196
190
|
# 写入 access 日志(简洁格式)
|
|
197
191
|
logger.bind(access=True).info(
|
|
198
192
|
f"{request.method} {request.url.path} {status_code} {duration:.3f}s"
|
|
@@ -216,12 +210,6 @@ class RequestLoggingMiddleware(BaseHTTPMiddleware):
|
|
|
216
210
|
f"耗时: {duration:.3f}s | Trace-ID: {trace_id}"
|
|
217
211
|
)
|
|
218
212
|
|
|
219
|
-
# 记录请求上下文(即使异常也要记录,便于追踪问题)
|
|
220
|
-
request_contexts = get_request_contexts()
|
|
221
|
-
if request_contexts:
|
|
222
|
-
ctx_str = " | ".join(f"{k}: {v}" for k, v in request_contexts.items())
|
|
223
|
-
logger.info(f"[REQUEST_CONTEXT] Trace-ID: {trace_id} | {ctx_str}")
|
|
224
|
-
|
|
225
213
|
# 使用全局异常处理器生成响应,而不是直接抛出异常
|
|
226
214
|
# BaseHTTPMiddleware 中直接 raise 会绕过 FastAPI 的异常处理器
|
|
227
215
|
response = await global_exception_handler(request, exc)
|
|
@@ -19,44 +19,8 @@ logger.exception("异常信息") # 自动记录堆栈
|
|
|
19
19
|
2024-01-15 12:00:00 | INFO | app.service:create:42 | abc123 - 操作成功
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
## 11.2 注入用户信息
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```python
|
|
27
|
-
# app/auth/context.py
|
|
28
|
-
from contextvars import ContextVar
|
|
29
|
-
from aury.boot.common.logging import register_request_context
|
|
30
|
-
|
|
31
|
-
_user_id: ContextVar[str] = ContextVar("user_id", default="")
|
|
32
|
-
|
|
33
|
-
def set_user_id(uid: str) -> None:
|
|
34
|
-
_user_id.set(uid)
|
|
35
|
-
|
|
36
|
-
# 启动时注册(只需一次)
|
|
37
|
-
register_request_context("user_id", _user_id.get)
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
在认证中间件中设置(order < 100 以在日志中间件前执行):
|
|
41
|
-
|
|
42
|
-
```python
|
|
43
|
-
class AuthMiddleware(Middleware):
|
|
44
|
-
order = 50 # 在日志中间件(order=100)之前执行
|
|
45
|
-
|
|
46
|
-
async def dispatch(self, request, call_next):
|
|
47
|
-
user = await verify_token(request)
|
|
48
|
-
if user:
|
|
49
|
-
set_user_id(str(user.id))
|
|
50
|
-
return await call_next(request)
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
结果:
|
|
54
|
-
```
|
|
55
|
-
← GET /api/users | 状态: 200 | 耗时: 0.05s | Trace-ID: abc123
|
|
56
|
-
[REQUEST_CONTEXT] Trace-ID: abc123 | user_id: 123
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## 11.3 性能监控装饰器
|
|
23
|
+
## 11.2 性能监控装饰器
|
|
60
24
|
|
|
61
25
|
```python
|
|
62
26
|
from aury.boot.common.logging import log_performance, log_exceptions
|
|
@@ -70,7 +34,7 @@ async def risky_operation():
|
|
|
70
34
|
...
|
|
71
35
|
```
|
|
72
36
|
|
|
73
|
-
## 11.
|
|
37
|
+
## 11.3 HTTP 请求日志
|
|
74
38
|
|
|
75
39
|
框架内置 `RequestLoggingMiddleware` 自动记录:
|
|
76
40
|
|
|
@@ -85,7 +49,7 @@ async def risky_operation():
|
|
|
85
49
|
慢请求: GET /api/reports | 耗时: 2.345s (超过1秒) | Trace-ID: abc123
|
|
86
50
|
```
|
|
87
51
|
|
|
88
|
-
## 11.
|
|
52
|
+
## 11.4 自定义日志文件
|
|
89
53
|
|
|
90
54
|
为特定业务创建独立的日志文件:
|
|
91
55
|
|
|
@@ -99,7 +63,7 @@ register_log_sink("payment", filter_key="payment")
|
|
|
99
63
|
logger.bind(payment=True).info(f"支付成功 | 订单: {{order_id}}")
|
|
100
64
|
```
|
|
101
65
|
|
|
102
|
-
## 11.
|
|
66
|
+
## 11.5 异步任务链路追踪
|
|
103
67
|
|
|
104
68
|
跨进程任务需要手动传递 trace_id:
|
|
105
69
|
|
|
@@ -117,7 +81,7 @@ async def process_order(order_id: str, trace_id: str | None = None):
|
|
|
117
81
|
logger.info(f"处理订单: {{order_id}}") # 自动包含 trace_id
|
|
118
82
|
```
|
|
119
83
|
|
|
120
|
-
## 11.
|
|
84
|
+
## 11.6 服务上下文隔离
|
|
121
85
|
|
|
122
86
|
日志自动按服务类型分离:
|
|
123
87
|
|
|
@@ -131,7 +131,7 @@ class WechatAdapter(HttpAdapter):
|
|
|
131
131
|
async def _prepare_headers(self, headers: dict | None) -> dict:
|
|
132
132
|
"""添加认证头。"""
|
|
133
133
|
headers = await super()._prepare_headers(headers)
|
|
134
|
-
headers["Authorization"] = f"Bearer {await self._get_access_token()}"
|
|
134
|
+
headers["Authorization"] = f"Bearer {{await self._get_access_token()}}"
|
|
135
135
|
return headers
|
|
136
136
|
|
|
137
137
|
@adapter_method("send_message")
|
|
@@ -104,14 +104,79 @@ aury pkg remove redis
|
|
|
104
104
|
|
|
105
105
|
常用环境变量:
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
107
|
+
|| 变量 | 说明 | 默认值 |
|
|
108
|
+
||------|------|--------|
|
|
109
|
+
|| `ADMIN__ENABLED` | 是否启用管理后台 | `false` |
|
|
110
|
+
|| `ADMIN__PATH` | 管理后台路径 | `/api/admin-console` |
|
|
111
|
+
|| `ADMIN__DATABASE_URL` | 管理后台同步数据库 URL(可覆盖自动推导) | - |
|
|
112
|
+
|| `ADMIN__AUTH_MODE` | 认证模式(basic/bearer/none/custom/jwt) | `basic` |
|
|
113
|
+
|| `ADMIN__AUTH_SECRET_KEY` | session 签名密钥(生产必配) | - |
|
|
114
|
+
|| `ADMIN__AUTH_BASIC_USERNAME` | basic 用户名 | - |
|
|
115
|
+
|| `ADMIN__AUTH_BASIC_PASSWORD` | basic 密码 | - |
|
|
116
|
+
|| `ADMIN__AUTH_BEARER_TOKENS` | bearer token 白名单 | `[]` |
|
|
117
|
+
|| `ADMIN__AUTH_BACKEND` | 自定义认证后端导入路径(module:attr) | - |
|
|
118
|
+
|
|
119
|
+
## 注册 CLI 与扩展命令
|
|
120
|
+
|
|
121
|
+
### 内置 `aury` 命令如何注册
|
|
122
|
+
|
|
123
|
+
Aury Boot 安装后会自动注册一个全局命令 `aury`(见框架自身的 `pyproject.toml`):
|
|
124
|
+
|
|
125
|
+
```toml
|
|
126
|
+
[project.scripts]
|
|
127
|
+
aury = "aury.boot.commands:main"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- `aury.boot.commands:main` 是 Typer 应用入口,内部通过 `app.add_typer(...)` 注册了 `init/generate/server/scheduler/worker/migrate/docker/docs/pkg` 等子命令。
|
|
131
|
+
|
|
132
|
+
### 在你自己的项目里注册一个 CLI
|
|
133
|
+
|
|
134
|
+
如果你希望在自己的服务里有一个独立的 CLI(例如 `{project_name_snake}`),并且复用 Aury Boot 的全部基础命令,可以这样做:
|
|
135
|
+
|
|
136
|
+
1. 新建模块 `{package_name}/cli.py`:
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from typer import Typer
|
|
140
|
+
from aury.boot.commands import register_commands
|
|
141
|
+
|
|
142
|
+
# 创建项目自己的 CLI
|
|
143
|
+
app = Typer(name="{project_name_snake}")
|
|
144
|
+
|
|
145
|
+
# 继承 aury-boot 的所有基础命令
|
|
146
|
+
register_commands(app)
|
|
147
|
+
|
|
148
|
+
# 或者按需关闭某些命令,例如不暴露 docker 命令:
|
|
149
|
+
# register_commands(app, include_docker=False)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# 添加你自己的项目命令
|
|
153
|
+
@app.command()
|
|
154
|
+
async def hello(name: str = "world") -> None:
|
|
155
|
+
"""示例:项目自定义命令。"""
|
|
156
|
+
print(f"Hello, {name} from {project_name_snake}!")
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
> 注意:这里的 `app` 是 Typer 应用实例,`register_commands` 会把所有内置的 `init/generate/server/...` 等命令挂到你自己的 CLI 下。
|
|
160
|
+
|
|
161
|
+
2. 在你项目自己的 `pyproject.toml` 中注册脚本入口(**不是框架本身的 pyproject**):
|
|
162
|
+
|
|
163
|
+
```toml
|
|
164
|
+
[project.scripts]
|
|
165
|
+
{project_name_snake} = "{package_name}.cli:app"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
3. 安装项目后,你就可以使用:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# 使用项目 CLI 运行 aury-boot 命令
|
|
172
|
+
{project_name_snake} init
|
|
173
|
+
{project_name_snake} generate crud user -i
|
|
174
|
+
{project_name_snake} server dev
|
|
175
|
+
|
|
176
|
+
# 调用你自定义的命令
|
|
177
|
+
{project_name_snake} hello --name dev
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
这样:
|
|
181
|
+
- 基础命令仍由 Aury Boot 维护和升级;
|
|
182
|
+
- 你的项目可以在自己的命名空间下扩展命令,而不用直接修改框架的 `aury` 命令。
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
- 性能监控装饰器
|
|
6
6
|
- 异常日志装饰器
|
|
7
7
|
- 链路追踪 ID 支持
|
|
8
|
-
- 请求上下文注入(user_id 等)
|
|
9
8
|
- 自定义日志 sink 注册 API
|
|
10
9
|
|
|
11
10
|
日志文件:
|
|
@@ -27,10 +26,8 @@ logger.remove()
|
|
|
27
26
|
# 从子模块导入
|
|
28
27
|
from aury.boot.common.logging.context import (
|
|
29
28
|
ServiceContext,
|
|
30
|
-
get_request_contexts,
|
|
31
29
|
get_service_context,
|
|
32
30
|
get_trace_id,
|
|
33
|
-
register_request_context,
|
|
34
31
|
set_service_context,
|
|
35
32
|
set_trace_id,
|
|
36
33
|
)
|
|
@@ -55,7 +52,6 @@ __all__ = [
|
|
|
55
52
|
"ServiceContext",
|
|
56
53
|
"format_exception_java_style",
|
|
57
54
|
"get_class_logger",
|
|
58
|
-
"get_request_contexts",
|
|
59
55
|
"get_service_context",
|
|
60
56
|
"get_trace_id",
|
|
61
57
|
"log_exception",
|
|
@@ -63,7 +59,6 @@ __all__ = [
|
|
|
63
59
|
"log_performance",
|
|
64
60
|
"logger",
|
|
65
61
|
"register_log_sink",
|
|
66
|
-
"register_request_context",
|
|
67
62
|
"set_service_context",
|
|
68
63
|
"set_trace_id",
|
|
69
64
|
"setup_intercept",
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"""日志上下文管理。
|
|
2
2
|
|
|
3
|
-
提供链路追踪 ID
|
|
3
|
+
提供链路追踪 ID、服务上下文的管理。
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
from collections.abc import Callable
|
|
9
8
|
from contextvars import ContextVar
|
|
10
9
|
from enum import Enum
|
|
11
10
|
import uuid
|
|
@@ -24,8 +23,6 @@ _service_context: ContextVar[ServiceContext] = ContextVar("service_context", def
|
|
|
24
23
|
# 链路追踪 ID
|
|
25
24
|
_trace_id_var: ContextVar[str] = ContextVar("trace_id", default="")
|
|
26
25
|
|
|
27
|
-
# 请求上下文字段注册表(用户可注册自定义字段,如 user_id, tenant_id)
|
|
28
|
-
_request_context_getters: dict[str, Callable[[], str]] = {}
|
|
29
26
|
|
|
30
27
|
|
|
31
28
|
def get_service_context() -> ServiceContext:
|
|
@@ -75,58 +72,10 @@ def set_trace_id(trace_id: str) -> None:
|
|
|
75
72
|
_trace_id_var.set(trace_id)
|
|
76
73
|
|
|
77
74
|
|
|
78
|
-
def register_request_context(name: str, getter: Callable[[], str]) -> None:
|
|
79
|
-
"""注册请求上下文字段。
|
|
80
|
-
|
|
81
|
-
注册后,该字段会在每个请求结束时记录一次(与 trace_id 关联)。
|
|
82
|
-
适用于 user_id、tenant_id 等需要关联到请求但不需要每行日志都记录的信息。
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
name: 字段名(如 "user_id", "tenant_id")
|
|
86
|
-
getter: 获取当前值的函数(通常从 ContextVar 读取)
|
|
87
|
-
|
|
88
|
-
使用示例:
|
|
89
|
-
from contextvars import ContextVar
|
|
90
|
-
from aury.boot.common.logging import register_request_context
|
|
91
|
-
|
|
92
|
-
# 定义上下文变量
|
|
93
|
-
_user_id: ContextVar[str] = ContextVar("user_id", default="")
|
|
94
|
-
|
|
95
|
-
def set_user_id(uid: str):
|
|
96
|
-
_user_id.set(uid)
|
|
97
|
-
|
|
98
|
-
# 启动时注册(一次)
|
|
99
|
-
register_request_context("user_id", _user_id.get)
|
|
100
|
-
|
|
101
|
-
# Auth 中间件中设置(每次请求)
|
|
102
|
-
set_user_id(str(user.id))
|
|
103
|
-
"""
|
|
104
|
-
_request_context_getters[name] = getter
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def get_request_contexts() -> dict[str, str]:
|
|
108
|
-
"""获取所有已注册的请求上下文当前值。
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
字段名到值的字典(仅包含非空值)
|
|
112
|
-
"""
|
|
113
|
-
result = {}
|
|
114
|
-
for name, getter in _request_context_getters.items():
|
|
115
|
-
try:
|
|
116
|
-
value = getter()
|
|
117
|
-
if value: # 只包含非空值
|
|
118
|
-
result[name] = value
|
|
119
|
-
except Exception:
|
|
120
|
-
pass # 忽略获取失败的字段
|
|
121
|
-
return result
|
|
122
|
-
|
|
123
|
-
|
|
124
75
|
__all__ = [
|
|
125
76
|
"ServiceContext",
|
|
126
|
-
"get_request_contexts",
|
|
127
77
|
"get_service_context",
|
|
128
78
|
"get_trace_id",
|
|
129
|
-
"register_request_context",
|
|
130
79
|
"set_service_context",
|
|
131
80
|
"set_trace_id",
|
|
132
81
|
]
|
|
@@ -10,7 +10,7 @@ from collections.abc import AsyncGenerator
|
|
|
10
10
|
from contextlib import asynccontextmanager
|
|
11
11
|
|
|
12
12
|
from sqlalchemy import text
|
|
13
|
-
from sqlalchemy.exc import DisconnectionError, OperationalError
|
|
13
|
+
from sqlalchemy.exc import DisconnectionError, OperationalError, SQLAlchemyError
|
|
14
14
|
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine
|
|
15
15
|
|
|
16
16
|
from aury.boot.common.logging import logger
|
|
@@ -237,10 +237,16 @@ class DatabaseManager:
|
|
|
237
237
|
try:
|
|
238
238
|
await self._check_session_connection(session)
|
|
239
239
|
yield session
|
|
240
|
-
except
|
|
240
|
+
except SQLAlchemyError as exc:
|
|
241
|
+
# 只捕获数据库相关异常
|
|
241
242
|
await session.rollback()
|
|
242
243
|
logger.exception(f"数据库会话异常: {exc}")
|
|
243
244
|
raise
|
|
245
|
+
except Exception:
|
|
246
|
+
# 非数据库异常(如请求验证错误):仍需回滚以确保事务一致性
|
|
247
|
+
# 但不记录为数据库异常,直接传播
|
|
248
|
+
await session.rollback()
|
|
249
|
+
raise
|
|
244
250
|
finally:
|
|
245
251
|
await session.close()
|
|
246
252
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
aury/boot/__init__.py,sha256=pCno-EInnpIBa1OtxNYF-JWf9j95Cd2h6vmu0xqa_-4,1791
|
|
2
|
-
aury/boot/_version.py,sha256=
|
|
2
|
+
aury/boot/_version.py,sha256=vo0_oMD-jYQGv4X3gUeREI1I3x7jd_dShIWAxsGI-zY,706
|
|
3
3
|
aury/boot/application/__init__.py,sha256=0o_XmiwFCeAu06VHggS8I1e7_nSMoRq0Hcm0fYfCywU,3071
|
|
4
4
|
aury/boot/application/adapter/__init__.py,sha256=e1bcSb1bxUMfofTwiCuHBZJk5-STkMCWPF2EJXHQ7UU,3976
|
|
5
5
|
aury/boot/application/adapter/base.py,sha256=Ar_66fiHPDEmV-1DKnqXKwc53p3pozG31bgTJTEUriY,15763
|
|
@@ -29,7 +29,7 @@ aury/boot/application/interfaces/__init__.py,sha256=EGbiCL8IoGseylLVZO29Lkt3luyg
|
|
|
29
29
|
aury/boot/application/interfaces/egress.py,sha256=t8FK17V649rsm65uAeBruYr2mhfcqJiIzkS8UPsOzlc,5346
|
|
30
30
|
aury/boot/application/interfaces/ingress.py,sha256=rlflJ4nxAZ2Mc3Iy8ZX__GRgfAWcMYYzLhHL2NSk4_U,2425
|
|
31
31
|
aury/boot/application/middleware/__init__.py,sha256=T01fmbcdO0Sm6JE74g23uuDyebBGYA4DMZMDBl0L00w,258
|
|
32
|
-
aury/boot/application/middleware/logging.py,sha256=
|
|
32
|
+
aury/boot/application/middleware/logging.py,sha256=d3wbprbCxFJ6TpeEDomTSnjQ7sIadYxXnnKS6b_Wj38,11899
|
|
33
33
|
aury/boot/application/migrations/__init__.py,sha256=Z5Gizx7f3AImRcl3cooiIDAZcNi5W-6GvB7mK5w1TNA,204
|
|
34
34
|
aury/boot/application/migrations/manager.py,sha256=G7mzkNA3MFjyQmM2UwY0ZFNgGGVS4W5GoG2Sbj5AUXk,23685
|
|
35
35
|
aury/boot/application/migrations/setup.py,sha256=cxzBIHGzRXhlIYs4_ZW6P85Z9A7uVnTq_dmQFKp3ha4,6485
|
|
@@ -79,13 +79,13 @@ aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl,sha256=EQMI7vJIwJ
|
|
|
79
79
|
aury/boot/commands/templates/project/aury_docs/08-scheduler.md.tpl,sha256=zk7RHjtx_QGjmeLy04Nk_qSc8sofTrubS2Tg7DxfEl4,858
|
|
80
80
|
aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl,sha256=swHOQ_pWPtW8Bsy1arPu2OeIgs1FoKsJ2AsVSYUWPHY,931
|
|
81
81
|
aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl,sha256=mhe0j0S51ndPJLjaQ6yD8OPYBEO02NHumJVbBvz2qkw,4320
|
|
82
|
-
aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl,sha256=
|
|
82
|
+
aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl,sha256=bwxFCGQsO9cTEbwqJF1xcjsZKP82HRWhIMRUS0c9_ZI,2435
|
|
83
83
|
aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl,sha256=6z3mN54qP2jtpTFOJBLVexvEv0ZHXYKjncvpZG4yOdw,1883
|
|
84
84
|
aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=rdtlog3ajcSsT0fq9a_US3MPcZhTvDo72eT6hetg4aI,3376
|
|
85
85
|
aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl,sha256=4bxLQBbCi0Fue0VQWOPt6acZ5P00BoLkCoLPQe_8k4U,2396
|
|
86
86
|
aury/boot/commands/templates/project/aury_docs/15-events.md.tpl,sha256=a4wQRgVPuYUGTGmw_lX1HJH_yFTbD30mBz7Arc4zgfs,3361
|
|
87
|
-
aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl,sha256=
|
|
88
|
-
aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl,sha256=
|
|
87
|
+
aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl,sha256=pkmJkZw2Ca6_uYk2jZvAb8DozjBa2tWq_t3gtq1lFSk,11456
|
|
88
|
+
aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl,sha256=LEZ-ygl_pF_t_abrpajlaEkGv1qD4onylmxG6p5wzgc,5671
|
|
89
89
|
aury/boot/commands/templates/project/env_templates/_header.tpl,sha256=Pt0X_I25o1th3CLR228L2-nlcC-lIkN8cPailohBEkU,513
|
|
90
90
|
aury/boot/commands/templates/project/env_templates/admin.tpl,sha256=wWt3iybOpBHtuw6CkoUJ1bzEL0aNgOzKDEkMKhI2oag,2032
|
|
91
91
|
aury/boot/commands/templates/project/env_templates/cache.tpl,sha256=_sK-p_FECj4mVvggNvgb4Wu0yGii0Ocz560syG7DU2c,498
|
|
@@ -105,8 +105,8 @@ aury/boot/common/__init__.py,sha256=MhNP3c_nwx8CyDkDF6p1f4DcTZ1CZZScg66FWdbdaZI,
|
|
|
105
105
|
aury/boot/common/exceptions/__init__.py,sha256=aS3rIXWc5qNNJbfMs_PNmBlFsyNdKUMErziNMd1yoB8,3176
|
|
106
106
|
aury/boot/common/i18n/__init__.py,sha256=2cy4kteU-1YsAHkuMDTr2c5o4G33fvtYUGKtzEy1Q6c,394
|
|
107
107
|
aury/boot/common/i18n/translator.py,sha256=_vEDL2SjEI1vwMNHbnJb0xErKUPLm7VmhyOuMBeCqRM,8412
|
|
108
|
-
aury/boot/common/logging/__init__.py,sha256=
|
|
109
|
-
aury/boot/common/logging/context.py,sha256=
|
|
108
|
+
aury/boot/common/logging/__init__.py,sha256=Z6pMdjXZMWXz6w-1ev0h6QN3G3c8Cz7EpOqZh42kgQ0,1612
|
|
109
|
+
aury/boot/common/logging/context.py,sha256=U78XwjVcDP7Y96VTGclCcP09p0ZWCmiEYzVhp1Obytw,2058
|
|
110
110
|
aury/boot/common/logging/decorators.py,sha256=UaGMhRJdARNJ2VgCuRwaNX0DD5wIc1gAl6NDj7u8K2c,3354
|
|
111
111
|
aury/boot/common/logging/format.py,sha256=V1VoZCPFAaAXy20n3WehOsZGTHuboYMHnSFGa0GxhdU,9648
|
|
112
112
|
aury/boot/common/logging/setup.py,sha256=ZPxOHJD8Fw4KxKPgsf8ZHQ2mWuXxKh4EJtXXvGY7Hgo,9422
|
|
@@ -154,7 +154,7 @@ aury/boot/infrastructure/clients/redis/manager.py,sha256=Dmfu6OWGe_PrBr9wbOhl3su
|
|
|
154
154
|
aury/boot/infrastructure/database/__init__.py,sha256=MsHNyrJ2CZJT-lbVZzOAJ0nFfFEmHrJqC0zw-cFS768,888
|
|
155
155
|
aury/boot/infrastructure/database/config.py,sha256=5LYy4DuLL0XNjVnX2HUcrMh3c71eeZa-vWGM8QCkL0U,1408
|
|
156
156
|
aury/boot/infrastructure/database/exceptions.py,sha256=hUjsU23c0eMwogSDrKq_bQ6zvnY7PQSGaitbCEhhDZQ,766
|
|
157
|
-
aury/boot/infrastructure/database/manager.py,sha256=
|
|
157
|
+
aury/boot/infrastructure/database/manager.py,sha256=lRSKL9jDkSdaA99DjD1k4EoQuQsn2vbh9XQQBOt9dM0,10317
|
|
158
158
|
aury/boot/infrastructure/database/query_tools/__init__.py,sha256=D-8Wxm8x48rg9G95aH_b4re7S4_IGJO9zznArYXldFo,5500
|
|
159
159
|
aury/boot/infrastructure/database/strategies/__init__.py,sha256=foj_2xEsgLZxshpK65YAhdJ2UZyh1tKvGRq6sre8pQY,5909
|
|
160
160
|
aury/boot/infrastructure/di/__init__.py,sha256=qFYlk265d6_rS8OiX37_wOc7mBFw8hk3yipDYNkyjQg,231
|
|
@@ -192,7 +192,7 @@ aury/boot/testing/client.py,sha256=KOg1EemuIVsBG68G5y0DjSxZGcIQVdWQ4ASaHE3o1R0,4
|
|
|
192
192
|
aury/boot/testing/factory.py,sha256=8GvwX9qIDu0L65gzJMlrWB0xbmJ-7zPHuwk3eECULcg,5185
|
|
193
193
|
aury/boot/toolkit/__init__.py,sha256=AcyVb9fDf3CaEmJPNkWC4iGv32qCPyk4BuFKSuNiJRQ,334
|
|
194
194
|
aury/boot/toolkit/http/__init__.py,sha256=zIPmpIZ9Qbqe25VmEr7jixoY2fkRbLm7NkCB9vKpg6I,11039
|
|
195
|
-
aury_boot-0.0.
|
|
196
|
-
aury_boot-0.0.
|
|
197
|
-
aury_boot-0.0.
|
|
198
|
-
aury_boot-0.0.
|
|
195
|
+
aury_boot-0.0.15.dist-info/METADATA,sha256=KpgZbUBGqUhwH-65xmNrP3H8699sx82WkG3cj-a5-gw,7981
|
|
196
|
+
aury_boot-0.0.15.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
197
|
+
aury_boot-0.0.15.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
|
|
198
|
+
aury_boot-0.0.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|