1
1
import re
2
+ from collections import defaultdict
2
3
import trafaret as t
3
4
from trafaret .contrib .object_id import MongoId
4
5
11
12
12
13
def op (filter , field , operation , value ):
13
14
if operation == 'in' :
14
- filter [field ] = {'$in' : value }
15
+ filter [field ]. update ( {'$in' : value })
15
16
elif operation == 'like' :
16
- filter [field ] = {'$regex' : '^{}' .format (re .escape (value ))}
17
+ filter [field ]. update ( {'$regex' : '^{}' .format (re .escape (value ))})
17
18
elif operation == 'eq' :
18
- filter [field ] = {'$eq' : value }
19
+ filter [field ]. update ( {'$eq' : value })
19
20
elif operation == 'ne' :
20
- filter [field ] = {'$ne' : value }
21
+ filter [field ]. update ( {'$ne' : value })
21
22
elif operation == 'le' :
22
- filter [field ] = {'$lte' : value }
23
+ filter [field ]. update ( {'$lte' : value })
23
24
elif operation == 'lt' :
24
- filter [field ] = {'$lt' : value }
25
+ filter [field ]. update ( {'$lt' : value })
25
26
elif operation == 'gt' :
26
- filter [field ] = {'$gt' : value }
27
+ filter [field ]. update ( {'$gt' : value })
27
28
elif operation == 'ge' :
28
- filter [field ] = {'$gte' : value }
29
+ filter [field ]. update ( {'$gte' : value })
29
30
else :
30
31
raise ValueError ('Operation not supported {}' .format (operation ))
31
32
return filter
@@ -82,7 +83,10 @@ def text_filter(query, value, schema):
82
83
if isinstance (s .trafaret , t .String )]
83
84
query_list = []
84
85
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 ))
86
90
query ["$or" ] = query_list
87
91
return query
88
92
@@ -92,7 +96,7 @@ def text_filter(query, value, schema):
92
96
# same level
93
97
def create_filter (filter , schema ):
94
98
column_traf_map = {s .name : s .trafaret for s in schema .keys }
95
- query = {}
99
+ query = defaultdict ( lambda : {})
96
100
for field_name , operation in filter .items ():
97
101
# case for special q filter, {"q": "text"}
98
102
if field_name == MULTI_FIELD_TEXT_QUERY :
0 commit comments