11import bson
2+ from ast import literal_eval
23from ..web import base
34from .. import config , validators
45from ..auth import require_login
1112log = config .log
1213storage = SearchStorage ()
1314
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+
1432class SaveSearchHandler (base .RequestHandler ):
1533
1634 def __init__ (self , request = None , response = None ):
@@ -20,13 +38,15 @@ def __init__(self, request=None, response=None):
2038 def post (self ):
2139 payload = self .request .json_body
2240 validators .validate_data (payload , 'search-input.json' , 'input' , 'POST' )
41+ payload = string_filters (payload )
2342 payload ['permissions' ] = [{"_id" : self .uid , "access" : "admin" }]
2443 payload ['creator' ] = self .uid
25- result = storage .create_el (payload )
44+ result = storage .create_el (payload )
2645 if result .acknowledged :
2746 if result .inserted_id :
2847 return {'_id' : result .inserted_id }
29- return {"hi" : "bye" }
48+ else :
49+ self .abort (404 , 'Search not created' )
3050
3151 def get_all (self ):
3252 log .debug (self .uid )
@@ -36,6 +56,7 @@ def get(self, sid):
3656 result = storage .get_el (sid )
3757 if result is None :
3858 self .abort (404 , 'Element {} not found' .format (sid ))
59+ unstring_filters (result )
3960 return result
4061
4162 def delete (self , sid ):
@@ -52,6 +73,7 @@ def replace_search(self, sid):
5273 payload = self .request .json_body
5374 payload = self ._scrub_replace (payload )
5475 validators .validate_data (payload , 'search-input.json' , 'input' , 'POST' )
76+ payload = string_filters (payload )
5577 payload ['_id' ] = bson .ObjectId (sid )
5678 search = storage .get_container (sid )
5779 payload ['permissions' ] = search ['permissions' ]
@@ -74,3 +96,4 @@ def _scrub_replace(self, payload):
7496 if payload .get ('creator' ):
7597 del (payload ['creator' ])
7698 return payload
99+
0 commit comments