mirror of
https://github.com/insistence/RuoYi-Vue3-FastAPI.git
synced 2026-10-15 21:35:31 +00:00
* feat: 支持 v2 插件、原生扩展与签名发布 * fix: 修复测试 * feat: 增强宿主 SDK、运行观测与制品维护能力 * feat: 增强文件传输、配置观测与本地开发能力 * feat: 支持 SSE 实时事件流并完善开发脚手架 * feat: 完善长连接鉴权复核与关闭回收 * feat: 增强生命周期与任务关闭可靠性 * feat: 收紧健康检查契约并补齐前端与真实网络验收 * feat: 增加SDK溯源与离线更新工具并验证跨版本兼容 * feat: 增加持久化业务示例与受控 Python 交付 * feat: 增加统一运行诊断与多worker状态观测 * feat: 增加固定目标发布等待与自动验收 * fix: 修复多环境插件部署前缀与代理配置不一致 * fix: 修复测试
96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PluginScaffoldOptions:
|
|
"""
|
|
插件模板生成选项。
|
|
|
|
:param backend: 是否生成后端模板
|
|
:param frontend: 是否生成前端模板
|
|
:param migration: 是否生成 migration 示例
|
|
:param seed: 是否生成 seed 示例
|
|
:param job: 是否生成定时任务示例
|
|
:param config: 是否生成配置项示例
|
|
:param test: 是否生成测试样例
|
|
:param crud: 是否生成 CRUD 页面示例
|
|
"""
|
|
|
|
backend: bool = True
|
|
frontend: bool = True
|
|
migration: bool = True
|
|
seed: bool = True
|
|
job: bool = True
|
|
config: bool = True
|
|
test: bool = True
|
|
crud: bool = False
|
|
|
|
|
|
class PluginScaffoldTemplateResolver:
|
|
"""
|
|
插件模板预设解析器。
|
|
|
|
使用 Resolver 模式将模板名称转换为稳定的模板生成选项。
|
|
"""
|
|
|
|
V2_TEMPLATES = frozenset({'python-asgi', 'python-bundle', 'rust-asgi', 'rust-bundle'})
|
|
SUPPORTED_TEMPLATES = {'minimal', 'backend-only', 'full-stack', 'scheduled-job', 'crud-page'} | V2_TEMPLATES
|
|
DEFAULT_TEMPLATE = 'full-stack'
|
|
|
|
@classmethod
|
|
def resolve(cls, template: str) -> PluginScaffoldOptions:
|
|
"""
|
|
解析插件模板预设。
|
|
|
|
:param template: 插件模板名称
|
|
:return: 插件模板生成选项
|
|
"""
|
|
normalized_template = (template or cls.DEFAULT_TEMPLATE).strip() or cls.DEFAULT_TEMPLATE
|
|
if normalized_template in cls.V2_TEMPLATES:
|
|
return PluginScaffoldOptions(
|
|
backend=True,
|
|
frontend=normalized_template.endswith('-bundle'),
|
|
migration=False,
|
|
seed=False,
|
|
job=False,
|
|
config=False,
|
|
test=True,
|
|
)
|
|
if normalized_template == 'minimal':
|
|
return PluginScaffoldOptions(
|
|
backend=True,
|
|
frontend=False,
|
|
migration=False,
|
|
seed=False,
|
|
job=False,
|
|
config=False,
|
|
test=True,
|
|
)
|
|
if normalized_template == 'backend-only':
|
|
return PluginScaffoldOptions(backend=True, frontend=False)
|
|
if normalized_template == 'full-stack':
|
|
return PluginScaffoldOptions()
|
|
if normalized_template == 'scheduled-job':
|
|
return PluginScaffoldOptions(
|
|
backend=True,
|
|
frontend=False,
|
|
migration=False,
|
|
seed=False,
|
|
job=True,
|
|
config=False,
|
|
test=True,
|
|
)
|
|
if normalized_template == 'crud-page':
|
|
return PluginScaffoldOptions(
|
|
backend=True,
|
|
frontend=True,
|
|
migration=True,
|
|
seed=True,
|
|
job=False,
|
|
config=True,
|
|
test=True,
|
|
crud=True,
|
|
)
|
|
supported_templates = ', '.join(sorted(cls.SUPPORTED_TEMPLATES))
|
|
raise ValueError(f'插件模板只支持:{supported_templates}')
|