Files
OSIT-AE-API-FastAPI/app/routers/event_presenter.py

310 lines
14 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_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, 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.event_presenter_methods import load_event_presenter_obj, update_event_presenter_obj
from app.models.event_presenter_models import Event_Presenter_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_event_presenter_obj(
obj: Event_Presenter_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_presenter'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
data=obj_data_dict,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_event_presenter_obj(
obj: Event_Presenter_Base,
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_presenter'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type=obj_type,
data=obj_data_dict,
obj_id=obj_id,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
# ### BEGIN ### API Event Presenter ### patch_event_presenter_json() ###
@router.patch('/{event_presenter_id}/json', response_model=Resp_Body_Base)
async def patch_event_presenter_json(
event_presenter_obj: Event_Presenter_Base,
event_presenter_id: str = Query(..., min_length=1, max_length=22),
create_sub_obj: bool = False,
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
include: Optional[list] = [],
exclude: Optional[list] = [],
exclude_unset: Optional[bool] = True,
exclude_none: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass
else:
return mk_resp(data=None, status_code=404)
if event_presenter_obj_up_result := update_event_presenter_obj(
event_presenter_id=event_presenter_id,
event_presenter_obj_up=event_presenter_obj,
create_sub_obj=create_sub_obj,
):
log.debug(event_presenter_obj_up_result)
if return_obj:
event_presenter_obj = load_event_presenter_obj(event_presenter_id=event_presenter_id)
event_presenter_dict = event_presenter_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
return mk_resp(data=event_presenter_dict)
else:
return mk_resp(data=event_presenter_obj_up_result)
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
# ### END ### API Event Presenter ### patch_event_presenter_json() ###
@router.get('/list', response_model=Resp_Body_Base)
async def get_event_presenter_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50), # account
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
enabled: str = 'enabled', # enabled, disabled, all
limit: int = 500,
inc_event_abstract_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_badge: bool = False, # Under event_person obj
inc_event_device_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_file_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_person: bool = False,
inc_event_registration: bool = False, # Under event_person obj
inc_person: bool = False, # Under event_person obj
inc_user: bool = False, # Under event_person obj
x_account_id: str = Header(...),
by_alias: bool = True,
exclude_unset: bool = True,
response: Response = Response,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
data = {}
if for_obj_type == 'account' and for_obj_id:
data['account_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='account')
sql_for_obj_type_id = f'`event`.account_id = :account_id'
elif for_obj_type == 'event' and for_obj_id:
data['event_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event')
sql_for_obj_type_id = f'`event_presenter`.event_id = :event_id'
elif for_obj_type == 'event_location' and for_obj_id: # NOTE: This needs to be checked and probably changed
data['event_location_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_location')
sql_for_obj_type_id = f'`event_presenter`.event_location_id = :event_location_id'
elif for_obj_type == 'event_presentation' and for_obj_id:
data['event_presentation_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_presentation')
sql_for_obj_type_id = f'`event_presenter`.event_presentation_id = :event_presentation_id'
elif for_obj_type == 'event_session' and for_obj_id:
data['event_session_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_session')
sql_for_obj_type_id = f'`event_presenter`.event_session_id = :event_session_id'
elif for_obj_type == 'event_track' and for_obj_id: # NOTE: This needs to be checked and probably changed
data['event_track_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_track')
sql_for_obj_type_id = f'`event_presenter`.event_track_id = :event_track_id'
else:
sql_for_obj_type_id = ''
return mk_resp(data=False, status_code=400, response=response)
if enabled in ['enabled', 'disabled', 'all']:
if enabled == 'enabled':
data['enable'] = True
sql_enabled = f'AND `event_presenter`.enable = :enable'
elif enabled == 'disabled':
data['enable'] = False
sql_enabled = f'AND `event_presenter`.enable = :enable'
elif enabled == 'all':
sql_enabled = ''
else:
return mk_resp(data=False, status_code=400, response=response)
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT `event_presenter`.id AS 'event_presenter_id', `event_presenter`.id_random AS 'event_presenter_id_random'
FROM `event_presenter` AS `event_presenter`
WHERE {sql_for_obj_type_id}
{sql_enabled}
ORDER BY `event_presenter`.created_on DESC, `event_presenter`.updated_on DESC
{sql_limit};
"""
if event_presenter_li_result := sql_select(data=data, sql=sql, as_list=True):
log.debug(event_presenter_li_result)
event_presenter_li = []
for event_presenter in event_presenter_li_result:
event_presenter_id = event_presenter.get('event_presenter_id', None)
if event_presenter_obj := load_event_presenter_obj(
event_presenter_id=event_presenter_id,
enabled=enabled,
inc_event_abstract_list=inc_event_abstract_list,
inc_event_badge=inc_event_badge,
inc_event_device_list=inc_event_device_list,
inc_event_file_list=inc_event_file_list,
inc_event_person=inc_event_person,
#inc_event_presentation_list=inc_event_presentation_list,
#inc_event_presenter_list=inc_event_presenter_list,
inc_event_registration_list=inc_event_registration,
#inc_event_track=inc_event_track,
inc_person=inc_person,
inc_user=inc_user,
):
data = event_presenter_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
event_presenter_li.append(data)
return mk_resp(data=event_presenter_li)
else:
log.debug(event_presenter_li_result)
return mk_resp(data=False, status_code=404, response=response)
# @router.get('/{obj_id}', response_model=Resp_Body_Base)
# async def get_event_presenter_obj(
# obj_id: str = Query(..., min_length=1, max_length=22),
# x_account_id: str = Header(...),
# by_alias: Optional[bool] = True,
# exclude_unset: Optional[bool] = True,
# ):
# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.debug(locals())
# obj_type = 'event_presenter'
# result = get_obj_template(
# obj_type=obj_type,
# obj_id=obj_id,
# by_alias=True,
# exclude_unset=True,
# )
# return result
# ### BEGIN ### API Event Presenter ### get_event_presenter_obj() ###
# Working well as of 2021-06-07. Using as a template for other routes.
@router.get('/{event_presenter_id}', response_model=Resp_Body_Base)
async def get_event_presenter_obj(
event_presenter_id: str = Query(..., min_length=1, max_length=22),
enabled: str = 'enabled', # enabled, disabled, all; For now this covers any included objects or object lists
limit: int = 500, # For now this covers any included objects or object lists
inc_address: bool = False, # Under contact
inc_contact: bool = False, # Under person
inc_event_abstract_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_badge: bool = False, # Under event_person obj
inc_event_device_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_file_list: bool = False, # Part of event_presenter and under event_person obj
inc_event_person: bool = False,
inc_event_person_profile: bool = False,
inc_event_presentation: bool = False, # NOTE: Placehold for future?
# inc_event_presentation_list: bool = False, # NOTE: Placehold for future?
# inc_event_presenter_list: bool = False, # NOTE: Placehold for future?
inc_event_registration: bool = False, # Under event_person obj
inc_event_session: bool = False, # NOTE: Placehold for future?
# inc_event_session_list: bool = False, # NOTE: Placehold for future?
inc_person: bool = False, # Under event_person obj
inc_user: bool = False, # Under event_person obj
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass
else:
return mk_resp(data=None, status_code=404)
if event_presenter_obj := load_event_presenter_obj(
event_presenter_id = event_presenter_id,
enabled = enabled,
limit = limit,
inc_address = inc_address,
inc_contact = inc_contact,
inc_event_abstract_list = inc_event_abstract_list,
inc_event_badge = inc_event_badge,
inc_event_device_list = inc_event_device_list,
inc_event_file_list = inc_event_file_list,
inc_event_person = inc_event_person,
inc_event_person_profile = inc_event_person_profile,
inc_event_presentation = inc_event_presentation,
inc_event_registration = inc_event_registration,
inc_event_session = inc_event_session,
inc_person = inc_person,
inc_user = inc_user,
):
event_presenter_dict = event_presenter_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
pass
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=event_presenter_dict)
#return mk_resp(data=event_presenter_obj)
# ### END ### API Event Presenter ### get_event_presenter_obj() ###
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_presenter_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_presenter'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result