Skip to content

Commit d53ab31

Browse files
authored
Fix #280 - Multiple filters per field
1 parent deaf031 commit d53ab31

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

aiohttp_admin/backends/mongo_utils.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
from collections import defaultdict
23
import trafaret as t
34
from trafaret.contrib.object_id import MongoId
45

@@ -11,21 +12,21 @@
1112

1213
def op(filter, field, operation, value):
1314
if operation == 'in':
14-
filter[field] = {'$in': value}
15+
filter[field].update({'$in': value})
1516
elif operation == 'like':
16-
filter[field] = {'$regex': '^{}'.format(re.escape(value))}
17+
filter[field].update({'$regex': '^{}'.format(re.escape(value))})
1718
elif operation == 'eq':
18-
filter[field] = {'$eq': value}
19+
filter[field].update({'$eq': value})
1920
elif operation == 'ne':
20-
filter[field] = {'$ne': value}
21+
filter[field].update({'$ne': value})
2122
elif operation == 'le':
22-
filter[field] = {'$lte': value}
23+
filter[field].update({'$lte': value})
2324
elif operation == 'lt':
24-
filter[field] = {'$lt': value}
25+
filter[field].update({'$lt': value})
2526
elif operation == 'gt':
26-
filter[field] = {'$gt': value}
27+
filter[field].update({'$gt': value})
2728
elif operation == 'ge':
28-
filter[field] = {'$gte': value}
29+
filter[field].update({'$gte': value})
2930
else:
3031
raise ValueError('Operation not supported {}'.format(operation))
3132
return filter
@@ -82,7 +83,10 @@ def text_filter(query, value, schema):
8283
if isinstance(s.trafaret, t.String)]
8384
query_list = []
8485
for column_name in string_columns:
85-
query_list.append(op({}, column_name, "like", value))
86+
query_list.append(op(defaultdict(lambda: {}),
87+
column_name,
88+
"like",
89+
value))
8690
query["$or"] = query_list
8791
return query
8892

@@ -92,7 +96,7 @@ def text_filter(query, value, schema):
9296
# same level
9397
def create_filter(filter, schema):
9498
column_traf_map = {s.name: s.trafaret for s in schema.keys}
95-
query = {}
99+
query = defaultdict(lambda: {})
96100
for field_name, operation in filter.items():
97101
# case for special q filter, {"q": "text"}
98102
if field_name == MULTI_FIELD_TEXT_QUERY:

0 commit comments

Comments
 (0)