Work on event files and related

This commit is contained in:
Scott Idem
2022-08-19 17:46:19 -04:00
parent 4048bd3a51
commit f3f53e73b4
9 changed files with 282 additions and 25 deletions

View File

@@ -84,7 +84,9 @@ obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Ba
#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_exhibit_tracking'] = {'table_name': 'v_event_exhibit_tracking', 'base_name': Event_Exhibit_Tracking_Base}
obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file
# NOTE: Using v_event_file_simple instead of v_event_file because of linking with for_type and for_id versus event_id, event_session_id, event_presenter_id, etc. 2022-08-19
# NOTE: This will not pull in linked to details like a session name, presentation time, or presenter name.
obj_type_li['event_file'] = {'table_name': 'v_event_file_simple', '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_person'] = {'table_name': 'v_event_person', 'base_name': Event_Person_Base}
obj_type_li['event_person_tracking'] = {'table_name': 'v_event_person_tracking', 'base_name': Event_Person_Tracking_Base}

View File

@@ -1,16 +1,18 @@
import datetime, os, pathlib
import datetime, os, pathlib, time
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from fastapi.responses import FileResponse
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging, common_route_params, Common_Route_Params
from app.lib_general import common_route_params, Common_Route_Params
from app.log import log, logging, logger_reset
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_file_methods import create_event_file_obj, load_event_file_obj # , update_event_file_obj
from app.methods.event_file_methods import create_event_file_obj, handle_delete_event_file, load_event_file_obj # , update_event_file_obj
from app.methods.hosted_file_methods import load_hosted_file_obj, handle_delete_hosted_file
from app.models.event_file_models import Event_File_Base
from app.models.response_models import Resp_Body_Base, mk_resp
@@ -19,7 +21,7 @@ from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
@router.post('/event/file', response_model=Resp_Body_Base)
async def post_event_file_obj(
event_file_obj: Event_File_Base,
x_account_id: str = Header(...),
@@ -43,7 +45,110 @@ async def post_event_file_obj(
return result
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
# ### BEGIN ### API Event File ### create_from_hosted_file() ###
# Updated 2022-08-18
@router.post('/event/file/from_hosted_file/{hosted_file_id}', response_model=Resp_Body_Base)
async def create_from_hosted_file(
event_file_obj: Event_File_Base,
hosted_file_id: str = Query(..., min_length=11, max_length=22),
inc_hosted_file: bool = False,
return_obj: bool = True,
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
# NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
time.sleep(2.5) # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
# NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
if load_hosted_file_obj_result := load_hosted_file_obj(
hosted_file_id = hosted_file_id,
): pass
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The event session was not created. Check the field names and data types.')
hosted_file_obj = load_hosted_file_obj_result
event_file_data = {}
event_file_data['hosted_file_id_random'] = hosted_file_id
event_file_data['for_type'] = event_file_obj.for_type
# event_file_data['for_id'] = event_file_obj.for_id
event_file_data['for_id_random'] = event_file_obj.for_id_random
# event_file_data['event_id'] = event_file_obj.event_id
event_file_data['event_id_random'] = event_file_obj.event_id_random
# event_file_data['event_session_id'] = event_file_obj.event_session_id
event_file_data['event_session_id_random'] = event_file_obj.event_session_id_random
# event_file_data['event_presentation_id'] = event_file_obj.event_presentation_id
event_file_data['event_presentation_id_random'] = event_file_obj.event_presentation_id_random
# event_file_data['event_presenter_id'] = event_file_obj.event_presenter_id
event_file_data['event_presenter_id_random'] = event_file_obj.event_presenter_id_random
# event_file_data['event_location_id'] = event_file_obj.event_location_id
event_file_data['event_location_id_random'] = event_file_obj.event_location_id_random
# event_file_data['event_track_id'] = event_file_obj.event_track_id
event_file_data['event_track_id_random'] = event_file_obj.event_track_id_random
if event_file_obj.filename:
event_file_data['filename'] = event_file_obj.filename
else:
event_file_data['filename'] = hosted_file_obj.filename
if event_file_obj.extension:
event_file_data['extension'] = event_file_obj.extension
else:
event_file_data['extension'] = hosted_file_obj.extension
event_file_data['internal_os'] = event_file_obj.internal_os
# event_file_data['public_use'] = hosted_file_obj.public_use
# event_file_data['lu_file_purpose_id'] = hosted_file_obj.lu_file_purpose_id
# event_file_data['file_purpose'] = hosted_file_obj.file_purpose
# event_file_data['public'] = hosted_file_obj.public
# event_file_data['hide'] = hosted_file_obj.hide
event_file_data['enable'] = True # hosted_file_obj.enable
log.debug(event_file_data)
try:
event_file_obj = Event_File_Base(**event_file_data)
except ValidationError as e:
log.error(e.json())
return False
log.debug(event_file_obj)
create_event_file_obj_result = create_event_file_obj(event_file_obj_new=event_file_obj)
log.debug(create_event_file_obj_result)
if isinstance(create_event_file_obj_result, int):
event_file_id = create_event_file_obj_result
log.info(f'New Event File created. Event File ID = {event_file_id}')
if return_obj:
if load_event_file_obj_result := load_event_file_obj(
event_file_id = event_file_id,
inc_hosted_file = inc_hosted_file,
model_as_dict = True,
):
data = load_event_file_obj_result
else:
data = False
else:
event_file_id = event_file_id
event_file_id_random = get_id_random(record_id=event_file_id, table_name='event_file')
data = {}
data['event_file_id'] = event_file_id
data['event_file_id_random'] = event_file_id_random
log.debug(data)
return mk_resp(data=data, response=commons.response, status_message='The event file was created.')
else:
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an event file was unexpected.')
# ### END ### API Event File ### create_from_hosted_file() ###
@router.patch('/event/file/{obj_id}', response_model=Resp_Body_Base)
async def patch_event_file_obj(
obj_id: str = Query(..., min_length=11, max_length=22),
obj: Event_File_Base = None,
@@ -73,7 +178,7 @@ async def patch_event_file_obj(
# ### BEGIN ### API Event File ### get_event_file_lookup() ###
# Updated 2021-10-06
@router.get('/lookup', response_model=Resp_Body_Base)
@router.get('/event/file/lookup', response_model=Resp_Body_Base)
async def event_file_lookup(
hosted_file_id: str = Query(..., min_length=11, max_length=22),
for_type: str = Query(..., min_length=5, max_length=15),
@@ -129,7 +234,7 @@ async def event_file_lookup(
# ### BEGIN ### API Event File ### download_event_file() ###
# Updated 2021-11-23
@router.get('/{event_file_id}/download', response_model=Resp_Body_Base)
@router.get('/event/file/{event_file_id}/download', response_model=Resp_Body_Base)
async def download_event_file(
event_file_id: str = Query(..., min_length=11, max_length=22),
filename: str = Query(None, min_length=4, max_length=100),
@@ -181,7 +286,7 @@ async def download_event_file(
# ### BEGIN ### API Event File ### get_event_file_obj() ###
# Updated 2021-10-21
@router.get('/{event_file_id}', response_model=Resp_Body_Base)
@router.get('/event/file/{event_file_id}', response_model=Resp_Body_Base)
async def get_event_file_obj(
event_file_id: str = Query(..., min_length=11, max_length=22),
inc_hosted_file: bool = False,
@@ -216,8 +321,9 @@ async def get_event_file_obj(
# ### BEGIN ### API Event File ### delete_event_file_obj() ###
# NOTE: This should be replaced by v2 below!!! 2022-08-18
# Updated 2021-11-02
@router.delete('/{event_file_id}', response_model=Resp_Body_Base)
@router.delete('/event/file/{event_file_id}', response_model=Resp_Body_Base)
async def delete_event_file_obj(
event_file_id: str = Query(..., min_length=11, max_length=22),
hosted_file_id: str = Query(..., min_length=11, max_length=22),
@@ -262,3 +368,92 @@ async def delete_event_file_obj(
return mk_resp(data=True, response=commons.response)
# ### END ### API Event File ### delete_event_file_obj() ###
# ### BEGIN ### API Event File ### delete_event_file_obj_v2() ###
# Updated 2022-08-18
@router.delete('/event/file/{event_file_id}/v2', response_model=Resp_Body_Base)
async def delete_event_file_obj_v2(
event_file_id: str = Query(..., min_length=11, max_length=22),
delete_hosted_file: bool = False, # Not currently used
rm_orphan: bool = False,
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_file_id := redis_lookup_id_random(record_id_random=event_file_id, table_name='event_file'): pass
else: return mk_resp(data=None, status_code=404, response=commons.response)
if event_file_obj := load_event_file_obj(
event_file_id = event_file_id,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# event_file_dict = event_file_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
log.info('Event File loaded')
log.debug(event_file_obj)
pass
else:
log.error('Something went wrong while trying to load the event file.')
return mk_resp(data=False, status_code=400, response=response) # Bad Request
# try:
# log.debug(event_file_obj.hosted_file_id)
# except e:
# log.exception(e)
# log.debug(event_file_obj.for_type)
# log.debug(event_file_obj.for_id)
hosted_file_id = event_file_obj.hosted_file_id
for_type = event_file_obj.for_type
for_id = event_file_obj.for_id
link_to_type = for_type
link_to_id = for_id
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(f'Event File ID: {event_file_id}')
if handle_delete_event_file(event_file_id=event_file_id):
if delete_hosted_file: pass
else:
return mk_resp(data=True, response=commons.response)
else:
log.error('Something went wrong while trying to delete the event file record')
return mk_resp(data=False, status_code=500, response=commons.response, status_message=f'Something went wrong while trying to delete the event file record. Event File ID: {event_file_id}') # Internal Server Error
# ### SECTION ### Handle the deletion of records and file
if hosted_file_delete_result := handle_delete_hosted_file(account_id=commons.x_account_id, hosted_file_id=hosted_file_id, link_to_type=link_to_type, link_to_id=link_to_id, rm_orphan=rm_orphan):
return mk_resp(data=True, response=commons.response, status_message='The hosted file link was deleted. Not an orphan file.')
elif hosted_file_delete_result is None:
log.warning(f'The file and or hosted file record may have already been deleted. Hosted File ID: {hosted_file_id}')
return mk_resp(data=None, status_code=404, response=commons.response, status_message='The file and or hosted file record may have already been deleted.') # Not Found (maybe sort of...)
else:
log.error(f'Something may have gone wrong while trying to delete the hosted file from the server or the hosted_file record.')
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something may have gone wrong while trying to delete the hosted file from the server or the hosted_file record.') # Bad Request
# if event_file_delete_result := sql_delete(table_name='event_file', record_id=event_file_id):
# log.info(f'Deleted Event File ID: {event_file_id}')
# else: return mk_resp(data=False, status_code=500, response=commons.response) # Internal Server Error
# return mk_resp(data=True, response=commons.response)
# sql = f"""
# DELETE FROM hosted_file_link
# WHERE hosted_file_id = :hosted_file_id
# AND link_to_type = :for_type
# AND link_to_id = :for_id
# """
# hosted_file_link_data = {}
# hosted_file_link_data['hosted_file_id'] = hosted_file_id
# hosted_file_link_data['for_type'] = for_type
# hosted_file_link_data['for_id'] = for_id
# log.debug(hosted_file_link_data)
# if event_file_delete_result := sql_delete(sql=sql, data=hosted_file_link_data):
# log.info(f'Deleted Hosted File Link. Hosted File ID: {hosted_file_id}, Link To Type: {for_type}, Link To ID: {for_id}')
# else: return mk_resp(data=False, status_code=500, response=commons.response) # Internal Server Error
# return mk_resp(data=True, response=commons.response)
# ### END ### API Event File ### delete_event_file_obj_v2() ###

View File

@@ -1,4 +1,4 @@
import datetime
import datetime, time
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
@@ -55,6 +55,8 @@ async def patch_event_presenter_obj(
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
time.sleep(2.5)
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)

View File

@@ -207,6 +207,10 @@ async def upload_files(
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
# NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
time.sleep(2.5) # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
# NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING
account_id_random = account_id # This is for the account random str ID
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: