Improvements for API CRUD list endpoints and related sql_select function. Now supports enabled and hidden.

This commit is contained in:
Scott Idem
2023-07-06 18:10:49 -04:00
parent 6ebdd80030
commit dba44aa4fb
2 changed files with 56 additions and 2 deletions

View File

@@ -529,6 +529,8 @@ def sql_select(
record_id_random: str|None = None, record_id_random: str|None = None,
field_name: str|None = None, field_name: str|None = None,
field_value = None, field_value = None,
enabled: str = 'enabled', # enabled, disabled, all
hidden: str = 'not_hidden', # hidden, not_hidden, all
limit: int = 9999999, limit: int = 9999999,
offset: int = 0, offset: int = 0,
sql: str|None = None, sql: str|None = None,
@@ -549,7 +551,16 @@ def sql_select(
if table_name and not (record_id or record_id_random or field_name or field_value or sql or data): if table_name and not (record_id or record_id_random or field_name or field_value or sql or data):
# Select all records from a table # Select all records from a table
# Updated 2023-07-06
log.info('Select all records from a table') log.info('Select all records from a table')
# NOTE: This is new and currently only working with the API CRUD list endpoint and the sql_select function calls. -2023-07-06
# NOTE: This call (without field_name, field_value) may need more testing.
data = {}
sql_enabled, data['enable'] = sql_enable_part(table_name=table_name, enabled=enabled) # Reasonably safe return str and bool
sql_hidden, data['hidden'] = sql_hidden_part(table_name=table_name, hidden=hidden) # Reasonably safe return str and bool
sql = text( sql = text(
f""" f"""
SELECT * SELECT *
@@ -588,16 +599,25 @@ def sql_select(
) )
elif table_name and field_name and field_value and not (record_id or record_id_random or sql or data): elif table_name and field_name and field_value and not (record_id or record_id_random or sql or data):
# Select all records from a table with a specific field and field value # Select all records from a table with a specific field and field value
# Updated 2023-07-06
log.info('Select all records from a table with a specific field and field value') log.info('Select all records from a table with a specific field and field value')
# NOTE: This is new and currently only working with the API CRUD list endpoint and the sql_select function calls. -2023-07-06
# NOTE: This may need more testing.
data = {} data = {}
data[field_name] = field_value data[field_name] = field_value
sql_enabled, data['enable'] = sql_enable_part(table_name=table_name, enabled=enabled) # Reasonably safe return str and bool
sql_hidden, data['hidden'] = sql_hidden_part(table_name=table_name, hidden=hidden) # Reasonably safe return str and bool
sql = text( sql = text(
f""" f"""
SELECT * SELECT *
FROM `{table_name}` FROM `{table_name}`
WHERE `{table_name}`.{field_name} = :{field_name} WHERE `{table_name}`.{field_name} = :{field_name}
{sql_enabled}
{sql_hidden}
{sql_limit_offset} {sql_limit_offset}
; ;
""" """
@@ -1414,6 +1434,34 @@ def sql_enable_part(table_name: str, enabled: str) -> bool|dict:
# ### END ### API DB SQL Methods ### sql_enable_part() ### # ### END ### API DB SQL Methods ### sql_enable_part() ###
# ### BEGIN ### API DB SQL Methods ### sql_hidden_part() ###
# Updated 2022-01-17
@logger_reset
def sql_hidden_part(table_name: str, hidden: str) -> bool|dict:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if not table_name: return False
if hidden in ['hidden', 'not_hidden', 'all']:
log.info(f'Creating partial SQL string for "hidden" check. Hide: {hidden}')
if hidden == 'hidden':
sql = f'AND `{table_name}`.hide = true'
hide = True
elif hidden == 'not_hidden':
sql = f'AND (`{table_name}`.hide = false OR `{table_name}`.hide IS NULL)'
hide = False
elif hidden == 'all':
sql = f'AND (`{table_name}`.hide = true OR `{table_name}`.hide = false OR `{table_name}`.hide IS NULL)'
hide = None
log.debug(sql)
return sql, hide
else:
return False
# ### END ### API DB SQL Methods ### sql_enable_part() ###
# ### BEGIN ### API DB SQL Methods ### sql_limit_offset_part() ### # ### BEGIN ### API DB SQL Methods ### sql_limit_offset_part() ###
# Updated 2022-01-17 # Updated 2022-01-17
@logger_reset @logger_reset

View File

@@ -173,6 +173,8 @@ async def get_obj_li(
for_obj_type: Optional[str] = Query(None, max_length=50), for_obj_type: Optional[str] = Query(None, max_length=50),
for_obj_id: Optional[str] = Query(None, max_length=22), for_obj_id: Optional[str] = Query(None, max_length=22),
enabled: str = 'enabled',
hidden: str = 'not_hidden', # hidden, not_hidden, all,
limit: int = 10000, limit: int = 10000,
offset: int = 0, offset: int = 0,
@@ -183,6 +185,7 @@ async def get_obj_li(
exclude_unset: Optional[bool] = False, exclude_unset: Optional[bool] = False,
exclude_none: Optional[bool] = True, exclude_none: Optional[bool] = True,
response: Response = Response, response: Response = Response,
# commons: Common_Route_Params = Depends(common_route_params), # Switch to this later... sooner
): ):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
@@ -227,9 +230,12 @@ async def get_obj_li(
#data[f'{for_obj_type}_id'] = for_obj_id #data[f'{for_obj_type}_id'] = for_obj_id
field_name = f'{for_obj_type}_id' field_name = f'{for_obj_type}_id'
sql_result = sql_select(table_name=table_name, field_name=field_name, field_value=for_obj_id, limit=limit, offset=offset) # NOTE: The enabled and hidden parameters are new to this endpoint and the sql_select function! -2023-07-06
sql_result = sql_select(table_name=table_name, field_name=field_name, field_value=for_obj_id, enabled=enabled, hidden=hidden, limit=limit, offset=offset)
else: else:
sql_result = sql_select(table_name=table_name) # NOTE: The enabled and hidden parameters are new to this endpoint and the sql_select function! -2023-07-06
# NOTE: This call (without field_name, field_value, limit, offset) may need more testing.
sql_result = sql_select(table_name=table_name, enabled=enabled, hidden=hidden, limit=limit, offset=offset)
log.debug(sql_result) log.debug(sql_result)