From e7ab95fcb7edc716b78e2f8767a079006394741a Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 22 Apr 2022 15:22:46 -0400 Subject: [PATCH] Work on exhibit tracking --- app/lib_general.py | 33 +++++++++++- app/routers/event_exhibit_tracking.py | 73 +++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 6 deletions(-) diff --git a/app/lib_general.py b/app/lib_general.py index a33d36a..34d9677 100644 --- a/app/lib_general.py +++ b/app/lib_general.py @@ -171,7 +171,7 @@ def create_export_file( rm_id: bool = True, export_type: str = 'CSV', # CSV, Excel ) -> bool|str: - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) hosted_tmp_path = settings.PATH_HOSTED_TMP_ROOT @@ -227,6 +227,37 @@ def create_export_file( return tmp_file_path # True # ### END ### API Lib General ### create_export() ### +# ### BEGIN ### API Lib General ### return_full_tmp_path() ### +# This is for using with return FileResponse(path=full_tmp_path, filename=filename) +# Updated 2022-04-22 +@logger_reset +def return_full_tmp_path( + full_tmp_path: str = None, + subdir_path: str = None, + filename: str = None, + ) -> bool|str: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + hosted_tmp_path = settings.PATH_HOSTED_TMP_ROOT + # hosted_tmp_path = 'admin/temp' + log.info(f'Hosted Temp Path: {hosted_tmp_path}') + + if full_tmp_path: + file_dest = os.path.join(hosted_tmp_path, full_tmp_path) + return file_dest + elif subdir_path and filename: + subdirectory_dest = os.path.join(hosted_tmp_path, subdir_path) + log.debug(subdirectory_dest) + pathlib.Path(subdirectory_dest).mkdir(parents=True, exist_ok=True) + file_dest_w_subdir = os.path.join(subdirectory_dest, filename) + log.info(f'File Dest With Subdir: {file_dest_w_subdir}') + + return file_dest_w_subdir + else: + return False +# ### END ### API Lib General ### return_full_tmp_path() ### + # ### BEGIN ### API Lib General ### send_email() ### # Updated 2021-12-02 diff --git a/app/routers/event_exhibit_tracking.py b/app/routers/event_exhibit_tracking.py index 5cc5546..6dbed38 100644 --- a/app/routers/event_exhibit_tracking.py +++ b/app/routers/event_exhibit_tracking.py @@ -1,9 +1,10 @@ import datetime, 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 create_export_file, return_full_tmp_path, log, logging, common_route_params, Common_Route_Params from app.config import settings from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random, redis_lookup_id_random @@ -229,6 +230,7 @@ async def get_event_exhibit_obj_tracking_list( file_type: str = 'CSV', # CSV, Excel hidden: str = 'not_hidden', # hidden, not_hidden, all + return_file: Optional[bool] = True, commons: Common_Route_Params = Depends(common_route_params), ): @@ -245,21 +247,82 @@ async def get_event_exhibit_obj_tracking_list( hidden = hidden, ): event_exhibit_tracking_result_list = [] + data_dict_list_for_export = [] for event_exhibit_tracking_rec in event_exhibit_tracking_rec_list_result: if load_event_exhibit_tracking_result := load_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_rec.get('event_exhibit_tracking_id'), - inc_event_badge = inc_event_badge, - inc_event_person = inc_event_person, + # inc_event_badge = inc_event_badge, + # inc_event_person = inc_event_person, ): event_exhibit_tracking_result_list.append(load_event_exhibit_tracking_result) + + data_dict = load_event_exhibit_tracking_result.dict(by_alias=True, exclude_unset=True) + data_dict_list_for_export.append(data_dict) else: event_exhibit_tracking_result_list.append(None) - return mk_resp(data=event_exhibit_tracking_result_list, response=commons.response) # Success + + column_name_li = [ + 'event_exhibit_tracking_id_random', + 'event_badge_id_random', + + # 'event_badge_pronouns', + 'event_badge_informal_name', + 'event_badge_title_names', + + 'event_badge_given_name', + 'event_badge_middle_name', + 'event_badge_family_name', + + 'event_badge_designations', + 'event_badge_professional_title', 'event_badge_display_professional_title', + + 'event_badge_display_name', + 'event_badge_full_name', + + 'event_badge_affiliations', + 'event_badge_display_affiliations', + 'event_badge_email', + + 'event_badge_city', + 'event_badge_country_subdivision_code', 'event_badge_state_province_abb', + 'event_badge_state_province', + 'event_badge_country_alpha_2_code', + 'event_badge_country', + + 'event_badge_location', + 'event_badge_display_location', + ] + + datetime_format='%Y-%m-%d_%H%M' + + # current_datetime = datetime.datetime.now() # Servers timezone (Eastern) + current_datetime_utc = datetime.datetime.utcnow() + current_datetime_utc = current_datetime_utc.strftime(datetime_format) + filename = f'exhibit_tracking_list_{current_datetime_utc}' + if file_type == 'CSV': + filename_w_ext = filename+'.csv' + elif file_type == 'Excel': + filename_w_ext = filename+'.xlsx' + + if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='event_exhibit', filename=filename, export_type=file_type): + tmp_file_path = result + else: + log.error('Something went wrong while creating or saving the export file') + tmp_file_path = result + + log.info(f'Filename: {filename_w_ext}') + if return_file: + if full_tmp_path := return_full_tmp_path(full_tmp_path=tmp_file_path): + return FileResponse(path=full_tmp_path, filename=filename_w_ext) # , media_type='application/octet-stream' + else: + return mk_resp(data=data_dict_list_for_export, tmp_file_path=tmp_file_path, response=commons.response) + + # return mk_resp(data=event_exhibit_tracking_result_list, response=commons.response) # Success elif isinstance(event_exhibit_tracking_rec_list_result, list): return mk_resp(data=False, status_code=404, response=commons.response) # Not Found else: return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request -# ### END ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ### +# ### END ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_export() ### # ### BEGIN ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ###