filtering-用于解析任意过滤器的库
filtration的Python项目详细描述
过滤
一个库,用于分析用户界面提供的或作为查询字符串提供的任意筛选器
功能
- 与python 3兼容
- 分析人类可读的过滤器
过滤
pip install git+https://github.com/HurricaneLabs/filtration.git
运行测试
必须安装nose2,然后运行:
git clone https://github.com/HurricaneLabs/filtration.git
cd filtration
nose2
用法
过滤用于解析由一个或多个“语句”组成的“过滤表达式”。每个 语句由“左侧”(lhs)和可选的运算符和“右侧”组成 侧”(右侧)。当没有操作符和RHS被指定时,假设一个特殊的“LHS存在”语法。见 “表达式求值”了解更多详细信息。
语句用“and”或“or”连接在一起形成一个表达式。可以使用括号 当将语句连接在一起以强制优先权时。例如:
>>>fromfiltrationimportExpression>>>Expression.parseString("a and b or c")((aandb)orc)>>>Expression.parseString("a and (b or c)")(aand(borc))>>>
过滤还可用于分析查询字符串语法。更多信息见下文。
表达式格式
运算符
这些操作员控制着左手和右手的对比。如果省略了运算符(因此 RHS也被省略),如果LHS中的符号存在,则语句返回true。
- 相等(“=”)
- 不相等(“!=”)
- 小于(“<;”)
- 小于或等于(“<;=”)
- 大于(“>;”)
- 大于或等于(“>;=”)
- 包含(“in”)
- rhs必须是列表或子网
- 正则表达式(“=~”)
- Rhs必须是regex标记
代币
这些标记用于语句的lhs或rhs。
正则表达式
正则表达式必须用“/”括起来,并且可以在后面包含字符“i”、“m”或“s” 结束的“/”表示相应的regex标志。示例:
/abc/ /^abc/i /^abc$/ms
子网
子网是CIDR表示法中的IPv4子网:
127.0.0.0/8 192.168.0.0/24
符号
符号被表示为一个无引号的裸字符串。它以字母或下划线开头,并且 可以后跟任意数量的字母、数字、点(“.”)或下划线。点有特殊的 和表示字典遍历(参见下面的表达式求值)。
值
值可以是日期、时间、日期/时间、带引号的字符串或整数。日期用 yyyy-mm-dd格式(未引用),解释为该日期的午夜。时间就是 以hh:mm:ss格式表示(也不引用),并解释为 评估筛选器的日期。日期/时间以yyyy-mm-ddthh:mm:ss格式表示,其中 “t”是可选的,可以用空格来表示。这种格式大约是iso 8601,但是 缺少微秒。
列表
列表是由逗号分隔的两个或多个值标记。
表达式计算
表达式对象是可调用的,只有一个“context”参数。以这种方式使用时, 根据“context”是否与筛选器匹配,返回true或false。例如,给定 此上下文:
>>>c={"a":1,"b":2,"c":3}
这个表达式:
>>>expr=Expression.parseString("a == 1 and b == 2")
调用表达式将返回true:
>>>expr(c)True>>>
而此表达式将返回false:
>>>expr=Expression.parseString("a == 2 and b == 2")>>>expr(c)False>>>
当不提供操作符/RHS时,如果LHS密钥存在于该语句中,则该语句解析为true。 上下文。例如:
>>>c={"a":1,"b":2,"c":3}>>>expr=Expression.parseString("a")>>>expr(c)True>>>expr=Expression.parseString("d")>>>expr(c)False>>>
字典遍历
符号能够遍历上下文中的嵌套字典。在这种情况下:
>>>c={"a":{"b":{"c":1}}}
此表达式将返回true:
>>>expr=Expression.parseString("a.b.c == 1")>>>expr(c)True>>>