将嵌套的复合表达式字符串(如(a=1或(b=2和c=3))序列化和反序列化为可解析表达式图,如[关键:操作员:= 值:1,科罗拉多州功能:或, [ 键:b运算符:= 值:2,科罗拉多州功能:和, 键:c运算符:= 值:3] ].
python-expression的Python项目详细描述
表达式
关于
将嵌套的复合表达式字符串(如(a = 1 or (b = 2 and c = 3))
)序列化并反序列化为可解析表达式树,如[key:a operator:= value:1, conjunction:or, [key:b operator:= value:2, conjunction:and, key:c operator:= value:3]]
。在
你可能想:
- 在端点上提供一个易于配置的过滤器,例如
GET /services?filter=(price lt 200 and duration is 2hrs)
。在 - 基于表达式构建ORM过滤器。在
- 只需计算表达式是
True
或{}。在
这些类集合很少假设如何评估条件。它允许作者配置可用于解析条件的处理程序。在
安装
- []待办事项
配置
使用
将字符串反序列化为条件树。在
expression=Expression('(a = 1 and b = 2)')conditions=expression.to_conditions()print(conditions.conditions[0].key))# aprint(conditions.conditions[0].operator))# =print(conditions.conditions[0].value))# 1print(conditions.conditions[1].value))# andprint(conditions.conditions[2].key)))# bprint(conditions.conditions[2].operator))# =print(conditions.conditions[2].value))# 2
将date date_between 2020-09-26,2020-09-28
之类的表达式求值为布尔值。在
实例化Evaluate对象,传递已解析的表达式参数。在本例中,date
键将被解析为2020-09-27
的日期对象。在
在计算之前,请确保date_between
表达式可以由指定的处理程序(如DateBetweenHandler
)处理。在
evaluate.add_condition_handlers({'date_between':DateBetweenHandler})
现在从字符串计算表达式。在
result=evaluate.from_expression('date date_between 2020-09-26,2020-09-28')self.assertTrue(result)
您可以插入任何自定义处理程序以适应用例。在
classDateBetweenHandler(Handler):defhandle(self,condition):key=self._data.get(condition.key)values=condition.value.split(',')date1=datetime.strptime(values[0],'%Y-%M-%d')date2=datetime.strptime(values[1],'%Y-%M-%d')returndate1<=key<=date2
贡献
运行测试
coverage run -m unittest2 discover -p="*Test.py"
coverage html
或使用
bash bin/run-tests
bash bin/run-tests *Test.py
- 项目
标签: