aury-boot 0.0.25__py3-none-any.whl → 0.0.27__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 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.25'
32
- __version_tuple__ = version_tuple = (0, 0, 25)
31
+ __version__ = version = '0.0.27'
32
+ __version_tuple__ = version_tuple = (0, 0, 27)
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",
@@ -9,10 +9,34 @@
9
9
 
10
10
  ## 13.1 基本用法
11
11
 
12
+ ### 通过环境变量自动初始化(推荐)
13
+
14
+ 配置环境变量后,`ChannelComponent` 会在应用启动时自动初始化:
15
+
16
+ ```bash
17
+ # .env
18
+ CHANNEL__SSE__BACKEND=memory
19
+ CHANNEL__NOTIFICATION__BACKEND=redis
20
+ CHANNEL__NOTIFICATION__URL=redis://localhost:6379/3
21
+ ```
22
+
12
23
  ```python
13
24
  from aury.boot.infrastructure.channel import ChannelManager
14
25
 
15
- # 命名多实例(推荐)- 不同业务场景使用不同实例
26
+ # 直接获取已初始化的实例
27
+ sse_channel = ChannelManager.get_instance("sse")
28
+ notification_channel = ChannelManager.get_instance("notification")
29
+
30
+ # 直接使用
31
+ await sse_channel.publish("user:123", {{"event": "hello"}})
32
+ ```
33
+
34
+ ### 手动初始化
35
+
36
+ ```python
37
+ from aury.boot.infrastructure.channel import ChannelManager
38
+
39
+ # 命名多实例 - 不同业务场景使用不同实例
16
40
  sse_channel = ChannelManager.get_instance("sse")
17
41
  notification_channel = ChannelManager.get_instance("notification")
18
42
 
@@ -112,29 +136,17 @@ await sse_channel.publish(f"space:{{space_id}}:comment_added", {{
112
136
 
113
137
  Redis 后端使用 Redis 原生 `PSUBSCRIBE`,内存后端使用 `fnmatch` 实现。
114
138
 
115
- ## 13.5 应用场景示例
116
-
117
- ```python
118
- # 不同业务场景使用不同的命名实例
119
- sse_channel = ChannelManager.get_instance("sse") # 前端 SSE 推送
120
- chat_channel = ChannelManager.get_instance("chat") # 聊天消息
121
- notify_channel = ChannelManager.get_instance("notify") # 系统通知
122
-
123
- # 分别初始化(可使用不同后端)
124
- await sse_channel.initialize(backend="memory") # 单进程即可
125
- await chat_channel.initialize(backend="redis", url="redis://localhost:6379/3") # 需要跨进程
126
- await notify_channel.initialize(backend="redis", url="redis://localhost:6379/4")
127
- ```
128
-
129
- ## 13.6 环境变量
139
+ ## 13.5 环境变量
130
140
 
131
141
  ```bash
132
- # 默认实例
142
+ # 单实例配置
133
143
  CHANNEL__BACKEND=memory
134
-
135
- # 多实例(格式:CHANNEL__{{INSTANCE}}__{{FIELD}})
136
- CHANNEL__DEFAULT__BACKEND=redis
137
- CHANNEL__DEFAULT__URL=redis://localhost:6379/3
138
- CHANNEL__NOTIFICATIONS__BACKEND=redis
139
- CHANNEL__NOTIFICATIONS__URL=redis://localhost:6379/4
144
+ # 或 Redis 后端
145
+ CHANNEL__BACKEND=redis
146
+ CHANNEL__URL=redis://localhost:6379/3
147
+
148
+ # 多实例配置(格式:CHANNEL__{{INSTANCE}}__{{FIELD}})
149
+ CHANNEL__SSE__BACKEND=memory
150
+ CHANNEL__NOTIFICATION__BACKEND=redis
151
+ CHANNEL__NOTIFICATION__URL=redis://localhost:6379/4
140
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
- # 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
+ # CHANNEL__SSE__BACKEND=memory
12
+ # CHANNEL__NOTIFICATION__BACKEND=redis
13
+ # CHANNEL__NOTIFICATION__URL=redis://localhost:6379/3
11
14
 
12
15
  # =============================================================================
13
16
  # 消息队列配置 (MQ__)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aury-boot
3
- Version: 0.0.25
3
+ Version: 0.0.27
4
4
  Summary: Aury Boot - 基于 FastAPI 生态的企业级 API 开发框架
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: alembic>=1.17.2
@@ -1,5 +1,5 @@
1
1
  aury/boot/__init__.py,sha256=pCno-EInnpIBa1OtxNYF-JWf9j95Cd2h6vmu0xqa_-4,1791
2
- aury/boot/_version.py,sha256=DspPu1FRRiGe5F0Nbz1wXOpsS5e-m6ETOzBjU5BFWRE,706
2
+ aury/boot/_version.py,sha256=vq5GihUa4KrDz-Hix5Er9gtVMhfHNDBoLhzP1VsvNuE,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=o0SAwEpFqoHE7zB3lYyaSCm0cX2NZnTVqUWiSJ-Qdtk,30576
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
@@ -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=SV0XpuzzF7YGwsGm9uswQf0-JQvbJ98rdXOUa2KJm5E,4428
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=ICRLGw2FtJ0bNtkHnpy0CFyILqxOfFLbfejdFLJuuo8,1719
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
@@ -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.25.dist-info/METADATA,sha256=ph7zu8UJgX6_LBmEERNW8O6C7nc0afNhYEGz9Qm3rQs,7695
196
- aury_boot-0.0.25.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
197
- aury_boot-0.0.25.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
198
- aury_boot-0.0.25.dist-info/RECORD,,
195
+ aury_boot-0.0.27.dist-info/METADATA,sha256=qbe9mHwMgUyqjel4saqlfiZLtS2j_IAbMOqLkkr04ys,7695
196
+ aury_boot-0.0.27.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
197
+ aury_boot-0.0.27.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
198
+ aury_boot-0.0.27.dist-info/RECORD,,