Files
OSIT-AE-API-FastAPI/app/db_sql.py

141 lines
4.5 KiB
Python

import logging
from app.log import logger_reset
# 1. Foundational connection and error state from SQL Core
from app.lib_sql_core import (
db, engine, reconnect_db, sql_connect,
get_last_sql_error, set_last_sql_error
)
# 2. Foundational CRUD logic from SQL Crud library
from app.lib_sql_crud import (
sql_insert, sql_update, sql_insert_or_update,
sql_select, run_sql_select, sql_delete
)
# 3. Search logic parts (delegated from search library)
from app.lib_sql_search import (
sql_limit_offset_part as _sql_limit_offset_part,
sql_and_like_part as _sql_and_like_part,
sql_or_like_part as _sql_or_like_part,
sql_and_in_dict_li_part as _sql_and_in_dict_li_part,
sql_and_qry_part as _sql_and_qry_part,
sql_fulltext_qry_part as _sql_fulltext_qry_part,
sql_enable_part as _sql_enable_part,
sql_hidden_part as _sql_hidden_part,
sql_where_qry_part as _sql_where_qry_part,
sql_search_qry_part as _sql_search_qry_part
)
# 4. Redis and ID resolution helpers
from app.lib_redis_helpers import (
redis_lookup_id_random as _redis_lookup_id_random,
get_id_random as _get_id_random,
reset_redis as _reset_redis,
lookup_id_random_pop as _lookup_id_random_pop
)
# ### BEGIN ### API DB SQL ### redis_lookup_id_random() ###
@logger_reset
def redis_lookup_id_random(
record_id_random: int|str,
table_name: str,
check_int_id: bool = False,
log_lvl: int = logging.WARNING,
minutes: int = 30,
reset_rate: int = 10,
):
return _redis_lookup_id_random(record_id_random, table_name, check_int_id, log_lvl, minutes, reset_rate)
# ### END ### API DB SQL ### redis_lookup_id_random() ###
# ### BEGIN ### API DB SQL ### get_id_random() ###
@logger_reset
def get_id_random(record_id: int, table_name: str, log_lvl: int = logging.WARNING):
return _get_id_random(record_id, table_name, log_lvl)
# ### END ### API DB SQL ### get_id_random() ###
@logger_reset
def reset_redis():
return _reset_redis()
# ### BEGIN ### API DB SQL ### lookup_id_random_pop() ###
@logger_reset
def lookup_id_random_pop(obj_data: dict, log_lvl: int = logging.WARNING):
return _lookup_id_random_pop(obj_data, log_lvl)
# ### END ### API DB SQL ### lookup_id_random_pop() ###
# ### BEGIN ### API DB SQL Methods ### get_account_id_w_for_type_id() ###
@logger_reset
def get_account_id_w_for_type_id(for_type: str, for_id: int|str):
if fid := redis_lookup_id_random(record_id_random=for_id, table_name=for_type):
sql = f"SELECT account_id FROM `{for_type}` WHERE id = :fid LIMIT 1;"
if result := sql_select(sql=sql, data={'fid': fid}):
return result.get('account_id')
return False
# ### END ### API DB SQL Methods ### get_account_id_w_for_type_id() ###
@logger_reset
def sql_where_qry_part(qry_dict_li: list):
return _sql_where_qry_part(qry_dict_li)
@logger_reset
def sql_fulltext_qry_part(fulltext_qry_dict: dict):
return _sql_fulltext_qry_part(fulltext_qry_dict)
@logger_reset
def sql_and_qry_part(and_qry_dict_obj: dict):
return _sql_and_qry_part(and_qry_dict_obj)
@logger_reset
def sql_and_like_part(and_like_dict_obj: dict):
return _sql_and_like_part(and_like_dict_obj)
@logger_reset
def sql_or_like_part(or_like_dict_obj: dict):
return _sql_or_like_part(or_like_dict_obj)
@logger_reset
def sql_and_in_dict_li_part(and_in_dict_li_dict_obj: dict):
return _sql_and_in_dict_li_part(and_in_dict_li_dict_obj)
@logger_reset
def sql_enable_part(table_name: str, enabled: str):
return _sql_enable_part(table_name, enabled)
@logger_reset
def sql_hidden_part(table_name: str, hidden: str):
return _sql_hidden_part(table_name, hidden)
@logger_reset
def sql_limit_offset_part(limit: int, offset: int = 0):
return _sql_limit_offset_part(limit, offset)
@logger_reset
def sql_search_qry_part(search_query: any, searchable_fields: list[str]|None = None, max_depth: int = 5, table_name: str|None = None):
return _sql_search_qry_part(search_query, searchable_fields, max_depth, table_name)
__all__ = [
'db', 'engine', 'sql_connect', 'sql_insert', 'sql_update', 'sql_select',
'run_sql_select', 'sql_delete', 'redis_lookup_id_random', 'get_id_random',
'reset_redis', 'lookup_id_random_pop', 'sql_where_qry_part',
'sql_fulltext_qry_part', 'sql_and_qry_part', 'sql_and_like_part',
'sql_or_like_part', 'sql_and_in_dict_li_part', 'sql_enable_part',
'sql_hidden_part', 'sql_limit_offset_part', 'sql_search_qry_part',
'sql_insert_or_update', 'get_account_id_w_for_type_id', 'reconnect_db',
'get_last_sql_error', 'set_last_sql_error'
]