aury-boot 0.0.5__py3-none-any.whl → 0.0.7__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 (49) hide show
  1. aury/boot/_version.py +2 -2
  2. aury/boot/application/__init__.py +15 -0
  3. aury/boot/application/adapter/__init__.py +112 -0
  4. aury/boot/application/adapter/base.py +511 -0
  5. aury/boot/application/adapter/config.py +242 -0
  6. aury/boot/application/adapter/decorators.py +259 -0
  7. aury/boot/application/adapter/exceptions.py +202 -0
  8. aury/boot/application/adapter/http.py +325 -0
  9. aury/boot/application/app/middlewares.py +7 -4
  10. aury/boot/application/config/multi_instance.py +42 -26
  11. aury/boot/application/config/settings.py +111 -191
  12. aury/boot/application/middleware/logging.py +14 -1
  13. aury/boot/commands/generate.py +22 -22
  14. aury/boot/commands/init.py +41 -9
  15. aury/boot/commands/templates/project/AGENTS.md.tpl +8 -4
  16. aury/boot/commands/templates/project/aury_docs/01-model.md.tpl +17 -16
  17. aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +82 -43
  18. aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl +14 -14
  19. aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +40 -28
  20. aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +9 -9
  21. aury/boot/commands/templates/project/aury_docs/15-events.md.tpl +8 -8
  22. aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +403 -0
  23. aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +19 -19
  24. aury/boot/commands/templates/project/config.py.tpl +10 -10
  25. aury/boot/commands/templates/project/env_templates/_header.tpl +10 -0
  26. aury/boot/commands/templates/project/env_templates/admin.tpl +49 -0
  27. aury/boot/commands/templates/project/env_templates/cache.tpl +14 -0
  28. aury/boot/commands/templates/project/env_templates/database.tpl +22 -0
  29. aury/boot/commands/templates/project/env_templates/log.tpl +18 -0
  30. aury/boot/commands/templates/project/env_templates/messaging.tpl +46 -0
  31. aury/boot/commands/templates/project/env_templates/rpc.tpl +28 -0
  32. aury/boot/commands/templates/project/env_templates/scheduler.tpl +18 -0
  33. aury/boot/commands/templates/project/env_templates/service.tpl +18 -0
  34. aury/boot/commands/templates/project/env_templates/storage.tpl +38 -0
  35. aury/boot/commands/templates/project/env_templates/third_party.tpl +43 -0
  36. aury/boot/common/logging/__init__.py +26 -674
  37. aury/boot/common/logging/context.py +132 -0
  38. aury/boot/common/logging/decorators.py +118 -0
  39. aury/boot/common/logging/format.py +315 -0
  40. aury/boot/common/logging/setup.py +214 -0
  41. aury/boot/infrastructure/database/config.py +6 -14
  42. aury/boot/infrastructure/tasks/config.py +5 -13
  43. aury/boot/infrastructure/tasks/manager.py +8 -4
  44. aury/boot/testing/base.py +2 -2
  45. {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.dist-info}/METADATA +2 -1
  46. {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.dist-info}/RECORD +48 -27
  47. aury/boot/commands/templates/project/env.example.tpl +0 -281
  48. {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.dist-info}/WHEEL +0 -0
  49. {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.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 层配置,不依赖 application 层。
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(BaseSettings):
20
+ class DatabaseConfig(BaseModel):
22
21
  """数据库基础设施配置。
23
22
 
24
- Infrastructure 层直接使用的数据库配置。
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 层配置,不依赖 application 层。
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(BaseSettings):
11
+ class TaskConfig(BaseModel):
13
12
  """任务队列基础设施配置。
14
13
 
15
- Infrastructure 层直接使用的任务队列配置。
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 self._task_config.broker_url
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.5
3
+ Version: 0.0.7
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=YRV1ohn6CdKEhsUOmFFMmr5UTjMv4Ydw3WJGxF2BHBs,704
3
- aury/boot/application/__init__.py,sha256=w-t0YGK2dXvcbfYT3JV-B7eEHozchd8cBfTOX1-rDr0,2749
2
+ aury/boot/_version.py,sha256=AV58KqMkBGaCvmPdbd3g9huyNXfIVxjw8QbCMdaeivU,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=iMi-v-WhPXYtE4JrKKiGmw2G_l5LpYxsn8GVbM0zD9k,3113
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=pBRzOsseYowk9FXLPNG0m_p0daDFQVayFshSRl_tsnw,5987
11
- aury/boot/application/config/settings.py,sha256=-YQawRiYWnYbj_gZrCjT5dRtLQxRCVVSA7eKHq_6s5k,30795
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=MSe3j_ku9y9caXM5i0e0CyOAr7tqAKZCbfgEabxKBiU,11886
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=T0atHRU3CFyCjOhue0s0uGgkE7P1dSi1NMlSB0p-5EI,44482
44
- aury/boot/commands/init.py,sha256=f87Thal-vn5ybMBpanHHouYix885It1DcfhhRFm4amE,31496
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=WlhgAoNGbMkgN_ha99grbsW01VfkYxRqYFSaLaIuMmo,7195
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=5WPZwjDJhicmaM-2DBR60SaTKVMaurJc2OQ_xwhgXsQ,768
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=2JCasqHwPmeJZ9JDXs6BG0tRby2ITN6fjoICDGxqAgM,6815
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=FSM3BlPSUzAr2-YYG2xM3YViXC6qXyXuM6KX8KARRyk,2299
77
- aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl,sha256=ypz-Wme0TR_ibFSlcxm5KFatp9_bcmfcZtKziTQFKgE,1868
78
- aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=Dj_bqJO9z-sW_tnGnP2vL_rPex1mVLI2J5o1MEO_RZc,2498
79
- aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl,sha256=BoPlCPYC3zrediFSQjEuFah7Xvl2tfK8rjQLAZSQUso,2382
80
- aury/boot/commands/templates/project/aury_docs/15-events.md.tpl,sha256=A7MRcGbYRPgVk2wYz7GMVaok2XHodO07v9s9NBwvCGc,3348
81
- aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl,sha256=g6xOdbfWf1yGL2HqREK6diWQiZUDgMllYGu-7-E-tJY,3003
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=jdiHHTosY24kpgwXAwJbmAxkd_0WI2rTSn3JLhdvgGc,1159
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=HsQStCB9_QOGjDhrqhbe9UqNKtnzQ7E21yLHu6w-LOg,1951
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=QU6euBwaEHLdWlzcIHcdXwCNNY3xQBv6eWkFlsY5E5U,22477
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=fHxeIFrkatCp_kXh6imTP3WQgkHd7DeR99O7bO7iHSs,1625
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=0e7uAVu9OIZd0r0elN_BQa6k0vCY7r8Ho4zk4ig0s2Y,930
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=xVo22Xk9k4NM04wETUDaVg6DkWw2Nc5ksfwKWBtHncU,17162
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=08FFwLohQV5FsWmZvLss-3vLpn0Fp6V0F17d9D1mBLM,3721
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.5.dist-info/METADATA,sha256=xVbiZzJ27k9kmk_KiqSTAw8x7BWuzZ3U49XvVSO270I,7923
174
- aury_boot-0.0.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
175
- aury_boot-0.0.5.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
176
- aury_boot-0.0.5.dist-info/RECORD,,
194
+ aury_boot-0.0.7.dist-info/METADATA,sha256=KDVN0P58T0I44zilxRlekVa9Pa63WCN16NMtqjNy6nU,7980
195
+ aury_boot-0.0.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
196
+ aury_boot-0.0.7.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
197
+ aury_boot-0.0.7.dist-info/RECORD,,