@@ -112,12 +112,12 @@ def _get_one(self,key):
112112 roles = GET .get ("roles" )
113113 permission_check_ok = False
114114 if not params_role :
115- if hasattr (request ,"user" ):
115+ if hasattr (request ,"user" ) and request . user :
116116 params_role = "LOGIN"
117117 else :
118118 params_role = "UNKNOWN"
119119 elif params_role != "UNKNOWN" :
120- if not hasattr (request ,"user" ):
120+ if not ( hasattr (request ,"user" ) and request . user ):
121121 return json ({"code" :400 ,"msg" :"no login user for role '%s'" % (params_role )})
122122 if params_role not in roles :
123123 return json ({"code" :400 ,"msg" :"'%s' not accessible by role '%s'" % (model_name ,params_role )})
@@ -200,57 +200,61 @@ def _filter_owner(self,model,model_setting,q):
200200
201201 def _expr (self ,model ,model_param ,model_expr ):
202202 if not isinstance (model_expr ,list ):
203- raise UliwebError ("only accept array in @expr: '%s'" % (model_expr ))
203+ raise UliwebError ("only accept array in @expr, but get '%s'" % (model_expr ))
204204 num = len (model_expr )
205205 if (num < 2 or num > 3 ):
206- raise UliwebError ("only accept 2 or 3 items in @expr: '%s'" % (model_expr ))
206+ raise UliwebError ("only accept 2 or 3 items in @expr, but get '%s'" % (model_expr ))
207207 op = model_expr [- 2 ]
208208 if op == '&' :
209209 if num != 3 :
210- raise UliwebError ("'&'(and) expression need 3 items: '%s'" % (model_expr ))
210+ raise UliwebError ("'&'(and) expression need 3 items, but get '%s'" % (model_expr ))
211211 c1 = self ._get_filter_condition (model ,model_param ,model_expr [0 ],expr = True )
212212 c2 = self ._get_filter_condition (model ,model_param ,model_expr [2 ],expr = True )
213213 return and_ (c1 ,c2 )
214214 elif op == '|' :
215215 if num != 3 :
216- raise UliwebError ("'|'(or) expression need 3 items: '%s'" % (model_expr ))
216+ raise UliwebError ("'|'(or) expression need 3 items, but get '%s'" % (model_expr ))
217217 c1 = self ._get_filter_condition (model ,model_param ,model_expr [0 ],expr = True )
218218 c2 = self ._get_filter_condition (model ,model_param ,model_expr [2 ],expr = True )
219219 return or_ (c1 ,c2 )
220220 elif op == '!' :
221221 if num != 2 :
222- raise UliwebError ("'!'(not) expression need 2 items: '%s'" % (model_expr ))
222+ raise UliwebError ("'!'(not) expression need 2 items, but get '%s'" % (model_expr ))
223223 return not_ (self ._get_filter_condition (model ,model_param ,model_expr [1 ],expr = True ))
224224 else :
225225 raise UliwebError ("unknown operator: '%s'" % (op ))
226226
227227 def _get_filter_condition (self ,model ,model_param ,item ,expr = False ):
228+ #item can be param key, or expr which expected to be a list
228229 if isinstance (item ,list ):
229230 if expr :
230231 return self ._expr (model ,model_param ,model_expr = item )
231232 else :
232- raise UliwebError ("item can be array only in @expr: '%s'" % (item ))
233+ #current implementation won't run here, but keep for safe
234+ raise UliwebError ("item can be list only in @expr: '%s'" % (item ))
233235 if not isinstance (item ,string_types ):
236+ #current implementation won't run here, but keep for safe
234237 raise UliwebError ("item should be array or string: '%s'" % (item ))
235238 n = item
236239 if n [0 ]== "@" :
240+ #current implementation won't run here, but keep for safe
237241 raise UliwebError ("param key should not begin with @: '%s'" % (n ))
238242 if n [- 1 ]== "$" :
239243 name = n [:- 1 ]
240244 if hasattr (model ,name ):
241245 return getattr (model .c ,name ).like (model_param [n ])
242246 else :
243- raise UliwebError ("'%s' does not have '%s'" % (model_name , name ))
247+ raise UliwebError ("model does not have this column: '%s'" % (name ))
244248 elif n [- 1 ]== "}" and n [- 2 ]== "{" :
245249 name = n [:- 2 ]
246250 if hasattr (model ,name ):
247- # TODO
251+ # TODO: https://github.com/APIJSON/APIJSON/blob/master/Document.md#32-%E5%8A%9F%E8%83%BD%E7%AC%A6
248252 pass
249253 raise UliwebError ("still not support '%s'" % (name ))
250254 elif hasattr (model ,n ):
251255 return getattr (model .c ,n )== model_param [n ]
252256 else :
253- raise UliwebError ("not support item: '%s'" % (item ))
257+ raise UliwebError ("non-existent column or not support item: '%s'" % (item ))
254258
255259 def head (self ):
256260 try :
@@ -286,18 +290,21 @@ def _head(self,key):
286290 roles = HEAD .get ("roles" )
287291 permission_check_ok = False
288292 if not params_role :
289- if request .user :
293+ if hasattr ( request , "user" ) and request .user :
290294 params_role = "LOGIN"
291295 else :
292296 params_role = "UNKNOWN"
293297 if params_role not in roles :
294- return json ({"code" :400 ,"msg" :"'%s' not accessible by role '%s'" % (model_name , params_role )})
298+ return json ({"code" :400 ,"msg" :"role '%s' not have permission HEAD for '%s'" % (params_role , model_name )})
295299 if params_role == "UNKNOWN" :
296300 permission_check_ok = True
301+ elif not (hasattr (request ,"user" ) and request .user ):
302+ return json ({"code" :400 ,"msg" :"no login user for role '%s'" % (params_role )})
297303 elif functions .has_role (request .user ,params_role ):
298304 permission_check_ok = True
299305 else :
300306 return json ({"code" :400 ,"msg" :"user doesn't have role '%s'" % (params_role )})
307+ #current implementation won't run here, but keep for safe
301308 if not permission_check_ok :
302309 return json ({"code" :400 ,"msg" :"no permission" })
303310
@@ -381,7 +388,7 @@ def _post_one(self,key,tag):
381388 if roles :
382389 for role in roles :
383390 if role == "OWNER" :
384- if request .user :
391+ if hasattr ( request , "user" ) and request .user :
385392 permission_check_ok = True
386393 if user_id_field :
387394 params [user_id_field ] = request .user .id
@@ -500,7 +507,7 @@ def _put_one(self,key,tag):
500507 if roles :
501508 for role in roles :
502509 if role == "OWNER" :
503- if request .user :
510+ if hasattr ( request , "user" ) and request .user :
504511 if user_id_field :
505512 if obj .to_dict ().get (user_id_field )== request .user .id :
506513 permission_check_ok = True
@@ -535,6 +542,8 @@ def _put_one(self,key,tag):
535542 for k in params :
536543 if k == "id" :
537544 continue
545+ elif k [0 ]== "@" :
546+ continue
538547 elif hasattr (obj ,k ):
539548 kwargs [k ] = params [k ]
540549 else :
@@ -621,7 +630,7 @@ def _delete_one(self,key,tag):
621630 if roles :
622631 for role in roles :
623632 if role == "OWNER" :
624- if request .user :
633+ if hasattr ( request , "user" ) and request .user :
625634 if user_id_field :
626635 if obj .to_dict ().get (user_id_field )== request .user .id :
627636 permission_check_ok = True
0 commit comments