mirror of
https://github.com/insistence/RuoYi-Vue3-FastAPI.git
synced 2026-10-16 05:45:32 +00:00
* feat: 支持 v2 插件、原生扩展与签名发布 * fix: 修复测试 * feat: 增强宿主 SDK、运行观测与制品维护能力 * feat: 增强文件传输、配置观测与本地开发能力 * feat: 支持 SSE 实时事件流并完善开发脚手架 * feat: 完善长连接鉴权复核与关闭回收 * feat: 增强生命周期与任务关闭可靠性 * feat: 收紧健康检查契约并补齐前端与真实网络验收 * feat: 增加SDK溯源与离线更新工具并验证跨版本兼容 * feat: 增加持久化业务示例与受控 Python 交付 * feat: 增加统一运行诊断与多worker状态观测 * feat: 增加固定目标发布等待与自动验收 * fix: 修复多环境插件部署前缀与代理配置不一致 * fix: 修复测试
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
import json
|
|
from collections.abc import Mapping
|
|
from dataclasses import dataclass, field
|
|
from types import MappingProxyType
|
|
from typing import Any
|
|
from uuid import uuid4
|
|
|
|
from middlewares.trace_middleware import TraceCtx
|
|
|
|
|
|
def current_plugin_request_id() -> str:
|
|
"""
|
|
复用宿主请求追踪标识;独立挂载或测试环境未设置追踪时生成新标识。
|
|
|
|
:return: 当前请求的关联标识
|
|
"""
|
|
return TraceCtx.get_request_id() or uuid4().hex
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PluginHttpRequest:
|
|
"""
|
|
提供给 Python 和原生回调的 HTTP 数据快照,不携带 Cookie、令牌或 Request 对象。
|
|
|
|
:param method: HTTP 请求方法
|
|
:param path: 当前请求的路径,不包含查询串
|
|
:param path_params: 路由已解析的路径参数,值为可序列化数据
|
|
:param query: 保留同名多值的查询参数
|
|
:param body: 显式开启 JSON 读取后获得的请求体
|
|
"""
|
|
|
|
method: str
|
|
path: str
|
|
path_params: Mapping[str, Any] = field(default_factory=dict)
|
|
query: Mapping[str, tuple[str, ...]] = field(default_factory=dict)
|
|
body: Any = None
|
|
|
|
def __post_init__(self) -> None:
|
|
"""
|
|
复制路径和查询参数,避免调用方修改原始请求的参数映射。
|
|
|
|
:return: None
|
|
"""
|
|
object.__setattr__(self, 'path_params', MappingProxyType(dict(self.path_params)))
|
|
object.__setattr__(self, 'query', MappingProxyType({key: tuple(values) for key, values in self.query.items()}))
|
|
|
|
def to_payload(self) -> dict[str, Any]:
|
|
"""
|
|
返回独立的 JSON 数据副本,供原生回调或序列化边界消费。
|
|
|
|
:return: 不包含宿主对象的 HTTP 请求数据
|
|
"""
|
|
return json.loads(
|
|
json.dumps(
|
|
{
|
|
'method': self.method,
|
|
'path': self.path,
|
|
'pathParams': dict(self.path_params),
|
|
'query': dict(self.query),
|
|
'body': self.body,
|
|
},
|
|
ensure_ascii=False,
|
|
allow_nan=False,
|
|
)
|
|
)
|