1
1
import bson
2
+ from ast import literal_eval
2
3
from ..web import base
3
4
from .. import config , validators
4
5
from ..auth import require_login
11
12
log = config .log
12
13
storage = SearchStorage ()
13
14
15
+
16
+ def string_filters (payload ):
17
+ if payload .get ('search' ) and payload ['search' ].get ('filters' ):
18
+ filters = []
19
+ for filter_ in payload ['search' ].get ('filters' ,[]):
20
+ filters .append (str (filter_ ))
21
+ payload ['search' ]['filters' ] = filters
22
+ return payload
23
+
24
+ def unstring_filters (payload ):
25
+ if payload ['search' ].get ('filters' ):
26
+ filters = []
27
+ for filter_ in payload ['search' ].get ('filters' ,[]):
28
+ filters .append (literal_eval (filter_ ))
29
+ payload ['search' ]['filters' ]= filters
30
+ return payload
31
+
14
32
class SaveSearchHandler (base .RequestHandler ):
15
33
16
34
def __init__ (self , request = None , response = None ):
@@ -20,13 +38,15 @@ def __init__(self, request=None, response=None):
20
38
def post (self ):
21
39
payload = self .request .json_body
22
40
validators .validate_data (payload , 'search-input.json' , 'input' , 'POST' )
41
+ payload = string_filters (payload )
23
42
payload ['permissions' ] = [{"_id" : self .uid , "access" : "admin" }]
24
43
payload ['creator' ] = self .uid
25
- result = storage .create_el (payload )
44
+ result = storage .create_el (payload )
26
45
if result .acknowledged :
27
46
if result .inserted_id :
28
47
return {'_id' : result .inserted_id }
29
- return {"hi" : "bye" }
48
+ else :
49
+ self .abort (404 , 'Search not created' )
30
50
31
51
def get_all (self ):
32
52
log .debug (self .uid )
@@ -36,6 +56,7 @@ def get(self, sid):
36
56
result = storage .get_el (sid )
37
57
if result is None :
38
58
self .abort (404 , 'Element {} not found' .format (sid ))
59
+ unstring_filters (result )
39
60
return result
40
61
41
62
def delete (self , sid ):
@@ -52,6 +73,7 @@ def replace_search(self, sid):
52
73
payload = self .request .json_body
53
74
payload = self ._scrub_replace (payload )
54
75
validators .validate_data (payload , 'search-input.json' , 'input' , 'POST' )
76
+ payload = string_filters (payload )
55
77
payload ['_id' ] = bson .ObjectId (sid )
56
78
search = storage .get_container (sid )
57
79
payload ['permissions' ] = search ['permissions' ]
@@ -74,3 +96,4 @@ def _scrub_replace(self, payload):
74
96
if payload .get ('creator' ):
75
97
del (payload ['creator' ])
76
98
return payload
99
+
0 commit comments