def _build_filter_expressions(self, conditions, default_op, relationships):
"""
:param conditions: conditions dictionary
:type conditions: dict
:param default_op: a default operator to join all filter expressions
:type default_op: function
:param relationships: a dict with all joins to apply, describes current state in recurrent calls
:type relationships: dict
:return: expressions list
:rtype: list
"""
if default_op is None:
default_op = and_
expressions = []
for arg, value in conditions.items():
if arg in self._logical_operators:
expression = self._parse_logical_op(arg, value, self._logical_operators[arg], relationships)
else:
expression = self._parse_tokens(self.objects_class, arg.split('__'), value, relationships,
lambda c, n, v: operators.eq(n, self.deserialize_column(c, v)))
if expression is not None:
expressions.append(expression)
result = None
if len(expressions) > 1:
result = default_op(*expressions) if default_op != not_ else not_(and_(*expressions))
elif len(expressions) == 1:
result = expressions[0] if default_op != not_ else not_(expressions[0])
return result
评论列表
文章目录