Skip to content

Commit 01e42df

Browse files
authored
Merge pull request #283 from thenx/fix-280
Fix #277
2 parents deaf031 + 44eb9ed commit 01e42df

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-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:

tests/test_rest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,10 @@ async def test_list_filtering(create_admin):
204204
resp = await client.list(resource, page=1, per_page=30, filters=filters)
205205
assert len(resp) == 9
206206

207+
filters = {'views': {'gt': 10, 'lt': 15}}
208+
resp = await client.list(resource, page=1, per_page=30, filters=filters)
209+
assert len(resp) == 4
210+
207211
filters = {'views': {'ge': 15}}
208212
resp = await client.list(resource, page=1, per_page=30, filters=filters)
209213
assert len(resp) == 10

0 commit comments

Comments
 (0)