Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-backend/cli/runtime/plugin/scaffold/options.py
T
insistence 4bd83bc7cd feat: 支持 v2 插件、独立前端和签名制品发布 (#130)
* feat: 支持 v2 插件、原生扩展与签名发布

* fix: 修复测试

* feat: 增强宿主 SDK、运行观测与制品维护能力

* feat: 增强文件传输、配置观测与本地开发能力

* feat: 支持 SSE 实时事件流并完善开发脚手架

* feat: 完善长连接鉴权复核与关闭回收

* feat: 增强生命周期与任务关闭可靠性

* feat: 收紧健康检查契约并补齐前端与真实网络验收

* feat: 增加SDK溯源与离线更新工具并验证跨版本兼容

* feat: 增加持久化业务示例与受控 Python 交付

* feat: 增加统一运行诊断与多worker状态观测

* feat: 增加固定目标发布等待与自动验收

* fix: 修复多环境插件部署前缀与代理配置不一致

* fix: 修复测试
2026-10-09 23:49:45 +08:00

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}')