from __future__ import annotations import datetime, hashlib, logging, os, pytz, redis, secrets from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from ..lib_general import * from ..log import * from .common_field_schema import base_fields from app.config import settings # The pydantic BaseModel to help make consistent REST responses - STI 2021-03-05 class Resp_Body_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) data: Union[dict, list] meta: Optional[dict] # The make response function for REST - STI 2021-03-05 def mk_resp(data={}, dict_to_json=None, status_code=200, status_message=None, status_name=None, success=True, details=None, by_alias=True, exclude_unset=True): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if data is None: data = { 'result': None } elif data == False: data = { 'result': False } elif data == True: data = { 'result': True } resp_body = {} resp_body['data'] = data resp_body['meta'] = {} resp_body['meta']['details'] = details resp_body['meta']['status_code'] = status_code resp_body['meta']['status_message'] = settings.HTTP_STATUS_LI[status_code]['message'] resp_body['meta']['status_name'] = settings.HTTP_STATUS_LI[status_code]['name'] resp_body['meta']['success'] = success if isinstance(data, bool): resp_body['meta']['data_type'] = 'bool' elif isinstance(data, int): resp_body['meta']['data_type'] = 'int' elif isinstance(data, str): resp_body['meta']['data_type'] = 'str' elif isinstance(data, dict): resp_body['meta']['data_type'] = 'dict' elif isinstance(data, list): resp_body['meta']['data_type'] = 'list' resp_body['meta']['data_list_count'] = len(data) log.debug(type(resp_body['data'])) resp_body = Resp_Body_Base(**resp_body).dict(by_alias=by_alias, exclude_unset=exclude_unset) #resp_body_json = resp_body.json(by_alias=True, exclude_unset=False) #response = app.response_class( #response=resp_body_json, #status=status_code, #mimetype='application/json' #) return resp_body