CoolFace
Apppublic

malepati/custom_template_working

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
db_utils.py49 linesDownload Raw Back to utils
1import os2from utils.get_env import get_app_data_directory_env, get_database_url_env3from urllib.parse import urlsplit, urlunsplit, parse_qsl4import ssl5 6 7def get_database_url_and_connect_args() -> tuple[str, dict]:8    database_url = get_database_url_env() or "sqlite:///" + os.path.join(9        get_app_data_directory_env() or "/tmp/presenton", "fastapi.db"10    )11 12    if database_url.startswith("sqlite://"):13        database_url = database_url.replace("sqlite://", "sqlite+aiosqlite://", 1)14    elif database_url.startswith("postgresql://"):15        database_url = database_url.replace("postgresql://", "postgresql+asyncpg://", 1)16    elif database_url.startswith("mysql://"):17        database_url = database_url.replace("mysql://", "mysql+aiomysql://", 1)18    else:19        database_url = database_url20 21    connect_args = {}22    if "sqlite" in database_url:23        connect_args["check_same_thread"] = False24 25    try:26        split_result = urlsplit(database_url)27        if split_result.query:28            query_params = parse_qsl(split_result.query, keep_blank_values=True)29            driver_scheme = split_result.scheme30            for k, v in query_params:31                key_lower = k.lower()32                if key_lower == "sslmode" and "postgresql+asyncpg" in driver_scheme:33                    if v.lower() != "disable" and "sqlite" not in database_url:34                        connect_args["ssl"] = ssl.create_default_context()35 36            database_url = urlunsplit(37                (38                    split_result.scheme,39                    split_result.netloc,40                    split_result.path,41                    "",42                    split_result.fragment,43                )44            )45    except Exception:46        pass47 48    return database_url, connect_args49