in lib/filter_lib/src/query_modificator.py [0:0]
def _create_filter(query: Query, fil: Dict[str, Any]) -> Query:
model = _get_entity(query, fil.get("model"))
field = fil.get("field")
op = fil.get("op")
value = fil.get("value")
validate_filter_args(model, fil, field, op, value)
try:
attr = getattr(model, field).type
except AttributeError:
attr = None
if isinstance(attr, LtreeType):
return _make_ltree_query(query=query, model=model, op=op, value=value)
if _op_is_match(fil):
column = _get_column(model, field)
query = _make_match(query, column, value)
return query
if _has_relation(model, field):
relation = getattr(model, field.split(".")[0])
query = query.join(relation)
fil["field"] = field.split(".")[1]
fil["model"] = relation.property.mapper.class_.__name__
if _op_is_not(fil):
fil = _create_or_condition(fil)
try:
query = apply_filters(query, fil, do_auto_join=False)
except ArgumentError as e:
raise BadFilterFormat(f"{e.args}")
return query