一种轻量级、可选类型的表达式语言,具有用于匹配任意Python对象的自定义语法。
项目描述
一种轻量级、可选类型的表达式语言,具有用于匹配任意Python对象的自定义语法。
文档可在 https://zeroSteiner.github.io/rule-engine/ 查找。
- 警告:
下一个主要版本(5.0)将移除对Python 3.6和3.7的支持。目前尚无发布时间表。
规则引擎表达式使用自己的语言编写,在Python中以字符串的形式定义。语法与Python最为相似,并受到Ruby的一些启发。这种语言的一些功能包括
可选类型提示
使用正则表达式匹配字符串
日期时间数据类型
复合数据类型(Python dict、list和set类型的等价物)
数据属性
线程安全
示例用法
以下示例演示了定义规则对象并将其应用于两个字典的基本用法,显示其中一个匹配而另一个不匹配。有关更多信息,请参阅 入门指南。
import rule_engine
# match a literal first name and applying a regex to the email
rule = rule_engine.Rule(
'first_name == "Luke" and email =~ ".*@rebels.org$"'
) # => <Rule text='first_name == "Luke" and email =~ ".*@rebels.org$"' >
rule.matches({
'first_name': 'Luke', 'last_name': 'Skywalker', 'email': 'luke@rebels.org'
}) # => True
rule.matches({
'first_name': 'Darth', 'last_name': 'Vader', 'email': 'dvader@empire.net'
}) # => False
以下示例演示了可选类型系统。创建了一个自定义上下文,其中定义了两个符号,一个是字符串,一个是浮点数。由于符号已定义,如果指定了未知符号或使用了无效操作,将引发异常。有关更多信息,请参阅 类型提示。
import rule_engine
# define the custom context with two symbols
context = rule_engine.Context(type_resolver=rule_engine.type_resolver_from_dict({
'first_name': rule_engine.DataType.STRING,
'age': rule_engine.DataType.FLOAT
}))
# receive an error when an unknown symbol is used
rule = rule_engine.Rule('last_name == "Vader"', context=context)
# => SymbolResolutionError: last_name
# receive an error when an invalid operation is used
rule = rule_engine.Rule('first_name + 1', context=context)
# => EvaluationError: data type mismatch
想尝试规则表达式语言吗?请检查 调试REPL,它使实验变得容易。安装后,只需运行 python -m rule_engine.debug_repl。
安装
使用 pip install rule-engine 从 PyPi 安装最新版本。版本遵循 语义版本控制,以指示每个新版本是否修复了错误、添加了功能或破坏了向后兼容性。查看 变更日志 获取变更列表。
鸣谢
许可证
规则引擎库以 BSD 3 条款许可证发布。它可以用于商业和私人目的。更多信息请参阅 LICENSE 文件。
项目详情
关闭
rule_engine-4.5.0.tar.gz 哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0aee91bccaf2f336a0b931b4a2c299efec56357c03cd7cba151de064221c3d6b |
|
MD5 | 7437977843020cfba9f7d12b28b212a3 |
|
BLAKE2b-256 | 0cc424be06721eefc0070689afce05a875141ef747c21f2432bae3675a30f764 |