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>>>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8