使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
2.4 KiB
2.4 KiB
1. 依赖和环境准备
- 1.1 确认 simpleeval 已安装(已在探索阶段完成)
- 1.2 验证 simpleeval 版本和功能可用性
2. 核心实现
- 2.1 创建 core/condition_evaluator.py 文件
- 2.2 实现 ConditionEvaluator 类的基本结构
- 2.3 实现 _get_evaluator 方法,配置 EvalWithCompoundTypes
- 2.4 实现 _extract_expression 方法,提取表达式内容
- 2.5 实现 evaluate_condition 方法,集成 simpleeval
- 2.6 实现错误处理,映射 simpleeval 异常到 YAMLError
- 2.7 添加表达式长度限制(MAX_EXPRESSION_LENGTH = 500)
- 2.8 配置白名单函数(len, bool, abs, min, max)
3. 集成到 Template 类
- 3.1 在 Template.init 中初始化 ConditionEvaluator
- 3.2 修改 Template.evaluate_condition 方法,委托给 ConditionEvaluator
- 3.3 移除旧的正则匹配实现代码
- 3.4 确保 Template.render 方法正确调用新的 evaluate_condition
4. 测试实现
- 4.1 创建 tests/unit/test_condition_evaluator.py 文件
- 4.2 测试比较运算符(==, !=, >, <, >=, <=)
- 4.3 测试逻辑运算符(and, or, not)
- 4.4 测试成员测试(in, not in)
- 4.5 测试列表和元组字面量
- 4.6 测试数学运算(+, -, *, /, %, **)
- 4.7 测试内置函数(int, float, str, len, bool, abs, min, max)
- 4.8 测试复杂逻辑组合表达式
- 4.9 测试错误处理(变量未定义、函数未定义、语法错误)
- 4.10 测试安全限制(表达式过长、禁止的特性)
- 4.11 更新 tests/unit/test_template.py 中的条件渲染测试
- 4.12 添加集成测试,验证完整的模板渲染流程
5. 文档更新
- 5.1 更新 README.md 的条件渲染章节
- 5.2 添加新的表达式语法示例到 README.md
- 5.3 添加支持的操作符和函数列表到 README.md
- 5.4 更新 README_DEV.md,说明 ConditionEvaluator 架构
- 5.5 更新 README_DEV.md,说明 simpleeval 集成和安全策略
- 5.6 创建或更新示例文件,展示新的条件表达式能力
6. 验证和清理
- 6.1 运行完整测试套件,确保所有测试通过
- 6.2 手动测试各种表达式场景
- 6.3 验证错误信息的清晰度和有用性
- 6.4 检查代码风格和注释完整性
- 6.5 清理 temp 目录中的临时文件(保留有用的示例)
- 6.6 确认没有遗留的调试代码或注释