Skip to content

Commit 5559694

Browse files
committed
apijson post/put/delete should get model name from request_tag setting; add NECESSARY support in _put_one
1 parent f6133f8 commit 5559694

File tree

1 file changed

+38
-30
lines changed

1 file changed

+38
-30
lines changed

uliweb_apijson/apijson/views.py

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -355,21 +355,22 @@ def post(self):
355355
return json(self.rdict)
356356

357357
def _post_one(self,key,tag):
358-
modelname = key
358+
APIJSON_REQUESTS = settings.APIJSON_REQUESTS or {}
359+
request_tag = APIJSON_REQUESTS.get(tag,{})
360+
model_name = request_tag.get("@model_name") or tag
361+
359362
params = self.request_data[key]
360363
params_role = params.get("@role")
361364

362365
try:
363-
model = getattr(models,modelname)
364-
model_setting = settings.APIJSON_MODELS.get(modelname,{})
366+
model = getattr(models,model_name)
367+
model_setting = settings.APIJSON_MODELS.get(model_name,{})
365368
user_id_field = model_setting.get("user_id_field")
366369
except ModelNotFound as e:
367-
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
368-
return json({"code":400,"msg":"model '%s' not found"%(modelname)})
370+
log.error("try to find model '%s' but not found: '%s'"%(model_name,e))
371+
return json({"code":400,"msg":"model '%s' not found"%(model_name)})
369372

370-
request_tag = settings.APIJSON_REQUESTS.get(tag,{})
371-
_model_name = request_tag.get("@model_name") or tag
372-
request_tag_config = request_tag.get(_model_name,{})
373+
request_tag_config = request_tag.get(model_name,{})
373374
if not request_tag_config:
374375
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
375376
tag_POST = request_tag_config.get("POST",{})
@@ -387,7 +388,7 @@ def _post_one(self,key,tag):
387388
roles = model_POST.get("roles")
388389
if params_role:
389390
if not params_role in roles:
390-
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(modelname,params_role)})
391+
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(model_name,params_role)})
391392
roles = [params_role]
392393

393394
if roles:
@@ -466,22 +467,22 @@ def put(self):
466467
return json(self.rdict)
467468

468469
def _put_one(self,key,tag):
469-
modelname = key
470+
APIJSON_REQUESTS = settings.APIJSON_REQUESTS or {}
471+
request_tag = APIJSON_REQUESTS.get(tag,{})
472+
model_name = request_tag.get("@model_name") or tag
473+
470474
params = self.request_data[key]
471475
params_role = params.get("@role")
472476

473477
try:
474-
model = getattr(models,modelname)
475-
model_setting = settings.APIJSON_MODELS.get(modelname,{})
478+
model = getattr(models,model_name)
479+
model_setting = settings.APIJSON_MODELS.get(model_name,{})
476480
user_id_field = model_setting.get("user_id_field")
477481
except ModelNotFound as e:
478-
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
479-
return json({"code":400,"msg":"model '%s' not found"%(modelname)})
482+
log.error("try to find model '%s' but not found: '%s'"%(model_name,e))
483+
return json({"code":400,"msg":"model '%s' not found"%(model_name)})
480484

481-
APIJSON_REQUESTS = settings.APIJSON_REQUESTS or {}
482-
request_tag = APIJSON_REQUESTS.get(tag,{})
483-
_model_name = request_tag.get("@model_name") or tag
484-
request_tag_config = request_tag.get(_model_name,{})
485+
request_tag_config = request_tag.get(model_name,{})
485486
if not request_tag_config:
486487
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
487488
tag_PUT = request_tag_config.get("PUT",{})
@@ -508,7 +509,7 @@ def _put_one(self,key,tag):
508509
roles = model_PUT.get("roles")
509510
if params_role:
510511
if not params_role in roles:
511-
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(modelname,params_role)})
512+
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(model_name,params_role)})
512513
roles = [params_role]
513514
if roles:
514515
for role in roles:
@@ -538,14 +539,20 @@ def _put_one(self,key,tag):
538539
log.error("request '%s' disallow '%s'"%(tag,field))
539540
return json({"code":400,"msg":"request '%s' disallow '%s'"%(tag,field)})
540541

542+
NECESSARY = tag_PUT.get("NECESSARY")
543+
if NECESSARY:
544+
for field in NECESSARY:
545+
if field not in params:
546+
log.error("request '%s' have not necessary field '%s'"%(tag,field))
547+
return json({"code":400,"msg":"request '%s' have not necessary field '%s'"%(tag,field)})
541548
kwargs = {}
542549
for k in params:
543550
if k=="id":
544551
continue
545552
elif hasattr(obj,k):
546553
kwargs[k] = params[k]
547554
else:
548-
return json({"code":400,"msg":"'%s' don't have field '%s'"%(modelname,k)})
555+
return json({"code":400,"msg":"'%s' don't have field '%s'"%(model_name,k)})
549556
obj.update(**kwargs)
550557
ret = obj.save()
551558
obj_dict = {"id":id_}
@@ -582,21 +589,22 @@ def delete(self):
582589
return json(self.rdict)
583590

584591
def _delete_one(self,key,tag):
585-
modelname = key
592+
APIJSON_REQUESTS = settings.APIJSON_REQUESTS or {}
593+
request_tag = APIJSON_REQUESTS.get(tag,{})
594+
model_name = request_tag.get("@model_name") or tag
595+
586596
params = self.request_data[key]
587597
params_role = params.get("@role")
588598

589599
try:
590-
model = getattr(models,modelname)
591-
model_setting = settings.APIJSON_MODELS.get(modelname,{})
600+
model = getattr(models,model_name)
601+
model_setting = settings.APIJSON_MODELS.get(model_name,{})
592602
user_id_field = model_setting.get("user_id_field")
593603
except ModelNotFound as e:
594-
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
595-
return json({"code":400,"msg":"model '%s' not found"%(modelname)})
604+
log.error("try to find model '%s' but not found: '%s'"%(model_name,e))
605+
return json({"code":400,"msg":"model '%s' not found"%(model_name)})
596606

597-
request_tag = settings.APIJSON_REQUESTS.get(tag,{})
598-
_model_name = request_tag.get("@model_name") or tag
599-
request_tag_config = request_tag.get(_model_name,{})
607+
request_tag_config = request_tag.get(model_name,{})
600608
if not request_tag_config:
601609
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
602610
tag_DELETE = request_tag_config.get("DELETE",{})
@@ -623,7 +631,7 @@ def _delete_one(self,key,tag):
623631
roles = DELETE.get("roles")
624632
if params_role:
625633
if not params_role in roles:
626-
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(modelname,params_role)})
634+
return json({"code":400,"msg":"'%s' not accessible by role '%s'"%(model_name,params_role)})
627635
roles = [params_role]
628636
if roles:
629637
for role in roles:
@@ -650,7 +658,7 @@ def _delete_one(self,key,tag):
650658
obj.delete()
651659
ret = True
652660
except Exception as e:
653-
log.error("remove %s %s fail"%(modelname,id_))
661+
log.error("remove %s %s fail"%(model_name,id_))
654662
ret = False
655663

656664
obj_dict = {"id":id_}

0 commit comments

Comments
 (0)