A lot of work on event related modules. Also a lot of clean up

This commit is contained in:
Scott Idem
2021-06-07 16:48:55 -04:00
parent 979e0c2174
commit 33ec6a4acb
14 changed files with 423 additions and 66 deletions

View File

@@ -17,10 +17,17 @@ from app.models.archive_models import *
from app.models.archive_content_models import *
from app.models.contact_models import *
from app.models.event_models import *
from app.models.event_abstract_models import *
from app.models.event_badge_models import *
from app.models.event_exhibit_models import *
#from app.models.event_file_models import *
from app.models.event_location_models import *
from app.models.event_person_models import *
from app.models.event_presentation_models import *
from app.models.event_presenter_models import *
from app.models.event_registration_models import *
from app.models.event_session_models import *
from app.models.event_track_models import *
from app.models.journal_entry_models import *
from app.models.membership_models import *
from app.models.order_models import *
@@ -54,18 +61,19 @@ obj_type_li['archive_content'] = {'table_name': 'v_archive_content', 'base_name'
obj_type_li['contact'] = {'table_name': 'v_contact', 'base_name': Contact_Base}
#obj_type_li['cont_edu_cert'] = {'table_name': 'cont_edu_cert', 'base_name': Cont_Edu_Cert_Base}
obj_type_li['event'] = {'table_name': 'v_event', 'base_name': Event_Base}
#obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base}
obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base}
#obj_type_li['event_badge_log'] = {'table_name': 'event_badge_log', 'base_name': Event_Badge_Log_Base}
#obj_type_li['event_badge_template'] = {'table_name': 'event_badge_template', 'base_name': Event_Badge_Template_Base}
#obj_type_li['event_device'] = {'table_name': 'event_device', 'base_name': Event_Device_Base}
obj_type_li['event_exhibit'] = {'table_name': 'v_event_exhibit', 'base_name': Event_Exhibit_Base} # NOTE check view name: *_detail?
#obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file
obj_type_li['event_location'] = {'table_name': 'v_event_location', 'base_name': Event_Location_Base}
#obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base}
#obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base}
obj_type_li['event_person'] = {'table_name': 'v_event_person', 'base_name': Event_Person_Base}
obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base}
obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base}
obj_type_li['event_registration'] = {'table_name': 'v_event_registration', 'base_name': Event_Registration_Base}
#obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base}
#obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base}
obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base}
obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base}
#obj_type_li['hosted_file'] = {'table_name': 'hosted_file', 'base_name': Hosted_File_Base}
#obj_type_li['hosted_file_link'] = {'table_name': 'hosted_file_link', 'base_name': Hosted_File_Link_Base}
#obj_type_li['journal'] = {'table_name': 'v_journal', 'base_name': Journal_Base}

View File

@@ -5,11 +5,11 @@ from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import *
from ..log import *
# from ..log import *
from app.config import settings
from app.db_sql import *
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
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_methods import load_event_obj

View File

@@ -24,6 +24,11 @@ from app.models.user_models import User_New_Base, User_Base
router = APIRouter()
# ### BEGIN ### API Event Person Route ### post_event_person_new() ###
# Initialize/create a new event person
# Create a person record (with a contact record and an address for the contact record)
# Create a user record
# Create an event_person record with the new person and user IDs
@router.post('/new', response_model=Resp_Body_Base)
async def post_event_person_new(
event_person_new_init: Event_Person_New_Base,
@@ -97,8 +102,6 @@ async def post_event_person_new(
log.debug('A new person was not created')
return mk_resp(data=False)
#return mk_resp(data=person_obj)
# New user
user_new = {}
user_new['account_id_random'] = account_id_random
@@ -124,8 +127,6 @@ async def post_event_person_new(
log.debug('A new user was not created')
return mk_resp(data=False)
#return mk_resp(data=user_obj)
# New event person
event_person_new = {}
event_person_new['account_id_random'] = account_id_random
@@ -158,12 +159,15 @@ async def post_event_person_new(
event_person_obj.user = user_obj
log.debug(event_person_obj)
event_person_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
pass
else:
log.debug('A new event_person was not created')
return mk_resp(data=False)
log.debug(event_person_obj)
return mk_resp(data=event_person_obj)
return mk_resp(data=event_person_dict)
#return mk_resp(data=event_person_obj)
# ### BEGIN ### API Event Person Route ### post_event_person_new() ###
# ### BEGIN ### API Event Person ### get_event_person_obj() ###

View File

@@ -9,7 +9,7 @@ from app.lib_general import log, logging
from app.config import settings
from app.db_sql import *
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.models.event_person_detail_models import Event_Person_Detail_Base
from app.models.response_models import *

View File

@@ -0,0 +1,261 @@
import datetime
#from datetime import datetime, time, timedelta
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
#from ..log import *
from app.config import settings
from app.db_sql import *
from .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
from app.models.event_presenter_models import Event_Presenter_Base
from app.models.response_models import *
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,
):
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,
):
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
@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,
):
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)
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)
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_list=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)
# @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_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_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,
):
log.setLevel(logging.DEBUG) # 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_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=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) # Bad Request
return mk_resp(data=event_presenter_dict)
#return mk_resp(data=event_presenter_obj)
# ### END ### API Event ### 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(...),
):
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

View File

@@ -99,7 +99,7 @@ async def get_event_session_obj_li(
enabled: str = 'enabled', # enabled, disabled, all
from_datetime: Optional[datetime.datetime] = None, # based on start_datetime
to_datetime: Optional[datetime.datetime] = None, # based on start_datetime
limit: int = None,
limit: int = 500,
inc_event_abstract_list: bool = False,
inc_event_badge_list: bool = False,
inc_event_device_list: bool = False,
@@ -111,8 +111,8 @@ async def get_event_session_obj_li(
inc_event_registration_list: bool = False,
inc_event_track: bool = False,
inc_poc_event_person: bool = False,
inc_poc_person: bool = False,
inc_user: bool = False,
# inc_poc_person: bool = False,
# inc_user: bool = False,
x_account_id: str = Header(...),
by_alias: bool = True,
exclude_unset: bool = True,
@@ -197,8 +197,8 @@ async def get_event_session_obj_li(
inc_event_registration_list=inc_event_registration_list,
inc_event_track=inc_event_track,
inc_poc_event_person=inc_poc_event_person,
inc_poc_person=inc_poc_person,
inc_user=inc_user,
# inc_poc_person=inc_poc_person,
# inc_user=inc_user,
):
data = event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
event_session_li.append(data)