Clean up and I think I fixed a weird bug with Pydantic models and the list object type. It seems to try for a dict conversion first if Union[dict,list] is used.

This commit is contained in:
Scott Idem
2021-06-29 18:12:52 -04:00
parent 2d988fc405
commit 830b9ee608
6 changed files with 70 additions and 25 deletions

View File

@@ -22,7 +22,7 @@ class Resp_Body_Base(BaseModel):
# alias = 'test_prop_alias'
# )
data: Union[dict, list]
data: Union[list, dict]
meta: Optional[dict]
# ### END ### API Response Model ### Resp_Body_Base() ###
@@ -41,17 +41,22 @@ def mk_resp(
exclude_unset: bool = True,
response = None
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if data is None: data_out = { 'result': data }
elif data == False: data_out = { 'result': data }
elif data == True: data_out = { 'result': data }
elif isinstance(data, dict): data_out = data
elif isinstance(data, list): data_out = data
elif isinstance(data, dict):
log.info('Data type is a dict')
data_out = data
elif isinstance(data, list):
log.info('Data type is a list')
data_out = data
else: # Assuming it is still and object. This should be improved. Example model type: "<class 'app.models.account_models.Account_Base'>"
log.info('Data type is other')
data_out = data.dict(by_alias=by_alias, exclude_unset=exclude_unset)
log.debug(data_out)
# log.debug(data_out)
resp_body = {}
resp_body['data'] = data_out
@@ -90,11 +95,15 @@ def mk_resp(
elif status_code == 503: response.status_code = status.HTTP_503_SERVICE_UNAVAILABLE
elif status_code == 504: response.status_code = status.HTTP_504_GATEWAY_TIMEOUT
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(type(resp_body['data']))
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.debug(resp_body)
# log.debug(type(resp_body['data']))
# import json
# with open('data.txt', 'w') as outfile:
# json.dump(resp_body['data'], outfile)
resp_body_obj = Resp_Body_Base(**resp_body)
# resp_body_obj.test_prop = 'my value'
log.debug(resp_body_obj)
resp_body_dict = resp_body_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
log.debug(resp_body_dict)