-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilters.py
29 lines (27 loc) · 878 Bytes
/
filters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def _get_predicate(field, filter, value):
if filter == 'exact':
return field == value
elif filter == 'notexact':
return field != value
elif filter == 'gt':
return field > value
elif filter == 'lt':
return field < value
elif filter == 'gte':
return field >= value
elif filter == 'lte':
return field <= value
elif filter == 'in' and isinstance(value, list):
return field.in_(value)
else:
return None
def parse_filters(cls_model, req_params):
filters = []
for param, value in req_params.items():
if '__' in param:
filter = param.split('__')[1].split('=')[0]
field = param.split('__')[0]
p = _get_predicate(getattr(cls_model, field), filter, value)
if p is not None:
filters.append(p)
return filters