跳转到主要内容

一种轻量级、可选类型的表达式语言,具有用于匹配任意Python对象的自定义语法。

项目描述

GitHub Workflow Status (branch) PyPI

一种轻量级、可选类型的表达式语言,具有用于匹配任意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 安装最新版本。版本遵循 语义版本控制,以指示每个新版本是否修复了错误、添加了功能或破坏了向后兼容性。查看 变更日志 获取变更列表。

鸣谢

  • Spencer McIntyre - zeroSteiner GitHub followers

许可证

规则引擎库以 BSD 3 条款许可证发布。它可以用于商业和私人目的。更多信息请参阅 LICENSE 文件。

项目详情


下载文件

下载适合您平台文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

rule_engine-4.5.0.tar.gz (45.9 kB 查看哈希)

上传时间

支持者: