From 55d953b445fb84a1268621d6050ba007b6928201 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 19 Dec 2023 12:30:51 -0500 Subject: [PATCH] Improved API CRUD POST and PATCH handeling of data validation errors. --- app/routers/api_crud.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/routers/api_crud.py b/app/routers/api_crud.py index 2d3b120..aa9fbe8 100644 --- a/app/routers/api_crud.py +++ b/app/routers/api_crud.py @@ -569,9 +569,18 @@ async def patch_obj( if run_safety_check: log.info('Running safety check by default') base_name = obj_type_li[obj_name]['base_name'] - obj_model = base_name(**crud.data_list) # .dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset) + try: + obj_model = base_name(**crud.data_list) + except Exception as e: + log.error('An unknown exception happened. Returning False.') + log.exception('**** *** ** * ### BEGIN ### Exception Happened: Returning False * ** *** ****') + log.warning(json.dumps(crud.data_list, indent=4)) + return mk_resp(data=False, status_code=400, response=commons.response, status_message='There was likely a validation error. Returned False.') + else: + log.info('Successfully updated the object model.') + pass log.debug(obj_model) - # obj_dict = obj_model.dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset, exclude=exclude) + obj_dict = obj_model.dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset, include=field_list) log.debug(obj_dict) crud_data = obj_dict @@ -713,16 +722,17 @@ async def post_obj( log.info('Running safety check by default') base_name = obj_type_li[obj_name]['base_name'] try: - obj_model = base_name(**crud.data_list) # .dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset) + obj_model = base_name(**crud.data_list) except Exception as e: log.error('An unknown exception happened. Returning False.') log.exception('**** *** ** * ### BEGIN ### Exception Happened: Returning False * ** *** ****') + log.warning(json.dumps(crud.data_list, indent=4)) return mk_resp(data=False, status_code=400, response=commons.response, status_message='There was likely a validation error. Returned False.') else: log.info('Successfully created the object model.') pass log.debug(obj_model) - # obj_dict = obj_model.dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset, exclude=exclude) + obj_dict = obj_model.dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset, include=field_list) log.debug(obj_dict) crud_data = obj_dict