diff --git a/app/ae_obj_types_def.py b/app/ae_obj_types_def.py index 1cadc86..17fddb3 100644 --- a/app/ae_obj_types_def.py +++ b/app/ae_obj_types_def.py @@ -15,6 +15,7 @@ from app.models.data_store_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_device_models import * from app.models.event_exhibit_models import * from app.models.event_exhibit_tracking_models import * from app.models.event_file_models import * @@ -58,8 +59,13 @@ from app.models.e_stripe_models import * obj_type_kv_li = { 'sponsorship': { - 'tbl': 'sponsorship', 'tbl_default': 'v_sponsorship', 'tbl_update': 'sponsorship', - 'mdl': Sponsorship_Base, 'mdl_default': Sponsorship_Base, 'mdl_in': Sponsorship_Base, 'mdl_out': Sponsorship_Base, + 'tbl': 'sponsorship', + 'tbl_default': 'v_sponsorship', + 'tbl_update': 'sponsorship', + 'mdl': Sponsorship_Base, + 'mdl_default': Sponsorship_Base, + 'mdl_in': Sponsorship_Base, + 'mdl_out': Sponsorship_Base, 'exp_default': [ 'sponsorship_id_random', # 'account_id_random', 'sponsorship_cfg_id_random', @@ -100,8 +106,22 @@ obj_type_kv_li = { 'tbl_update': 'sponsorship_cfg', 'mdl': Sponsorship_Cfg_Base, 'mdl_default': Sponsorship_Cfg_Base, - 'mdl_in': None, - 'mdl_out': None + # 'mdl_in': None, + # 'mdl_out': None + }, + # Updated 2024-08-14 + 'event': { + 'tbl': 'event', + 'tbl_default': 'v_event', + 'tbl_alt': 'v_event_w_file_count', + 'mdl': Event_Base, + 'mdl_default': Event_Base, + 'mdl_alt': Event_Meeting_Flat_Base, + # 'table_name': 'v_event', + # 'table_name_alt': 'v_event_w_file_count', + # 'tbl_name_update': 'event', + # 'base_name': Event_Base, + # 'base_name_alt': Event_Meeting_Flat_Base }, 'event_badge': { 'tbl': 'event_badge', @@ -110,8 +130,53 @@ obj_type_kv_li = { 'tbl_update': 'event_badge', 'mdl': Event_Badge_Base, 'mdl_default': Event_Badge_Basic_Base, - 'mdl_alt': Event_Badge_Basic_Base + # 'mdl_alt': Event_Badge_Basic_Base }, + # Updated 2024-08-14 + 'event_device': { + 'tbl': 'event_device', + 'tbl_default': 'v_event_device', + 'tbl_alt': 'v_event_device', + 'mdl': Event_Device_Base, + 'mdl_default': Event_Device_Base, + }, + # Updated 2024-08-14 + 'event_file': { + 'tbl': 'event_file', + 'tbl_default': 'v_event_file_simple', # 'v_event_file' or 'v_event_file_simple' + 'tbl_alt': 'v_event_file', # or 'v_event_file_detail' + 'mdl': Event_File_Base, + 'mdl_default': Event_File_Base, + # 'table_name': 'v_event_file_simple', + # 'table_name_alt': 'v_event_file', + # 'tbl_name_update': 'event_file_simple', + # 'base_name': Event_File_Base + }, # Should this eventually be changed to event_hosted_file + # Updated 2024-08-14 + 'event_location': { + 'tbl': 'event_location', + 'tbl_default': 'v_event_location', + 'tbl_alt': 'v_event_location_w_file_count', + 'mdl': Event_Location_Base, + 'mdl_default': Event_Location_Base, + # 'table_name': 'v_event_location', + # 'table_name_alt': 'v_event_location_w_file_count', + # 'tbl_name_update': 'event_location', + # 'base_name': Event_Location_Base + }, + # Updated 2024-08-14 + 'event_presentation': { + 'tbl': 'event_presentation', + 'tbl_default': 'v_event_presentation', + 'tbl_alt': 'v_event_presentation_w_file_count', + 'mdl': Event_Presentation_Base, + 'mdl_default': Event_Presentation_Base, + # 'table_name': 'v_event_presentation', + # 'table_name_alt': 'v_event_presentation_w_file_count', + # 'tbl_name_update': 'event_presentation', + # 'base_name': Event_Presentation_Base + }, + # Updated 2024-08-14 'event_presenter': { 'tbl': 'event_presenter', 'tbl_default': 'v_event_presenter', @@ -134,20 +199,23 @@ obj_type_kv_li = { 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on', ], # WARNING: These must be updated soon! - 'table_name': 'v_event_presenter', - 'table_name_alt': 'v_event_presenter_w_file_count', - 'tbl_name_update': 'event_presenter', - 'base_name': Event_Presenter_Base + # 'table_name': 'v_event_presenter', + # 'table_name_alt': 'v_event_presenter_w_file_count', + # 'tbl_name_update': 'event_presenter', + # 'base_name': Event_Presenter_Base # WARNING: These must be updated soon! }, + # Updated 2024-08-14 'event_session': { - 'table_name': 'v_event_session', + 'tbl': 'event_session', 'tbl_default': 'v_event_session', 'tbl_alt': 'v_event_session_w_file_count', 'tbl_name_update': 'event_session', + 'mdl': Event_Session_Base, 'mdl_default': Event_Session_Base, - 'base_name': Event_Session_Base, - 'exclude_for_db': {'poc_person_id', 'file_count', 'internal_use_count', 'enable_from', 'enable_to', 'event_name', 'event_start_datetime', 'event_end_datetime', 'event_location_name', 'event_track_name', 'event_abstract_list', 'event_badge_list', 'event_device_list', 'event_file_list', 'event_file_internal_use_list', 'event_location', 'event_location_list', 'event_person_list', 'event_presenter_cat', 'event_presentation_list', 'event_presenter_list', 'event_track', 'poc_event_person'} + 'exclude_for_db': {'poc_person_id', 'file_count', 'internal_use_count', 'enable_from', 'enable_to', 'event_name', 'event_start_datetime', 'event_end_datetime', 'event_location_name', 'event_track_name', 'event_abstract_list', 'event_badge_list', 'event_device_list', 'event_file_list', 'event_file_internal_use_list', 'event_location', 'event_location_list', 'event_person_list', 'event_presenter_cat', 'event_presentation_list', 'event_presenter_list', 'event_track', 'poc_event_person'}, + # 'table_name': 'v_event_session', + # 'base_name': Event_Session_Base, }, } # WARNING: These must be updated soon! @@ -227,23 +295,25 @@ obj_type_kv_li['archive_content'] = {'table_name': 'v_archive_content', 'tbl_nam obj_type_kv_li['cont_edu_cert'] = {'table_name': 'v_cont_edu_cert', 'tbl_name_update': 'cont_edu_cert', 'base_name': Cont_Edu_Cert_Base} obj_type_kv_li['cont_edu_cert_person'] = {'table_name': 'v_cont_edu_cert_person', 'tbl_name_update': 'cont_edu_cert_person', 'base_name': Cont_Edu_Cert_Person_Base} -obj_type_kv_li['event'] = {'table_name': 'v_event', 'table_name_alt': 'v_event_w_file_count', -'tbl_name_update': 'event', 'base_name': Event_Base, 'base_name_alt': Event_Meeting_Flat_Base} + +# EVENT MOVED UP +# EVENT DEVICE MOVED UP +# EVENT LOCATION MOVED UP +# EVENT PRESENTER MOVED UP +# EVENT SESSION MOVED UP obj_type_kv_li['event_abstract'] = {'table_name': 'v_event_abstract', 'tbl_name_update': 'event_abstract', 'base_name': Event_Abstract_In} obj_type_kv_li['event_badge'] = {'table_name': 'v_event_badge', 'table_name_alt': 'v_event_badge_only', 'tbl_name_update': 'event_badge', 'base_name': Event_Badge_Base, 'base_name_alt': Event_Badge_Basic_Base} #obj_type_kv_li['event_badge_log'] = {'table_name': 'event_badge_log', 'tbl_name_update': 'event_badge_log', 'base_name': Event_Badge_Log_Base} #obj_type_kv_li['event_badge_template'] = {'table_name': 'event_badge_template', 'tbl_name_update': 'event_badge_template', 'base_name': Event_Badge_Template_Base} -#obj_type_kv_li['event_device'] = {'table_name': 'event_device', 'tbl_name_update': 'event_device', 'base_name': Event_Device_Base} + obj_type_kv_li['event_exhibit'] = {'table_name': 'v_event_exhibit', 'tbl_name_update': 'event_exhibit', 'base_name': Event_Exhibit_Base} # NOTE check view name: *_detail? obj_type_kv_li['event_exhibit_tracking'] = {'table_name': 'v_event_exhibit_tracking', 'tbl_name_update': 'event_exhibit_tracking', 'base_name': Event_Exhibit_Tracking_Base} # 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_kv_li['event_file'] = {'table_name': 'v_event_file_simple', 'table_name_alt': 'v_event_file', 'tbl_name_update': 'event_file_simple', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file -obj_type_kv_li['event_location'] = {'table_name': 'v_event_location', 'table_name_alt': 'v_event_location_w_file_count', 'tbl_name_update': 'event_location', 'base_name': Event_Location_Base} obj_type_kv_li['event_person'] = {'table_name': 'v_event_person', 'tbl_name_update': 'event_person', 'base_name': Event_Person_Base} obj_type_kv_li['event_person_tracking'] = {'table_name': 'v_event_person_tracking', 'tbl_name_update': 'event_person_tracking', 'base_name': Event_Person_Tracking_Base} -obj_type_kv_li['event_presentation'] = {'table_name': 'v_event_presentation', 'table_name_alt': 'v_event_presentation_w_file_count', 'tbl_name_update': 'event_presentation', 'base_name': Event_Presentation_Base} + # obj_type_kv_li['event_presenter'] = {'table_name': 'v_event_presenter', 'table_name_alt': 'v_event_presenter_w_file_count', 'tbl_name_update': 'event_presenter', 'base_name': Event_Presenter_Base} obj_type_kv_li['event_registration'] = {'table_name': 'v_event_registration', 'tbl_name_update': 'event_registration', 'base_name': Event_Registration_Base} diff --git a/app/routers/api_crud_v2.py b/app/routers/api_crud_v2.py index bf0be1c..0afd465 100644 --- a/app/routers/api_crud_v2.py +++ b/app/routers/api_crud_v2.py @@ -271,6 +271,7 @@ async def get_obj_li_l3( ) +# Updated 2024-08-14 def handle_get_obj_li( obj_type_l1: str, obj_type_l2: Optional[str] = None, @@ -328,6 +329,7 @@ def handle_get_obj_li( log.info(jp_obj) + # Updated 2024-08-14 if jp_obj.get('qry'): # NOTE: This is for specific additional WHERE clauses in the SQL statement # Example JSON: # jp: { @@ -436,27 +438,43 @@ def handle_get_obj_li( log.info(f'obj_name: {obj_name}') log.debug(obj_type_kv_li[obj_name]) - if tbl_alt: - table_name = obj_type_kv_li[obj_name][f'tbl_{tbl_alt}'] - # table_name = obj_type_kv_li[obj_name].get(f'tbl_{tbl_alt}') - log.info(f'tbl_alt was found. Using {table_name} table.') + # Updated 2024-08-14 + # Check the table (view) name to make sure it is valid. + if tbl_alt: # and tbl_alt != 'default': + try: + table_name = obj_type_kv_li[obj_name][f'tbl_{tbl_alt}'] + # table_name = obj_type_kv_li[obj_name].get(f'tbl_{tbl_alt}') + except: + table_name = obj_type_kv_li[obj_name]['tbl'] + log.warning(f'tbl_alt ({tbl_alt}) was not found. Using {table_name} table.') + log.info(f'tbl_alt ({tbl_alt}) was found. Using {table_name} table.') + else: + table_name = obj_type_kv_li[obj_name]['tbl'] + log.warning(f'tbl_alt ({tbl_alt}) was not found. Using {table_name} table.') + + # Check the model name to make sure it is valid. if mdl_alt: - base_name = obj_type_kv_li[obj_name][f'mdl_{mdl_alt}'] - # base_name = obj_type_kv_li[obj_name].get(f'mdl_{mdl_alt}') - log.info(f'mdl_alt was found. Using {base_name} model.') - if exp_alt: - column_name_li = obj_type_kv_li[obj_name].get(f'exp_{exp_alt}') - log.info(f'exp_alt was found. Using {column_name_li} column list.') + try: + base_name = obj_type_kv_li[obj_name][f'mdl_{mdl_alt}'] + # base_name = obj_type_kv_li[obj_name].get(f'mdl_{mdl_alt}') + except: + base_name = obj_type_kv_li[obj_name]['mdl'] + log.info(f'mdl_alt ({mdl_alt}) was found. Using {base_name} model.') + else: + base_name = obj_type_kv_li[obj_name]['mdl'] + log.warning(f'mdl_alt ({mdl_alt}) was not found. Using {base_name} model.') - # if use_alt_table: - # table_name = obj_type_kv_li[obj_name]['table_name_alt'] + # If we are returning a file, check the column name list to make sure it is valid. + if return_file and exp_alt: + try: + column_name_li = obj_type_kv_li[obj_name][f'exp_{exp_alt}'] + # column_name_li = obj_type_kv_li[obj_name].get(f'exp_{exp_alt}') + except: + column_name_li = obj_type_kv_li[obj_name]['exp'] + log.info(f'exp_alt ({exp_alt}) was found. Using {column_name_li} column list.') # else: - # table_name = obj_type_kv_li[obj_name]['table_name'] - - # if use_alt_base: - # base_name = obj_type_kv_li[obj_name]['base_name_alt'] - # else: - # base_name = obj_type_kv_li[obj_name]['base_name'] + # column_name_li = obj_type_kv_li[obj_name]['exp'] + # log.warning(f'exp_alt ({exp_alt}) was not found. Using {column_name_li} column list.') if for_obj_type and for_obj_id: for_obj_id = redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type) @@ -525,13 +543,15 @@ def handle_get_obj_li( log.warning('base_name model was not found. Returning raw data.') resp_data = record resp_data_li.append(resp_data) - if not column_name_li: - column_name_li = list(sql_result[0].keys()) # This should be the same for all records in the list. - additional_column_name_li = [] if return_file: log.setLevel(logging.INFO) + if not column_name_li: + column_name_li = list(sql_result[0].keys()) # This should be the same for all records in the list. + log.info(f'Column names: {column_name_li}') + additional_column_name_li = [] + # We want to handle any field that has a suffix of _json. It should be expanded into a list of fields that are prefixed with the original field name minus _json. # This will also allow us to export the data to a CSV or Excel file with the correct column names. @@ -639,7 +659,7 @@ def handle_get_obj_li( else: return mk_resp(data=None, response=commons.response, status_code=404) -# Updated 2023-11-03 +# Updated 2024-08-14 @router.get('/{obj_type_l1}/{obj_id}') @router.get('/{obj_type_l1}/{obj_type_l2}/{obj_id}') @router.get('/{obj_type_l1}/{obj_type_l2}/{obj_type_l3}/{obj_id}') @@ -649,8 +669,11 @@ async def get_obj( obj_type_l3: str=None, obj_id: str=None, - use_alt_table: bool = False, # NOTE: This will use table_name_alt if they exist. -2023-12-01 - use_alt_base: bool = False, # NOTE: This will use base_name_alt if they exist. -2023-12-01 + tbl_alt: Optional[str] = 'default', + mdl_alt: Optional[str] = 'default', + + # use_alt_table: bool = False, # NOTE: This will use table_name_alt if they exist. -2023-12-01 + # use_alt_base: bool = False, # NOTE: This will use base_name_alt if they exist. -2023-12-01 # for_obj_type: Optional[str] = Query(None, max_length=50), # NOTE: This is not currently used. It is here for future use. # for_obj_id: Optional[str] = Query(None, max_length=22), # NOTE: This is not currently used. It is here for future use. @@ -690,8 +713,8 @@ async def get_obj( debug_data['obj_type_l2'] = obj_type_l2 debug_data['obj_type_l3'] = obj_type_l3 debug_data['obj_id'] = obj_id - debug_data['use_alt_table'] = use_alt_table - debug_data['use_alt_base'] = use_alt_base + debug_data['tbl_alt'] = tbl_alt + debug_data['mdl_alt'] = mdl_alt log.debug(debug_data) @@ -721,17 +744,31 @@ async def get_obj( log.warning('We should not be here') return mk_resp(data=False, status_code=400, response=commons.response) - if use_alt_table: - table_name = obj_type_kv_li[obj_name]['table_name_alt'] + # Updated 2024-08-14 + # Check the table (view) name to make sure it is valid. + if tbl_alt: # and tbl_alt != 'default': + try: + table_name = obj_type_kv_li[obj_name][f'tbl_{tbl_alt}'] + # table_name = obj_type_kv_li[obj_name].get(f'tbl_{tbl_alt}') + except: + table_name = obj_type_kv_li[obj_name]['tbl'] + log.warning(f'tbl_alt ({tbl_alt}) was not found. Using {table_name} table.') + log.info(f'tbl_alt ({tbl_alt}) was found. Using {table_name} table.') else: - table_name = obj_type_kv_li[obj_name]['table_name'] + table_name = obj_type_kv_li[obj_name]['tbl'] + log.warning(f'tbl_alt ({tbl_alt}) was not found. Using {table_name} table.') - if use_alt_base: - base_name = obj_type_kv_li[obj_name]['base_name_alt'] - # log.setLevel(logging.DEBUG) - log.debug(debug_data) + # Check the model name to make sure it is valid. + if mdl_alt: + try: + base_name = obj_type_kv_li[obj_name][f'mdl_{mdl_alt}'] + # base_name = obj_type_kv_li[obj_name].get(f'mdl_{mdl_alt}') + except: + base_name = obj_type_kv_li[obj_name]['mdl'] + log.info(f'mdl_alt ({mdl_alt}) was found. Using {base_name} model.') else: - base_name = obj_type_kv_li[obj_name]['base_name'] + base_name = obj_type_kv_li[obj_name]['mdl'] + log.warning(f'mdl_alt ({mdl_alt}) was not found. Using {base_name} model.') # NOTE: Add a check for the object ID... assuming it is a random ID string for now. if sql_result := sql_select(table_name=table_name, record_id_random=obj_id):