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.
- 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.7.dist-info}/METADATA +2 -1
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.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.7.dist-info}/WHEEL +0 -0
- {aury_boot-0.0.5.dist-info → aury_boot-0.0.7.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 健康检查配置 (HEALTH_CHECK__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 健康检查端点路径
|
|
6
|
+
# HEALTH_CHECK__PATH=/api/health
|
|
7
|
+
# 是否启用健康检查端点
|
|
8
|
+
# HEALTH_CHECK__ENABLED=true
|
|
9
|
+
|
|
10
|
+
# =============================================================================
|
|
11
|
+
# CORS 配置 (CORS__)
|
|
12
|
+
# =============================================================================
|
|
13
|
+
# 允许的 CORS 源(生产环境应设置具体域名)
|
|
14
|
+
# CORS__ORIGINS=["*"]
|
|
15
|
+
# 是否允许 CORS 凭据
|
|
16
|
+
# CORS__ALLOW_CREDENTIALS=true
|
|
17
|
+
# 允许的 CORS 方法
|
|
18
|
+
# CORS__ALLOW_METHODS=["*"]
|
|
19
|
+
# 允许的 CORS 头
|
|
20
|
+
# CORS__ALLOW_HEADERS=["*"]
|
|
21
|
+
|
|
22
|
+
# =============================================================================
|
|
23
|
+
# 管理后台配置 (ADMIN__) - SQLAdmin Admin Console
|
|
24
|
+
# =============================================================================
|
|
25
|
+
# 是否启用管理后台(生产建议仅内网或配合反向代理)
|
|
26
|
+
# ADMIN__ENABLED=false
|
|
27
|
+
# 管理后台路径(默认 /api/admin-console,避免与业务 URL 冲突)
|
|
28
|
+
# ADMIN__PATH=/api/admin-console
|
|
29
|
+
#
|
|
30
|
+
# SQLAdmin 通常要求同步 SQLAlchemy Engine:
|
|
31
|
+
# - 若 DATABASE__URL 使用的是异步驱动(如 postgresql+asyncpg),建议显式提供同步 URL 覆盖
|
|
32
|
+
# ADMIN__DATABASE_URL=postgresql+psycopg://user:pass@localhost:5432/{project_name_snake}
|
|
33
|
+
#
|
|
34
|
+
# 可选:显式指定项目侧模块(用于注册 views/auth)
|
|
35
|
+
# ADMIN__VIEWS_MODULE={project_name_snake}.admin_console
|
|
36
|
+
#
|
|
37
|
+
# 认证配置 (嵌套格式: ADMIN__AUTH__{{FIELD}})
|
|
38
|
+
# ADMIN__AUTH__MODE=basic
|
|
39
|
+
# ADMIN__AUTH__SECRET_KEY=CHANGE_ME_TO_A_RANDOM_SECRET
|
|
40
|
+
#
|
|
41
|
+
# basic:登录页用户名/密码
|
|
42
|
+
# ADMIN__AUTH__BASIC_USERNAME=admin
|
|
43
|
+
# ADMIN__AUTH__BASIC_PASSWORD=change_me
|
|
44
|
+
#
|
|
45
|
+
# bearer:token 白名单(也支持在登录页输入 token)
|
|
46
|
+
# ADMIN__AUTH__BEARER_TOKENS=["change_me_token"]
|
|
47
|
+
#
|
|
48
|
+
# custom/jwt:自定义认证后端(动态导入)
|
|
49
|
+
# ADMIN__AUTH__BACKEND=yourpkg.admin_auth:backend
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 缓存配置 (CACHE__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 单实例配置:
|
|
6
|
+
# CACHE__CACHE_TYPE=memory
|
|
7
|
+
# CACHE__URL=redis://localhost:6379/0
|
|
8
|
+
# CACHE__MAX_SIZE=1000
|
|
9
|
+
|
|
10
|
+
# 多实例配置 (格式: CACHE__{{INSTANCE}}__{{FIELD}}):
|
|
11
|
+
# CACHE__DEFAULT__BACKEND=memory
|
|
12
|
+
# CACHE__DEFAULT__MAX_SIZE=1000
|
|
13
|
+
# CACHE__SESSION__BACKEND=redis
|
|
14
|
+
# CACHE__SESSION__URL=redis://localhost:6379/2
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 数据库配置 (DATABASE__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 单实例配置:
|
|
6
|
+
# DATABASE__URL=sqlite+aiosqlite:///./dev.db
|
|
7
|
+
# PostgreSQL: postgresql+asyncpg://user:pass@localhost:5432/{project_name_snake}
|
|
8
|
+
# MySQL: mysql+aiomysql://user:pass@localhost:3306/{project_name_snake}
|
|
9
|
+
|
|
10
|
+
# 连接池配置
|
|
11
|
+
# DATABASE__POOL_SIZE=5
|
|
12
|
+
# DATABASE__MAX_OVERFLOW=10
|
|
13
|
+
# DATABASE__POOL_RECYCLE=3600
|
|
14
|
+
# DATABASE__POOL_TIMEOUT=30
|
|
15
|
+
# DATABASE__POOL_PRE_PING=true
|
|
16
|
+
# DATABASE__ECHO=false
|
|
17
|
+
|
|
18
|
+
# 多实例配置 (格式: DATABASE__{{INSTANCE}}__{{FIELD}}):
|
|
19
|
+
# DATABASE__DEFAULT__URL=postgresql+asyncpg://user:pass@localhost:5432/{project_name_snake}
|
|
20
|
+
# DATABASE__DEFAULT__POOL_SIZE=5
|
|
21
|
+
# DATABASE__READONLY__URL=postgresql+asyncpg://user:pass@replica:5432/{project_name_snake}
|
|
22
|
+
# DATABASE__READONLY__POOL_SIZE=10
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 日志配置 (LOG__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 日志级别: DEBUG / INFO / WARNING / ERROR / CRITICAL
|
|
6
|
+
# LOG__LEVEL=INFO
|
|
7
|
+
# 日志文件目录
|
|
8
|
+
# LOG__DIR=logs
|
|
9
|
+
# 日志文件轮转时间 (HH:MM 格式)
|
|
10
|
+
# LOG__ROTATION_TIME=00:00
|
|
11
|
+
# 日志文件轮转大小阈值
|
|
12
|
+
# LOG__ROTATION_SIZE=100 MB
|
|
13
|
+
# 日志文件保留天数
|
|
14
|
+
# LOG__RETENTION_DAYS=7
|
|
15
|
+
# 是否启用日志文件轮转
|
|
16
|
+
# LOG__ENABLE_FILE_ROTATION=true
|
|
17
|
+
# 是否输出日志到控制台
|
|
18
|
+
# LOG__ENABLE_CONSOLE=true
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 流式通道配置 (CHANNEL__) - SSE/实时通信
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 多实例配置 (格式: CHANNEL__{{INSTANCE}}__{{FIELD}}):
|
|
6
|
+
# CHANNEL__DEFAULT__BACKEND=memory
|
|
7
|
+
# CHANNEL__SHARED__BACKEND=redis
|
|
8
|
+
# CHANNEL__SHARED__URL=redis://localhost:6379/3
|
|
9
|
+
# CHANNEL__SHARED__KEY_PREFIX=channel:
|
|
10
|
+
# CHANNEL__SHARED__TTL=86400
|
|
11
|
+
|
|
12
|
+
# =============================================================================
|
|
13
|
+
# 消息队列配置 (MQ__)
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# 单实例配置:
|
|
16
|
+
# MQ__ENABLED=false
|
|
17
|
+
# MQ__BROKER_URL=redis://localhost:6379/4
|
|
18
|
+
|
|
19
|
+
# 多实例配置 (格式: MQ__{{INSTANCE}}__{{FIELD}}):
|
|
20
|
+
# MQ__DEFAULT__BACKEND=redis
|
|
21
|
+
# MQ__DEFAULT__URL=redis://localhost:6379/4
|
|
22
|
+
# MQ__DEFAULT__MAX_CONNECTIONS=10
|
|
23
|
+
#
|
|
24
|
+
# RabbitMQ 后端:
|
|
25
|
+
# MQ__ORDERS__BACKEND=rabbitmq
|
|
26
|
+
# MQ__ORDERS__URL=amqp://guest:guest@localhost:5672/orders
|
|
27
|
+
# MQ__ORDERS__PREFETCH_COUNT=10
|
|
28
|
+
|
|
29
|
+
# =============================================================================
|
|
30
|
+
# 事件总线配置 (EVENT__)
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# 单实例配置:
|
|
33
|
+
# EVENT__BROKER_URL=
|
|
34
|
+
# EVENT__EXCHANGE_NAME=aury.events
|
|
35
|
+
|
|
36
|
+
# 多实例配置 (格式: EVENT__{{INSTANCE}}__{{FIELD}}):
|
|
37
|
+
# EVENT__DEFAULT__BACKEND=memory
|
|
38
|
+
# EVENT__DISTRIBUTED__BACKEND=redis
|
|
39
|
+
# EVENT__DISTRIBUTED__URL=redis://localhost:6379/5
|
|
40
|
+
# EVENT__DISTRIBUTED__KEY_PREFIX=events:
|
|
41
|
+
#
|
|
42
|
+
# RabbitMQ 后端:
|
|
43
|
+
# EVENT__DOMAIN__BACKEND=rabbitmq
|
|
44
|
+
# EVENT__DOMAIN__URL=amqp://guest:guest@localhost:5672/
|
|
45
|
+
# EVENT__DOMAIN__EXCHANGE_NAME=domain.events
|
|
46
|
+
# EVENT__DOMAIN__EXCHANGE_TYPE=topic
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# RPC 客户端配置 (RPC_CLIENT__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 服务地址映射 {service_name: url}
|
|
6
|
+
# RPC_CLIENT__SERVICES={"user-service": "http://localhost:8001"}
|
|
7
|
+
# 默认超时时间(秒)
|
|
8
|
+
# RPC_CLIENT__DEFAULT_TIMEOUT=30
|
|
9
|
+
# 默认重试次数
|
|
10
|
+
# RPC_CLIENT__DEFAULT_RETRY_TIMES=3
|
|
11
|
+
# DNS 解析使用的协议
|
|
12
|
+
# RPC_CLIENT__DNS_SCHEME=http
|
|
13
|
+
# DNS 解析默认端口
|
|
14
|
+
# RPC_CLIENT__DNS_PORT=80
|
|
15
|
+
# 是否使用 DNS 回退(K8s/Docker Compose 自动 DNS)
|
|
16
|
+
# RPC_CLIENT__USE_DNS_FALLBACK=true
|
|
17
|
+
|
|
18
|
+
# =============================================================================
|
|
19
|
+
# RPC 服务注册配置 (RPC_SERVICE__)
|
|
20
|
+
# =============================================================================
|
|
21
|
+
# 服务名称(用于注册)
|
|
22
|
+
# RPC_SERVICE__NAME={project_name_snake}
|
|
23
|
+
# 服务地址(用于注册)
|
|
24
|
+
# RPC_SERVICE__URL=http://localhost:8000
|
|
25
|
+
# 健康检查 URL(用于注册)
|
|
26
|
+
# RPC_SERVICE__HEALTH_CHECK_URL=http://localhost:8000/api/health
|
|
27
|
+
# 是否自动注册到服务注册中心
|
|
28
|
+
# RPC_SERVICE__AUTO_REGISTER=false
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 调度器配置 (SCHEDULER__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 是否在 API 服务中启用内嵌调度器
|
|
6
|
+
# SCHEDULER__ENABLED=true
|
|
7
|
+
# 定时任务模块列表(为空时自动发现 schedules 模块)
|
|
8
|
+
# SCHEDULER__SCHEDULE_MODULES=[]
|
|
9
|
+
|
|
10
|
+
# =============================================================================
|
|
11
|
+
# 任务队列配置 (TASK__)
|
|
12
|
+
# =============================================================================
|
|
13
|
+
# 任务队列代理 URL(如 Redis 或 RabbitMQ)
|
|
14
|
+
# TASK__BROKER_URL=redis://localhost:6379/1
|
|
15
|
+
# 最大重试次数
|
|
16
|
+
# TASK__MAX_RETRIES=3
|
|
17
|
+
# 任务超时时间(秒)
|
|
18
|
+
# TASK__TIMEOUT=3600
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 服务配置 (SERVICE__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 服务名称,用于日志目录区分
|
|
6
|
+
SERVICE__NAME={project_name_snake}
|
|
7
|
+
# 服务类型: api / worker
|
|
8
|
+
# SERVICE__TYPE=api
|
|
9
|
+
|
|
10
|
+
# =============================================================================
|
|
11
|
+
# 服务器配置 (SERVER__)
|
|
12
|
+
# =============================================================================
|
|
13
|
+
# SERVER__HOST=*********
|
|
14
|
+
# SERVER__PORT=8000
|
|
15
|
+
# 工作进程数(生产环境建议设为 CPU 核心数)
|
|
16
|
+
# SERVER__WORKERS=1
|
|
17
|
+
# 是否启用热重载(生产环境应设为 false)
|
|
18
|
+
# SERVER__RELOAD=true
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 数据库迁移配置 (MIGRATION__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Alembic 配置文件路径
|
|
6
|
+
# MIGRATION__CONFIG_PATH=alembic.ini
|
|
7
|
+
# Alembic 迁移脚本目录
|
|
8
|
+
# MIGRATION__SCRIPT_LOCATION=migrations
|
|
9
|
+
# 是否自动创建迁移配置和目录
|
|
10
|
+
# MIGRATION__AUTO_CREATE=true
|
|
11
|
+
|
|
12
|
+
# =============================================================================
|
|
13
|
+
# 对象存储配置 (STORAGE__) - 基于 aury-sdk-storage
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# 是否启用存储组件
|
|
16
|
+
# STORAGE__ENABLED=true
|
|
17
|
+
# 存储类型: local / s3 / cos / oss
|
|
18
|
+
# STORAGE__TYPE=local
|
|
19
|
+
#
|
|
20
|
+
# 本地存储(开发环境)
|
|
21
|
+
# STORAGE__BASE_PATH=./storage
|
|
22
|
+
#
|
|
23
|
+
# S3/COS/OSS 通用配置
|
|
24
|
+
# STORAGE__ACCESS_KEY_ID=AKIDxxxxx
|
|
25
|
+
# STORAGE__ACCESS_KEY_SECRET=xxxxx
|
|
26
|
+
# STORAGE__SESSION_TOKEN=
|
|
27
|
+
# STORAGE__ENDPOINT=https://cos.ap-guangzhou.myqcloud.com
|
|
28
|
+
# STORAGE__REGION=ap-guangzhou
|
|
29
|
+
# STORAGE__BUCKET_NAME=my-bucket-1250000000
|
|
30
|
+
# STORAGE__ADDRESSING_STYLE=virtual
|
|
31
|
+
#
|
|
32
|
+
# STS AssumeRole(可选,服务端自动刷新凭证)
|
|
33
|
+
# STORAGE__ROLE_ARN=
|
|
34
|
+
# STORAGE__ROLE_SESSION_NAME=aury-storage
|
|
35
|
+
# STORAGE__EXTERNAL_ID=
|
|
36
|
+
# STORAGE__STS_ENDPOINT=
|
|
37
|
+
# STORAGE__STS_REGION=
|
|
38
|
+
# STORAGE__STS_DURATION_SECONDS=3600
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# 第三方接口适配器配置 (THIRD_PARTY__)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 用于配置支付、短信、微信等第三方接口的模式切换和挡板设置
|
|
6
|
+
# 格式: THIRD_PARTY__{{ADAPTER_NAME}}__{{FIELD}}
|
|
7
|
+
#
|
|
8
|
+
# 模式说明:
|
|
9
|
+
# - real: 真实调用第三方接口(生产环境)
|
|
10
|
+
# - sandbox: 调用第三方沙箱环境(如果有)
|
|
11
|
+
# - mock: 使用本地挡板实现,不发出真实请求(测试/开发环境)
|
|
12
|
+
# - disabled: 禁用该接口,调用时抛出 AdapterDisabledError
|
|
13
|
+
#
|
|
14
|
+
# ---------- 支付接口示例 (PAYMENT) ----------
|
|
15
|
+
# THIRD_PARTY__PAYMENT__ENABLED=true
|
|
16
|
+
# THIRD_PARTY__PAYMENT__MODE=mock
|
|
17
|
+
# THIRD_PARTY__PAYMENT__BASE_URL=https://api.payment.com/v1
|
|
18
|
+
# THIRD_PARTY__PAYMENT__SANDBOX_URL=https://sandbox.payment.com/v1
|
|
19
|
+
# THIRD_PARTY__PAYMENT__API_KEY=sk_live_xxx
|
|
20
|
+
# THIRD_PARTY__PAYMENT__API_SECRET=
|
|
21
|
+
# THIRD_PARTY__PAYMENT__TIMEOUT=30
|
|
22
|
+
# THIRD_PARTY__PAYMENT__RETRY_TIMES=3
|
|
23
|
+
# THIRD_PARTY__PAYMENT__METHOD_MODES={"query": "real", "refund": "disabled"}
|
|
24
|
+
# THIRD_PARTY__PAYMENT__MOCK_STRATEGY=success
|
|
25
|
+
# THIRD_PARTY__PAYMENT__MOCK_DELAY=0.1
|
|
26
|
+
# THIRD_PARTY__PAYMENT__MOCK_DEFAULT_RESPONSE={"success": true, "mock": true}
|
|
27
|
+
#
|
|
28
|
+
# ---------- 短信接口示例 (SMS) ----------
|
|
29
|
+
# THIRD_PARTY__SMS__ENABLED=true
|
|
30
|
+
# THIRD_PARTY__SMS__MODE=mock
|
|
31
|
+
# THIRD_PARTY__SMS__BASE_URL=https://sms.aliyuncs.com
|
|
32
|
+
# THIRD_PARTY__SMS__API_KEY=LTAI5xxx
|
|
33
|
+
# THIRD_PARTY__SMS__API_SECRET=xxx
|
|
34
|
+
# THIRD_PARTY__SMS__TIMEOUT=10
|
|
35
|
+
# THIRD_PARTY__SMS__MOCK_STRATEGY=success
|
|
36
|
+
# THIRD_PARTY__SMS__MOCK_DEFAULT_RESPONSE={"code": "OK", "message": "mock sent"}
|
|
37
|
+
#
|
|
38
|
+
# ---------- 微信接口示例 (WECHAT) ----------
|
|
39
|
+
# THIRD_PARTY__WECHAT__ENABLED=true
|
|
40
|
+
# THIRD_PARTY__WECHAT__MODE=mock
|
|
41
|
+
# THIRD_PARTY__WECHAT__BASE_URL=https://api.weixin.qq.com
|
|
42
|
+
# THIRD_PARTY__WECHAT__TIMEOUT=15
|
|
43
|
+
# THIRD_PARTY__WECHAT__EXTRA={"appid": "wx123", "secret": "xxx"}
|