-
Data Governance Dev authored
需求:规则这里增加数值和日期规则(可以切换),同样可以使用AI生成, 目标结果是一个python函数,测试也是调用后台测试。 DB: - rule 表新增 rule_type(regex/number/date,默认 regex)/ code(Python 函数源码) - init_db() 自动 ALTER ADD COLUMN(每个 ADD 都带 DEFAULT,老规则仍按 regex 走) 后端: - core/rule_runner.py(新增):run_rule(rule_type, regex, code, value) - regex 走 re.compile.search - number/date 走 _exec_user_function(白名单 exec 沙箱) - 白名单 __import__:datetime/time/_strptime/math/decimal/re (strptime 内部 lazy-import _strptime,所以不能一刀切屏蔽 __import__) - 沙箱预注入 datetime/time/math/decimal/re 到 globals - validate_user_code():compile + 必须 def check(value) -> bool - core/ai_rule.py(新增):gen_rule(desc, rule_type) - regex 复用老的 ai_regex.gen_regex(行为完全兼容) - number/date 走 LLM,validate_user_code 校验,5 次重试 - models/rule.py:Rule 加 rule_type/code + to_dict + RULE_TYPES 常量 - routers/ai.py: - 新增 /api/ai/rule(POST {desc, rule_type} → {ok, code, note}) - 新增 /api/rule/test(POST {rule_type, code, value} → {ok, pass_, error}) - 保留老 /api/ai/regex 和 /api/regex/test(薄壳转发,老测试不挂) - routers/tasks.py:RulePayload/RuleOut 加 rule_type/code,按类型持久化 - routers/queries.py:按 rule_type dispatch,number/date 走沙箱; 沙箱报错(语法错 / 缺 check)也按不合规处理,把错误原因写进 issues 前端: - src/api/ai.js:genRule/testRule 统一接口(rule_type 参数化) - src/components/RuleModal.vue: - 规则类型 tab 切换(正则/数值/日期) - regex 走单行 input;number/date 走等宽 Python 编辑框 - AI 按钮文案按类型变(生成正则/数值校验函数/日期校验函数) - 测试统一走 /api/rule/test,保证和检测引擎语义一致 测试: - tests/test_rule_runner.py(新增,20 个用例): - regex 简单匹配 / 空正则 / 非法正则 - number 校验函数 / 非法输入 / 缺 check / 运行时异常 - date strptime 校验 / 范围校验 - 沙箱安全:os 拒绝 / datetime 预注入 / open 拒绝 / eval 拒绝 / getattr 拒绝 - validate_user_code 4 项 - tests/test_rule_types_e2e.py(新增,5 个用例): - 持久化三种 rule_type - 默认 rule_type=regex(向后兼容) - queries/run 按 rule_type dispatch - 规则执行失败标记为不合规 + 暴露原因 - 老 /api/ai/regex 端点兼容 迁移:老规则行 rule_type='regex'、code=NULL,自动走旧逻辑(不动现有数据)。8ea2935f