Files
OSIT-AE-API-FastAPI/app/routers/lookup.py
2022-03-27 19:19:21 -04:00

116 lines
5.4 KiB
Python

import datetime
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
from app.config import settings
from app.db_sql import sql_select, redis_lookup_id_random
from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.methods.lu_post_topic_methods import get_lu_post_topic_rec_list
from app.models.response_models import Resp_Body_Base, mk_resp
#from app.models.lookup_models import Lookup_Base
router = APIRouter()
# ### BEGIN ### API Lookup ### get_lookup_li() ###
@router.get('/{for_lookup_name}/list', response_model=Resp_Body_Base)
async def get_lookup_li(
for_lookup_name: Optional[str] = Query(None, min_length=2, max_length=50),
account_id: Optional[str] = Query(None, min_length=11, max_length=50),
for_type: Optional[str] = Query(None, min_length=2, max_length=50),
inc_admin_options: bool = False,
limit: int = 1000,
enabled: str = 'enabled', # enabled, disabled, all
response: Response = Response,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
allowed_lookup_tables = ['country', 'country_subdivision', 'education_degree', 'education_level', 'event_session_type', 'file_purpose', 'membership_group_status', 'membership_person_status', 'membership_type_status', 'order_status', 'post_topic', 'product_type', 'time_zone', 'user_status']
if for_lookup_name in allowed_lookup_tables: pass
else: return mk_resp(data=False, status_code=400, response=response) # Bad Request (not in allowed list)
if for_lookup_name == 'post_topic':
if lu_post_topic_rec_list_result := get_lu_post_topic_rec_list(
account_id = account_id,
for_type = for_type,
inc_admin_options = inc_admin_options,
limit = limit,
enabled = enabled,
):
response_data = lu_post_topic_rec_list_result
elif isinstance(lu_post_topic_rec_list_result, list) or lu_post_topic_rec_list_result is None: # Empty list or None
log.info('No results')
return mk_resp(data=None, status_code=404, response=response) # Not Found
else:
log.warning('Likely bad request')
return mk_resp(data=False, status_code=400, response=response) # Bad Request
elif for_lookup_name == 'country_subdivision':
table_name = f'v_lu_{for_lookup_name}'
if lu_country_subdivision_result := sql_select(table_name=table_name):
log.debug(lu_country_subdivision_result)
log.debug(type(lu_country_subdivision_result))
response_data = lu_country_subdivision_result
elif for_lookup_name == 'time_zone':
table_name = f'v_lu_{for_lookup_name}'
if lu_time_zone_result := sql_select(table_name=table_name):
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(lu_time_zone_result)
log.debug(type(lu_time_zone_result))
# lu_time_zone_result = lu_time_zone_result[0:50]
# fake_li = []
# import secrets
# for time_zone in lu_time_zone_result:
# fake = {}
# # fake['id'] = time_zone['id']
# # fake['name'] = time_zone['name']
# fake['xxx'] = secrets.token_urlsafe(8)
# fake['yyy'] = secrets.token_urlsafe(8)
# fake_li.append(fake)
# # time_zone['name'] = 'asdf'
response_data = lu_time_zone_result
# response_data = fake_li
elif isinstance(lu_time_zone_result, list) or lu_time_zone_result is None: # Empty list or None
log.info('No results')
return mk_resp(data=None, status_code=404, response=response) # Not Found
else:
log.warning('Likely bad request')
return mk_resp(data=False, status_code=400, response=response) # Bad Request
else:
table_name = f'lu_{for_lookup_name}'
if lu_list_result := sql_select(table_name=table_name):
response_data = lu_list_result
# fake_li = []
# import secrets
# for list_item in lu_list_result:
# fake = {}
# # fake['id'] = time_zone['id']
# # fake['name'] = time_zone['name']
# fake['xxx'] = secrets.token_urlsafe(8)
# fake['yyy'] = secrets.token_urlsafe(8)
# fake_li.append(fake)
# response_data = fake_li
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(response_data)
response_data = response_data
elif isinstance(lu_list_result, list) or lu_list_result is None: # Empty list or None
log.info('No results')
return mk_resp(data=None, status_code=404, response=response) # Not Found
else:
log.warning('Likely bad request')
return mk_resp(data=False, status_code=400, response=response) # Bad Request
log.debug(response_data)
return mk_resp(data=response_data)
# ### END ### API Lookup ### get_lookup_li() ###