2025-09-19 20:55:47 +02:00
|
|
|
# ConnectionString.py
|
2025-06-01 15:34:12 +08:00
|
|
|
import configparser
|
|
|
|
import os
|
|
|
|
from sqlalchemy_utils import database_exists, create_database
|
2025-09-13 08:23:54 +08:00
|
|
|
|
2025-09-19 20:55:47 +02:00
|
|
|
# Read and parse the INI file once at startup
|
|
|
|
parser = configparser.ConfigParser(strict=False)
|
|
|
|
parser.read("wg-dashboard.ini")
|
|
|
|
|
|
|
|
# Ensure SQLite folder exists
|
|
|
|
SQLITE_PATH = "db"
|
|
|
|
os.makedirs(SQLITE_PATH, exist_ok=True)
|
|
|
|
|
|
|
|
DEFAULT_DB = "wgdashboard"
|
|
|
|
DEFAULT_LOG_DB = "wgdashboard_log"
|
|
|
|
DEFAULT_JOB_DB = "wgdashboard_log"
|
|
|
|
|
|
|
|
def ConnectionString(database_name: str) -> str:
|
|
|
|
"""
|
|
|
|
Returns a SQLAlchemy-compatible connection string for the chosen database.
|
|
|
|
Creates the database if it doesn't exist.
|
|
|
|
"""
|
|
|
|
db_type = parser.get("Database", "type")
|
|
|
|
db_prefix = parser.get("Database", "prefix")
|
|
|
|
database_name = f"{db_prefix}_{database_name}"
|
|
|
|
|
|
|
|
if db_type == "postgresql":
|
|
|
|
username = parser.get("Database", "username")
|
|
|
|
password = parser.get("Database", "password")
|
|
|
|
host = parser.get("Database", "host")
|
|
|
|
cn = f"postgresql+psycopg://{username}:{password}@{host}/{database_name}"
|
|
|
|
elif db_type == "mysql":
|
|
|
|
username = parser.get("Database", "username")
|
|
|
|
password = parser.get("Database", "password")
|
|
|
|
host = parser.get("Database", "host")
|
|
|
|
cn = f"mysql+pymysql://{username}:{password}@{host}/{database_name}"
|
2025-06-01 15:34:12 +08:00
|
|
|
else:
|
2025-09-19 20:55:47 +02:00
|
|
|
cn = f"sqlite:///{os.path.join(SQLITE_PATH, f'{database_name}.db')}"
|
|
|
|
|
|
|
|
# Ensure database exists
|
|
|
|
if not database_exists(cn):
|
|
|
|
create_database(cn)
|
|
|
|
|
2025-06-01 15:34:12 +08:00
|
|
|
return cn
|