Skip to content

Commit cbd7aad

Browse files
committed
catch exception in apijson, log and return error json
1 parent edc8e5a commit cbd7aad

File tree

1 file changed

+77
-46
lines changed

1 file changed

+77
-46
lines changed

uliweb_apijson/apijson/views.py

Lines changed: 77 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,22 @@ def apply_vars(self):
3030
self.rdict[key[:-1]] = v
3131

3232
def get(self):
33-
for key in self.request_data:
34-
if key[-1]=="@":
35-
#vars need to be applied later
36-
pass
37-
elif key[-2:]=="[]":
38-
rsp = self._get_array(key)
39-
else:
40-
rsp = self._get_one(key)
41-
if rsp: return rsp
42-
self.apply_vars()
33+
try:
34+
for key in self.request_data:
35+
if key[-1]=="@":
36+
#vars need to be applied later
37+
pass
38+
elif key[-2:]=="[]":
39+
rsp = self._get_array(key)
40+
else:
41+
rsp = self._get_one(key)
42+
if rsp: return rsp
43+
self.apply_vars()
44+
except Exception as e:
45+
err = "exception when handling 'apijson get': %s"%(e)
46+
log.error(err)
47+
traceback.print_exc()
48+
return json({"code":400,"msg":err})
4349
return json(self.rdict)
4450

4551
def _get_one(self,key):
@@ -258,9 +264,15 @@ def _filter_owner(self,model,model_setting,q):
258264
return owner_filtered,q
259265

260266
def head(self):
261-
for key in self.request_data:
262-
rsp = self._head(key)
263-
if rsp: return rsp
267+
try:
268+
for key in self.request_data:
269+
rsp = self._head(key)
270+
if rsp: return rsp
271+
except Exception as e:
272+
err = "exception when handling 'apijson head': %s"%(e)
273+
log.error(err)
274+
traceback.print_exc()
275+
return json({"code":400,"msg":err})
264276

265277
return json(self.rdict)
266278

@@ -321,17 +333,24 @@ def _head(self,key):
321333
self.rdict[key] = rdict
322334

323335
def post(self):
324-
tag = self.request_data.get("@tag")
325-
if not tag:
326-
return json({"code":400,"msg":"'tag' parameter is needed"})
327-
for key in self.request_data:
328-
if key[0]!="@":
329-
rsp = self._post_one(key,tag)
330-
if rsp:
331-
return rsp
332-
else:
333-
#only accept one table
334-
return json(self.rdict)
336+
try:
337+
tag = self.request_data.get("@tag")
338+
if not tag:
339+
return json({"code":400,"msg":"'tag' parameter is needed"})
340+
for key in self.request_data:
341+
if key[0]!="@":
342+
rsp = self._post_one(key,tag)
343+
if rsp:
344+
return rsp
345+
else:
346+
#only accept one table
347+
return json(self.rdict)
348+
except Exception as e:
349+
err = "exception when handling 'apijson post': %s"%(e)
350+
log.error(err)
351+
traceback.print_exc()
352+
return json({"code":400,"msg":err})
353+
335354
return json(self.rdict)
336355

337356
def _post_one(self,key,tag):
@@ -423,17 +442,23 @@ def _post_one(self,key,tag):
423442
self.rdict[key] = obj_dict
424443

425444
def put(self):
426-
tag = self.request_data.get("@tag")
427-
if not tag:
428-
return json({"code":400,"msg":"'tag' parameter is needed"})
429-
for key in self.request_data:
430-
if key[0]!="@":
431-
rsp = self._put_one(key,tag)
432-
if rsp:
433-
return rsp
434-
else:
435-
#only accept one table
436-
return json(self.rdict)
445+
try:
446+
tag = self.request_data.get("@tag")
447+
if not tag:
448+
return json({"code":400,"msg":"'tag' parameter is needed"})
449+
for key in self.request_data:
450+
if key[0]!="@":
451+
rsp = self._put_one(key,tag)
452+
if rsp:
453+
return rsp
454+
else:
455+
#only accept one table
456+
return json(self.rdict)
457+
except Exception as e:
458+
err = "exception when handling 'apijson put': %s"%(e)
459+
log.error(err)
460+
traceback.print_exc()
461+
return json({"code":400,"msg":err})
437462

438463
return json(self.rdict)
439464

@@ -527,17 +552,23 @@ def _put_one(self,key,tag):
527552
self.rdict[key] = obj_dict
528553

529554
def delete(self):
530-
tag = self.request_data.get("@tag")
531-
if not tag:
532-
return json({"code":400,"msg":"'tag' parameter is needed"})
533-
for key in self.request_data:
534-
if key[0]!="@":
535-
rsp = self._delete_one(key,tag)
536-
if rsp:
537-
return rsp
538-
else:
539-
#only accept one table
540-
return json(self.rdict)
555+
try:
556+
tag = self.request_data.get("@tag")
557+
if not tag:
558+
return json({"code":400,"msg":"'tag' parameter is needed"})
559+
for key in self.request_data:
560+
if key[0]!="@":
561+
rsp = self._delete_one(key,tag)
562+
if rsp:
563+
return rsp
564+
else:
565+
#only accept one table
566+
return json(self.rdict)
567+
except Exception as e:
568+
err = "exception when handling 'apijson delete': %s"%(e)
569+
log.error(err)
570+
traceback.print_exc()
571+
return json({"code":400,"msg":err})
541572
return json(self.rdict)
542573

543574
def _delete_one(self,key,tag):

0 commit comments

Comments
 (0)