简道云fastapi
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
"""
|
||||
模块注册和路由管理
|
||||
提供统一的模块注册机制,方便添加新功能模块
|
||||
"""
|
||||
from typing import Dict, Callable, Optional, Any
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class ActionConfig:
|
||||
"""操作配置"""
|
||||
handler: Callable # 处理函数
|
||||
module_name: str # 所属模块名称
|
||||
description: Optional[str] = None # 描述
|
||||
requires_auth: bool = True # 是否需要认证
|
||||
header_module: Optional[str] = None # 使用的请求头模块名称
|
||||
|
||||
|
||||
class ModuleRegistry:
|
||||
"""模块注册表"""
|
||||
|
||||
def __init__(self):
|
||||
self._actions: Dict[str, ActionConfig] = {}
|
||||
self._modules: Dict[str, Dict[str, Any]] = {}
|
||||
|
||||
def register_action(
|
||||
self,
|
||||
action_name: str,
|
||||
handler: Callable,
|
||||
module_name: str = "default",
|
||||
description: Optional[str] = None,
|
||||
requires_auth: bool = True,
|
||||
header_module: Optional[str] = None
|
||||
):
|
||||
"""
|
||||
注册操作
|
||||
|
||||
Args:
|
||||
action_name: 操作名称
|
||||
handler: 处理函数
|
||||
module_name: 模块名称
|
||||
description: 描述
|
||||
requires_auth: 是否需要认证
|
||||
header_module: 请求头模块名称
|
||||
"""
|
||||
config = ActionConfig(
|
||||
handler=handler,
|
||||
module_name=module_name,
|
||||
description=description,
|
||||
requires_auth=requires_auth,
|
||||
header_module=header_module
|
||||
)
|
||||
self._actions[action_name] = config
|
||||
|
||||
def get_action(self, action_name: str) -> Optional[ActionConfig]:
|
||||
"""
|
||||
获取操作配置
|
||||
|
||||
Args:
|
||||
action_name: 操作名称
|
||||
|
||||
Returns:
|
||||
操作配置,如果不存在返回None
|
||||
"""
|
||||
return self._actions.get(action_name)
|
||||
|
||||
def get_all_actions(self) -> Dict[str, ActionConfig]:
|
||||
"""获取所有注册的操作"""
|
||||
return self._actions.copy()
|
||||
|
||||
def register_module(self, module_name: str, module_instance: Any, **metadata):
|
||||
"""
|
||||
注册模块实例
|
||||
|
||||
Args:
|
||||
module_name: 模块名称
|
||||
module_instance: 模块实例
|
||||
**metadata: 模块元数据
|
||||
"""
|
||||
self._modules[module_name] = {
|
||||
'instance': module_instance,
|
||||
**metadata
|
||||
}
|
||||
|
||||
def get_module(self, module_name: str) -> Optional[Any]:
|
||||
"""
|
||||
获取模块实例
|
||||
|
||||
Args:
|
||||
module_name: 模块名称
|
||||
|
||||
Returns:
|
||||
模块实例,如果不存在返回None
|
||||
"""
|
||||
module_info = self._modules.get(module_name)
|
||||
return module_info['instance'] if module_info else None
|
||||
|
||||
def get_actions_by_module(self, module_name: str) -> Dict[str, ActionConfig]:
|
||||
"""
|
||||
获取指定模块的所有操作
|
||||
|
||||
Args:
|
||||
module_name: 模块名称
|
||||
|
||||
Returns:
|
||||
操作字典
|
||||
"""
|
||||
return {
|
||||
name: config
|
||||
for name, config in self._actions.items()
|
||||
if config.module_name == module_name
|
||||
}
|
||||
|
||||
|
||||
# 全局模块注册表实例
|
||||
registry = ModuleRegistry()
|
||||
Reference in New Issue
Block a user