aury-boot 0.0.26__py3-none-any.whl → 0.0.28__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/config/settings.py +31 -0
- aury/boot/commands/templates/project/AGENTS.md.tpl +2 -0
- aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl +31 -0
- aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +8 -6
- aury/boot/commands/templates/project/env_templates/messaging.tpl +8 -5
- aury/boot/domain/repository/impl.py +164 -0
- {aury_boot-0.0.26.dist-info → aury_boot-0.0.28.dist-info}/METADATA +1 -1
- {aury_boot-0.0.26.dist-info → aury_boot-0.0.28.dist-info}/RECORD +11 -11
- {aury_boot-0.0.26.dist-info → aury_boot-0.0.28.dist-info}/WHEEL +0 -0
- {aury_boot-0.0.26.dist-info → aury_boot-0.0.28.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.28'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 28)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -246,6 +246,27 @@ class CacheSettings(BaseModel):
|
|
|
246
246
|
)
|
|
247
247
|
|
|
248
248
|
|
|
249
|
+
class ChannelSettings(BaseModel):
|
|
250
|
+
"""流式通道配置(单实例)。
|
|
251
|
+
|
|
252
|
+
环境变量格式: CHANNEL__{FIELD}
|
|
253
|
+
示例: CHANNEL__BACKEND, CHANNEL__URL
|
|
254
|
+
|
|
255
|
+
支持的后端类型:
|
|
256
|
+
- memory: 内存后端(默认,单进程)
|
|
257
|
+
- redis: Redis Pub/Sub(多进程/分布式)
|
|
258
|
+
"""
|
|
259
|
+
|
|
260
|
+
backend: str = Field(
|
|
261
|
+
default="",
|
|
262
|
+
description="通道后端 (memory/redis),空字符串表示不启用"
|
|
263
|
+
)
|
|
264
|
+
url: str | None = Field(
|
|
265
|
+
default=None,
|
|
266
|
+
description="Redis URL(当 backend=redis 时需要)"
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
|
|
249
270
|
class StorageSettings(BaseModel):
|
|
250
271
|
"""对象存储组件接入配置(Application 层)。
|
|
251
272
|
|
|
@@ -779,6 +800,7 @@ class BaseConfig(BaseSettings):
|
|
|
779
800
|
# ========== 数据与缓存 ==========
|
|
780
801
|
database: DatabaseSettings = Field(default_factory=DatabaseSettings)
|
|
781
802
|
cache: CacheSettings = Field(default_factory=CacheSettings)
|
|
803
|
+
channel: ChannelSettings = Field(default_factory=ChannelSettings)
|
|
782
804
|
storage: StorageSettings = Field(default_factory=StorageSettings)
|
|
783
805
|
|
|
784
806
|
# 迁移配置
|
|
@@ -879,10 +901,18 @@ class BaseConfig(BaseSettings):
|
|
|
879
901
|
"""获取所有通道实例配置。
|
|
880
902
|
|
|
881
903
|
从环境变量解析 CHANNEL__{INSTANCE}__{FIELD} 格式的配置。
|
|
904
|
+
如果没有配置多实例,返回从单实例配置转换的 default 实例。
|
|
882
905
|
"""
|
|
883
906
|
if self._channels is None:
|
|
884
907
|
loader = MultiInstanceConfigLoader("CHANNEL", ChannelInstanceConfig)
|
|
885
908
|
self._channels = loader.load()
|
|
909
|
+
if not self._channels and self.channel.backend:
|
|
910
|
+
self._channels = {
|
|
911
|
+
"default": ChannelInstanceConfig(
|
|
912
|
+
backend=self.channel.backend,
|
|
913
|
+
url=self.channel.url,
|
|
914
|
+
)
|
|
915
|
+
}
|
|
886
916
|
return self._channels
|
|
887
917
|
|
|
888
918
|
def get_mqs(self) -> dict[str, MQInstanceConfig]:
|
|
@@ -929,6 +959,7 @@ __all__ = [
|
|
|
929
959
|
"CacheInstanceConfig",
|
|
930
960
|
"CacheSettings",
|
|
931
961
|
"ChannelInstanceConfig",
|
|
962
|
+
"ChannelSettings",
|
|
932
963
|
"DatabaseInstanceConfig",
|
|
933
964
|
"DatabaseSettings",
|
|
934
965
|
"EventInstanceConfig",
|
|
@@ -75,6 +75,8 @@ mypy {package_name}/
|
|
|
75
75
|
2. **[aury_docs/02-repository.md](./aury_docs/02-repository.md)** - Repository 使用
|
|
76
76
|
- BaseRepository API
|
|
77
77
|
- Filters 语法(__gt, __like 等)
|
|
78
|
+
- Cursor 分页(推荐,性能更优)
|
|
79
|
+
- 流式查询(大数据处理)
|
|
78
80
|
- 自动提交机制
|
|
79
81
|
|
|
80
82
|
3. **[aury_docs/03-service.md](./aury_docs/03-service.md)** - Service 编写与事务
|
|
@@ -72,6 +72,37 @@ result = await repo.paginate(
|
|
|
72
72
|
# - result.has_next: bool # 是否有下一页
|
|
73
73
|
# - result.has_prev: bool # 是否有上一页
|
|
74
74
|
|
|
75
|
+
# === Cursor 分页(推荐,性能更优) ===
|
|
76
|
+
from aury.boot.domain.pagination import CursorPaginationParams
|
|
77
|
+
|
|
78
|
+
# 第一页
|
|
79
|
+
result = await repo.cursor_paginate(
|
|
80
|
+
CursorPaginationParams(limit=20),
|
|
81
|
+
is_active=True,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# 下一页(带上 cursor)
|
|
85
|
+
result = await repo.cursor_paginate(
|
|
86
|
+
CursorPaginationParams(cursor=result.next_cursor, limit=20),
|
|
87
|
+
is_active=True,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# CursorPaginationResult 结构:
|
|
91
|
+
# - result.items: list[T] # 数据列表
|
|
92
|
+
# - result.next_cursor: str | None # 下一页游标
|
|
93
|
+
# - result.prev_cursor: str | None # 上一页游标
|
|
94
|
+
# - result.has_next: bool # 是否有下一页
|
|
95
|
+
# - result.has_prev: bool # 是否有上一页
|
|
96
|
+
|
|
97
|
+
# === 流式查询(大数据处理) ===
|
|
98
|
+
# 逐条流式处理,不会一次性加载到内存
|
|
99
|
+
async for user in repo.stream(batch_size=1000, is_active=True):
|
|
100
|
+
await process(user)
|
|
101
|
+
|
|
102
|
+
# 批量流式处理
|
|
103
|
+
async for batch in repo.stream_batches(batch_size=1000):
|
|
104
|
+
await bulk_sync_to_es(batch)
|
|
105
|
+
|
|
75
106
|
# === 创建 ===
|
|
76
107
|
user = await repo.create({{"name": "Alice", "email": "a@b.com"}})
|
|
77
108
|
users = await repo.batch_create([{{"name": "A"}}, {{"name": "B"}}]) # 返回实体
|
|
@@ -139,12 +139,14 @@ Redis 后端使用 Redis 原生 `PSUBSCRIBE`,内存后端使用 `fnmatch` 实
|
|
|
139
139
|
## 13.5 环境变量
|
|
140
140
|
|
|
141
141
|
```bash
|
|
142
|
-
#
|
|
142
|
+
# 单实例配置
|
|
143
143
|
CHANNEL__BACKEND=memory
|
|
144
|
+
# 或 Redis 后端
|
|
145
|
+
CHANNEL__BACKEND=redis
|
|
146
|
+
CHANNEL__URL=redis://localhost:6379/3
|
|
144
147
|
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
CHANNEL__NOTIFICATIONS__URL=redis://localhost:6379/4
|
|
148
|
+
# 多实例配置(格式:CHANNEL__{{INSTANCE}}__{{FIELD}})
|
|
149
|
+
CHANNEL__SSE__BACKEND=memory
|
|
150
|
+
CHANNEL__NOTIFICATION__BACKEND=redis
|
|
151
|
+
CHANNEL__NOTIFICATION__URL=redis://localhost:6379/4
|
|
150
152
|
```
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
# =============================================================================
|
|
3
3
|
# 流式通道配置 (CHANNEL__) - SSE/实时通信
|
|
4
4
|
# =============================================================================
|
|
5
|
+
# 单实例配置:
|
|
6
|
+
# CHANNEL__BACKEND=memory
|
|
7
|
+
# CHANNEL__BACKEND=redis
|
|
8
|
+
# CHANNEL__URL=redis://localhost:6379/3
|
|
9
|
+
#
|
|
5
10
|
# 多实例配置 (格式: CHANNEL__{{INSTANCE}}__{{FIELD}}):
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
# CHANNEL__SHARED__KEY_PREFIX=channel:
|
|
10
|
-
# CHANNEL__SHARED__TTL=86400
|
|
11
|
+
# CHANNEL__SSE__BACKEND=memory
|
|
12
|
+
# CHANNEL__NOTIFICATION__BACKEND=redis
|
|
13
|
+
# CHANNEL__NOTIFICATION__URL=redis://localhost:6379/3
|
|
11
14
|
|
|
12
15
|
# =============================================================================
|
|
13
16
|
# 消息队列配置 (MQ__)
|
|
@@ -18,6 +18,8 @@ from aury.boot.common.logging import logger
|
|
|
18
18
|
from aury.boot.domain.exceptions import VersionConflictError
|
|
19
19
|
from aury.boot.domain.models import GUID, Base
|
|
20
20
|
from aury.boot.domain.pagination import (
|
|
21
|
+
CursorPaginationParams,
|
|
22
|
+
CursorPaginationResult,
|
|
21
23
|
PaginationParams,
|
|
22
24
|
PaginationResult,
|
|
23
25
|
SortParams,
|
|
@@ -263,6 +265,168 @@ class BaseRepository[ModelType: Base](IRepository[ModelType]):
|
|
|
263
265
|
pagination_params=pagination_params,
|
|
264
266
|
)
|
|
265
267
|
|
|
268
|
+
async def cursor_paginate(
|
|
269
|
+
self,
|
|
270
|
+
params: CursorPaginationParams,
|
|
271
|
+
cursor_field: str = "id",
|
|
272
|
+
**filters
|
|
273
|
+
) -> CursorPaginationResult[ModelType]:
|
|
274
|
+
"""基于游标的分页查询。
|
|
275
|
+
|
|
276
|
+
适用于无限滚动、大数据集等场景,性能优于 offset 分页。
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
params: 游标分页参数(cursor, limit, direction)
|
|
280
|
+
cursor_field: 游标字段名,默认 "id",必须是有序且唯一的字段
|
|
281
|
+
**filters: 过滤条件
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
CursorPaginationResult: 包含 items, next_cursor, prev_cursor, has_next, has_prev
|
|
285
|
+
|
|
286
|
+
示例:
|
|
287
|
+
# 第一页
|
|
288
|
+
result = await repo.cursor_paginate(
|
|
289
|
+
CursorPaginationParams(limit=20),
|
|
290
|
+
status="active"
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
# 下一页
|
|
294
|
+
result = await repo.cursor_paginate(
|
|
295
|
+
CursorPaginationParams(cursor=result.next_cursor, limit=20),
|
|
296
|
+
status="active"
|
|
297
|
+
)
|
|
298
|
+
"""
|
|
299
|
+
import base64
|
|
300
|
+
import json
|
|
301
|
+
|
|
302
|
+
query = self._build_base_query()
|
|
303
|
+
query = self._apply_filters(query, **filters)
|
|
304
|
+
|
|
305
|
+
cursor_attr = _get_model_attr(self._model_class, cursor_field)
|
|
306
|
+
if cursor_attr is None:
|
|
307
|
+
raise AttributeError(f"模型 {self._model_class.__name__} 没有 '{cursor_field}' 字段")
|
|
308
|
+
|
|
309
|
+
# 解码 cursor
|
|
310
|
+
cursor_value = None
|
|
311
|
+
if params.cursor:
|
|
312
|
+
try:
|
|
313
|
+
decoded = base64.urlsafe_b64decode(params.cursor.encode()).decode()
|
|
314
|
+
cursor_value = json.loads(decoded)
|
|
315
|
+
except Exception:
|
|
316
|
+
raise ValueError("无效的游标") from None
|
|
317
|
+
|
|
318
|
+
# 根据方向决定查询条件和排序
|
|
319
|
+
is_next = params.direction == "next"
|
|
320
|
+
if cursor_value is not None:
|
|
321
|
+
if is_next:
|
|
322
|
+
query = query.where(cursor_attr > cursor_value)
|
|
323
|
+
else:
|
|
324
|
+
query = query.where(cursor_attr < cursor_value)
|
|
325
|
+
|
|
326
|
+
# 排序
|
|
327
|
+
if is_next:
|
|
328
|
+
query = query.order_by(cursor_attr)
|
|
329
|
+
else:
|
|
330
|
+
query = query.order_by(cursor_attr.desc())
|
|
331
|
+
|
|
332
|
+
# 多取一条判断是否有更多
|
|
333
|
+
query = query.limit(params.limit + 1)
|
|
334
|
+
result = await self._session.execute(query)
|
|
335
|
+
items = list(result.scalars().all())
|
|
336
|
+
|
|
337
|
+
has_more = len(items) > params.limit
|
|
338
|
+
if has_more:
|
|
339
|
+
items = items[:params.limit]
|
|
340
|
+
|
|
341
|
+
# 反向查询时反转结果
|
|
342
|
+
if not is_next:
|
|
343
|
+
items = list(reversed(items))
|
|
344
|
+
|
|
345
|
+
# 生成游标
|
|
346
|
+
def encode_cursor(value) -> str:
|
|
347
|
+
return base64.urlsafe_b64encode(json.dumps(value).encode()).decode()
|
|
348
|
+
|
|
349
|
+
next_cursor = None
|
|
350
|
+
prev_cursor = None
|
|
351
|
+
|
|
352
|
+
if items:
|
|
353
|
+
last_value = getattr(items[-1], cursor_field)
|
|
354
|
+
first_value = getattr(items[0], cursor_field)
|
|
355
|
+
|
|
356
|
+
if is_next:
|
|
357
|
+
if has_more:
|
|
358
|
+
next_cursor = encode_cursor(last_value)
|
|
359
|
+
if cursor_value is not None:
|
|
360
|
+
prev_cursor = encode_cursor(first_value)
|
|
361
|
+
else:
|
|
362
|
+
if cursor_value is not None:
|
|
363
|
+
next_cursor = encode_cursor(last_value)
|
|
364
|
+
if has_more:
|
|
365
|
+
prev_cursor = encode_cursor(first_value)
|
|
366
|
+
|
|
367
|
+
return CursorPaginationResult.create(
|
|
368
|
+
items=items,
|
|
369
|
+
next_cursor=next_cursor,
|
|
370
|
+
prev_cursor=prev_cursor,
|
|
371
|
+
limit=params.limit,
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
async def stream(
|
|
375
|
+
self,
|
|
376
|
+
batch_size: int = 1000,
|
|
377
|
+
**filters
|
|
378
|
+
):
|
|
379
|
+
"""流式查询,使用数据库原生 server-side cursor。
|
|
380
|
+
|
|
381
|
+
适用于大数据集处理,避免一次性加载所有数据到内存。
|
|
382
|
+
|
|
383
|
+
Args:
|
|
384
|
+
batch_size: 每批次获取的记录数,默认 1000
|
|
385
|
+
**filters: 过滤条件
|
|
386
|
+
|
|
387
|
+
Yields:
|
|
388
|
+
ModelType: 模型实例
|
|
389
|
+
|
|
390
|
+
示例:
|
|
391
|
+
async for user in repo.stream(batch_size=500, status="active"):
|
|
392
|
+
process(user)
|
|
393
|
+
"""
|
|
394
|
+
query = self._build_base_query()
|
|
395
|
+
query = self._apply_filters(query, **filters)
|
|
396
|
+
|
|
397
|
+
async with self._session.stream_scalars(
|
|
398
|
+
query.execution_options(yield_per=batch_size)
|
|
399
|
+
) as result:
|
|
400
|
+
async for item in result:
|
|
401
|
+
yield item
|
|
402
|
+
|
|
403
|
+
async def stream_batches(
|
|
404
|
+
self,
|
|
405
|
+
batch_size: int = 1000,
|
|
406
|
+
**filters
|
|
407
|
+
):
|
|
408
|
+
"""批量流式查询,每次返回一批数据。
|
|
409
|
+
|
|
410
|
+
Args:
|
|
411
|
+
batch_size: 每批次的记录数,默认 1000
|
|
412
|
+
**filters: 过滤条件
|
|
413
|
+
|
|
414
|
+
Yields:
|
|
415
|
+
list[ModelType]: 一批模型实例
|
|
416
|
+
|
|
417
|
+
示例:
|
|
418
|
+
async for batch in repo.stream_batches(batch_size=500):
|
|
419
|
+
bulk_process(batch)
|
|
420
|
+
"""
|
|
421
|
+
query = self._build_base_query()
|
|
422
|
+
query = self._apply_filters(query, **filters)
|
|
423
|
+
|
|
424
|
+
async with self._session.stream_scalars(
|
|
425
|
+
query.execution_options(yield_per=batch_size)
|
|
426
|
+
) as result:
|
|
427
|
+
async for partition in result.partitions():
|
|
428
|
+
yield list(partition)
|
|
429
|
+
|
|
266
430
|
async def count(self, **filters) -> int:
|
|
267
431
|
query = select(func.count()).select_from(self._model_class)
|
|
268
432
|
if hasattr(self._model_class, "deleted_at"):
|
|
@@ -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=rsZxmANBVfE-nN63y-ZZ_71Lkm6YP4u4TgVEBJV3mNM,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
|
|
@@ -14,7 +14,7 @@ aury/boot/application/app/middlewares.py,sha256=BXe2H14FHzJUVpQM6DZUm-zfZRXSXIi1
|
|
|
14
14
|
aury/boot/application/app/startup.py,sha256=DHKt3C2G7V5XfFr1SQMl14tNzcuDd9MqUVAxi274HDQ,7873
|
|
15
15
|
aury/boot/application/config/__init__.py,sha256=Dd-myRSBCM18DXXsi863h0cJG5VFrI10xMRtjnvelGo,1894
|
|
16
16
|
aury/boot/application/config/multi_instance.py,sha256=RXSp-xP8-bKMDEhq3SeL7T3lS8-vpRlvBEVBuZVjVK4,6475
|
|
17
|
-
aury/boot/application/config/settings.py,sha256
|
|
17
|
+
aury/boot/application/config/settings.py,sha256=-afn5p9rIS4_63OLqfG-mrTl2UergOZb6z8I5GyYOAY,31621
|
|
18
18
|
aury/boot/application/constants/__init__.py,sha256=DCXs13_VVaQWHqO-qpJoZwRd7HIexiirtw_nu8msTXE,340
|
|
19
19
|
aury/boot/application/constants/components.py,sha256=VBCgxJ_iZXjEZyUkC13ZCdqPmdKq-lQmU7jQpXnTa2Y,1056
|
|
20
20
|
aury/boot/application/constants/scheduler.py,sha256=S77FBIvHlyruvlabRWZJ2J1YAs2xWXPQI2yuGdGUDNA,471
|
|
@@ -61,7 +61,7 @@ aury/boot/commands/templates/generate/model.py.tpl,sha256=knFwMyGZ7wMpzH4_bQD_V1
|
|
|
61
61
|
aury/boot/commands/templates/generate/repository.py.tpl,sha256=xoEg6lPAaLIRDeFy4I0FBsPPVLSy91h6xosAlaCL_mM,590
|
|
62
62
|
aury/boot/commands/templates/generate/schema.py.tpl,sha256=HIaY5B0UG_S188nQLrZDEJ0q73WPdb7BmCdc0tseZA4,545
|
|
63
63
|
aury/boot/commands/templates/generate/service.py.tpl,sha256=2hwQ8e4a5d_bIMx_jGDobdmKPMFLBlfQrQVQH4Ym5k4,1842
|
|
64
|
-
aury/boot/commands/templates/project/AGENTS.md.tpl,sha256
|
|
64
|
+
aury/boot/commands/templates/project/AGENTS.md.tpl,sha256=-KrVhPqwVaf1IWRIl4L9Yb0LSRihq69ZaZ-ynnGM4W8,7882
|
|
65
65
|
aury/boot/commands/templates/project/README.md.tpl,sha256=oCeBiukk6Pa3hrCKybkfM2sIRHsPZ15nlwuFTUSFDwY,2459
|
|
66
66
|
aury/boot/commands/templates/project/admin_console_init.py.tpl,sha256=K81L14thyEhRA8lFCQJVZL_NU22-sBz0xS68MJPeoCo,1541
|
|
67
67
|
aury/boot/commands/templates/project/config.py.tpl,sha256=H_B05FypBJxTjb7qIL91zC1C9e37Pk7C9gO0-b3CqNs,1009
|
|
@@ -70,7 +70,7 @@ aury/boot/commands/templates/project/gitignore.tpl,sha256=OI0nt9u2E9EC-jAMoh3gpq
|
|
|
70
70
|
aury/boot/commands/templates/project/main.py.tpl,sha256=Q61ve3o1VkNPv8wcQK7lUosne18JWYeItxoXVNNoYJM,1070
|
|
71
71
|
aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl,sha256=8Aept3yEAe9cVdRvkddr_oEF-lr2riPXYRzBuw_6DBA,2138
|
|
72
72
|
aury/boot/commands/templates/project/aury_docs/01-model.md.tpl,sha256=1mQ3hGDxqEZjev4CD5-3dzYRFVonPNcAaStI1UBEUyM,6811
|
|
73
|
-
aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl,sha256=
|
|
73
|
+
aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl,sha256=JfUVdrIgW7_J6JGCcB-_uP_x-gCtjKiewwGv4Xr44QI,7803
|
|
74
74
|
aury/boot/commands/templates/project/aury_docs/03-service.md.tpl,sha256=Dg_8RGSeRmmyQrhhpppEoxl-6C5pNe9M2OzVOl1kjSk,13102
|
|
75
75
|
aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl,sha256=ZwwKhUbLI--PEEmwnuo2fIZrhCEZagBN6fRNDTFCnNk,2891
|
|
76
76
|
aury/boot/commands/templates/project/aury_docs/05-api.md.tpl,sha256=oPzda3V6ZPDDEW-5MwyzmsMRuu5mXrsRGEq3lj0M-58,2997
|
|
@@ -81,7 +81,7 @@ aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl,sha256=swHOQ_pWPt
|
|
|
81
81
|
aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl,sha256=mhe0j0S51ndPJLjaQ6yD8OPYBEO02NHumJVbBvz2qkw,4320
|
|
82
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
|
-
aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=
|
|
84
|
+
aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=aGpf2phQBMRs6Uh1DfjNl06pC_niea91Sm8sTq_NFec,4443
|
|
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
87
|
aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl,sha256=pkmJkZw2Ca6_uYk2jZvAb8DozjBa2tWq_t3gtq1lFSk,11456
|
|
@@ -91,7 +91,7 @@ aury/boot/commands/templates/project/env_templates/admin.tpl,sha256=wWt3iybOpBHt
|
|
|
91
91
|
aury/boot/commands/templates/project/env_templates/cache.tpl,sha256=_sK-p_FECj4mVvggNvgb4Wu0yGii0Ocz560syG7DU2c,498
|
|
92
92
|
aury/boot/commands/templates/project/env_templates/database.tpl,sha256=2lWzTKt4X0SpeBBCkrDV90Di4EfoAuqYzhVsh74vTUI,907
|
|
93
93
|
aury/boot/commands/templates/project/env_templates/log.tpl,sha256=x5rkrEFJISH0gaCcr-wTCbDYtyFnlLNJpY789fqjZgc,754
|
|
94
|
-
aury/boot/commands/templates/project/env_templates/messaging.tpl,sha256=
|
|
94
|
+
aury/boot/commands/templates/project/env_templates/messaging.tpl,sha256=ZaNBM4pq0pgkTXbCBx_sgjm8QKEBfW1nSnsKZfHu-HM,1771
|
|
95
95
|
aury/boot/commands/templates/project/env_templates/rpc.tpl,sha256=FhweCFakawGLSs01a_BkmZo11UhWax2-VCBudHj68WA,1163
|
|
96
96
|
aury/boot/commands/templates/project/env_templates/scheduler.tpl,sha256=c8Grcs1rgBB58RHlxqmDMPHQl8BnbcqNW473ctmsojU,752
|
|
97
97
|
aury/boot/commands/templates/project/env_templates/service.tpl,sha256=b-a2GyRyoaunbDj_2kaSw3OFxcugscmPvUBG7w0XO8c,710
|
|
@@ -124,7 +124,7 @@ aury/boot/domain/models/mixins.py,sha256=7s4m4fzt0vWX71aTHgsoagjxSZZZ4_xSea_m0D8
|
|
|
124
124
|
aury/boot/domain/models/models.py,sha256=hNze58wPZkZ8QG2_pyszDsyKNjz2UgiRDzmneiCWLQs,2728
|
|
125
125
|
aury/boot/domain/pagination/__init__.py,sha256=HSU_NyLP-ij7ZDUi-ARSSvNkvhW1_wON2Zvu2QlF6HM,11890
|
|
126
126
|
aury/boot/domain/repository/__init__.py,sha256=dnmN8xFu1ASbLnzL6vx8gMoch7xBGxkJkxs9G1iGLGg,490
|
|
127
|
-
aury/boot/domain/repository/impl.py,sha256=
|
|
127
|
+
aury/boot/domain/repository/impl.py,sha256=BeWe6pMBP_OvxX91FmckxAZlM2qejol06If_UBy8FtU,22016
|
|
128
128
|
aury/boot/domain/repository/interceptors.py,sha256=SCTjRmBYwevAMlJ8U1uw-_McsDetNNQ7q0Da5lmfj_E,1238
|
|
129
129
|
aury/boot/domain/repository/interface.py,sha256=CmkiqVhhHPx_xcpuBCz11Vr26-govwYBxFsQ8myEVyw,2904
|
|
130
130
|
aury/boot/domain/repository/query_builder.py,sha256=pFErMzsBql-T6gBX0S4FxIheCkNaGjpSewzcJ2DxrUU,10890
|
|
@@ -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.28.dist-info/METADATA,sha256=7fabDsArEBQ_L5MoamQPJa9xmdi19-CLTSGG5YgPQPw,7695
|
|
196
|
+
aury_boot-0.0.28.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
197
|
+
aury_boot-0.0.28.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
|
|
198
|
+
aury_boot-0.0.28.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|