diff --git a/spoolman/database/database.py b/spoolman/database/database.py index 5f6f9e3..996ae1c 100644 --- a/spoolman/database/database.py +++ b/spoolman/database/database.py @@ -2,10 +2,8 @@ import logging from collections.abc import AsyncGenerator -from pathlib import Path from typing import Optional -from platformdirs import user_data_dir from sqlalchemy import URL from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine @@ -27,11 +25,14 @@ def get_connection_url() -> URL: if db_type is None: db_type = env.DatabaseType.SQLITE - data_dir = Path(user_data_dir("spoolman")) - data_dir.mkdir(parents=True, exist_ok=True) - - database = str(data_dir.joinpath("spoolman.db")) + database = str(env.get_data_dir().joinpath("spoolman.db")) logger.info('No database type specified, using a default SQLite database located at "%s"', database) + elif db_type is env.DatabaseType.SQLITE: + if database is not None: + raise ValueError("Cannot specify a database name when using SQLite.") + + database = str(env.get_data_dir().joinpath("spoolman.db")) + logger.info('Using SQLite database located at "%s"', database) else: logger.info('Connecting to database of type "%s" at "%s:%s"', db_type, host, port) diff --git a/spoolman/env.py b/spoolman/env.py index 4ef2775..0d68d92 100644 --- a/spoolman/env.py +++ b/spoolman/env.py @@ -7,6 +7,8 @@ from pathlib import Path from typing import Optional from urllib import parse +from platformdirs import user_data_dir + class DatabaseType(Enum): """The database type.""" @@ -192,3 +194,14 @@ def is_debug_mode() -> bool: if debug_mode == "TRUE" or debug_mode == "1": return True raise ValueError(f"Failed to parse SPOOLMAN_DEBUG_MODE variable: Unknown debug mode '{debug_mode}'.") + + +def get_data_dir() -> Path: + """Get the data directory. + + Returns: + Path: The data directory. + """ + data_dir = Path(user_data_dir("spoolman")) + data_dir.mkdir(parents=True, exist_ok=True) + return data_dir diff --git a/spoolman/main.py b/spoolman/main.py index d54a056..6285110 100644 --- a/spoolman/main.py +++ b/spoolman/main.py @@ -11,16 +11,13 @@ import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles -from platformdirs import user_data_dir from spoolman import env from spoolman.api.v1.router import app as v1_app from spoolman.database.database import get_connection_url, setup_db # Define a file logger with log rotation -data_dir = Path(user_data_dir("spoolman")) -data_dir.mkdir(parents=True, exist_ok=True) -log_file = data_dir.joinpath("spoolman.log") +log_file = env.get_data_dir().joinpath("spoolman.log") file_handler = TimedRotatingFileHandler(log_file, when="midnight", backupCount=5) file_handler.setFormatter(logging.Formatter("%(asctime)s:%(levelname)s:%(message)s", "%Y-%m-%d %H:%M:%S"))