added methods to add and remove platforms bindings to config manager

This commit is contained in:
Zurdi
2024-01-11 00:29:41 +01:00
parent c4a790ca54
commit fb1c02459e
11 changed files with 39 additions and 18 deletions

View File

@@ -3,7 +3,7 @@ from pathlib import Path
from logging.config import fileConfig
from sqlalchemy import create_engine
from config.config_loader import ConfigLoader
from config.config_manager import ConfigManager
from alembic import context
from models.base import BaseModel
@@ -42,7 +42,7 @@ def run_migrations_offline() -> None:
"""
context.configure(
url=ConfigLoader.get_db_engine(),
url=ConfigManager.get_db_engine(),
target_metadata=target_metadata,
render_as_batch=True,
literal_binds=True,
@@ -62,7 +62,7 @@ def run_migrations_online() -> None:
"""
engine = create_engine(ConfigLoader.get_db_engine())
engine = create_engine(ConfigManager.get_db_engine())
with engine.connect() as connection:
context.configure(

View File

@@ -57,7 +57,7 @@ class Config:
self.HIGH_PRIO_STRUCTURE_PATH = f"{LIBRARY_BASE_PATH}/{self.ROMS_FOLDER_NAME}"
class ConfigLoader:
class ConfigManager:
"""Parse and load the user configuration from the config.yml file
Raises:
@@ -143,5 +143,26 @@ class ConfigLoader:
),
)
def _update_config(self) -> None:
try:
with open(self.config_path, 'w') as config_file:
yaml.dump(self._raw_config, config_file)
except FileNotFoundError:
self._raw_config = {}
finally:
self._parse_config()
config = ConfigLoader().config
def add_binding(self, fs_slug: str, slug: str):
self._raw_config['system']['platforms'][fs_slug] = slug
self._update_config()
def remove_binding(self, fs_slug):
try:
del self._raw_config['system']['platforms'][fs_slug]
except KeyError:
pass
self._update_config()
config_manager = ConfigManager()
config = config_manager.config

View File

@@ -1,11 +1,11 @@
import os
from pathlib import Path
from config.config_loader import ConfigLoader
from config.config_manager import ConfigManager
def test_config_loader():
loader = ConfigLoader(
loader = ConfigManager(
os.path.join(Path(__file__).resolve().parent, "fixtures", "config.yml")
)
@@ -23,7 +23,7 @@ def test_config_loader():
def test_empty_config_loader():
loader = ConfigLoader("")
loader = ConfigManager("")
assert loader.config.EXCLUDED_PLATFORMS == []
assert loader.config.EXCLUDED_SINGLE_EXT == []

View File

@@ -8,7 +8,7 @@ from handler import dbh
from utils.fs import build_upload_file_path, remove_file
from utils.fastapi import scan_save, scan_state
from logger.logger import log
from config.config_loader import config
from config.config_manager import config
router = APIRouter()

View File

@@ -1,6 +1,6 @@
import functools
from config.config_loader import ConfigLoader
from config.config_manager import ConfigManager
from models import Platform, Rom, User, Role, Save, State, Screenshot
from fastapi import HTTPException, status
from logger.logger import log
@@ -11,7 +11,7 @@ from sqlalchemy.orm import Session, sessionmaker
class DBHandler:
def __init__(self) -> None:
self.engine = create_engine(ConfigLoader.get_db_engine(), pool_pre_ping=True)
self.engine = create_engine(ConfigManager.get_db_engine(), pool_pre_ping=True)
self.session = sessionmaker(bind=self.engine, expire_on_commit=False)
@staticmethod

View File

@@ -3,13 +3,13 @@ import alembic.config
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config.config_loader import ConfigLoader
from config.config_manager import ConfigManager
from models import Platform, Rom, User, Save, State, Screenshot
from models.user import Role
from utils.auth import get_password_hash
from .. import dbh
engine = create_engine(ConfigLoader.get_db_engine(), pool_pre_ping=True)
engine = create_engine(ConfigManager.get_db_engine(), pool_pre_ping=True)
session = sessionmaker(bind=engine, expire_on_commit=False)

View File

@@ -3,7 +3,7 @@ import sys
import alembic.config
import uvicorn
from config.config_loader import ConfigDict, config
from config.config_manager import ConfigDict, config
from endpoints import identity, oauth, platform, rom, scan, search, tasks # noqa
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

View File

@@ -2,7 +2,7 @@ from typing import Any
import emoji
import os
from config.config_loader import config
from config.config_manager import config
from models import Platform, Rom, Save, State, Screenshot
from handler import dbh, igdbh
from logger.logger import log

View File

@@ -17,7 +17,7 @@ from config import (
DEFAULT_URL_COVER_S,
DEFAULT_PATH_COVER_S,
)
from config.config_loader import config
from config.config_manager import config
from exceptions.fs_exceptions import (
PlatformsNotFoundException,
RomAlreadyExistsException,

View File

@@ -132,7 +132,7 @@ def test_rom_size():
assert rom_size == (2.0, "KB")
def test__exclude_files():
from config.config_loader import config
from config.config_manager import config
config.EXCLUDED_SINGLE_FILES = ["Super Mario 64 (J) (Rev A) [Part 1].z64"]

View File

@@ -8,7 +8,7 @@ from config import (
LIBRARY_BASE_PATH,
RESCAN_ON_FILESYSTEM_CHANGE_DELAY,
)
from config.config_loader import config
from config.config_manager import config
from endpoints.scan import scan_platforms
from logger.logger import log
from tasks.utils import tasks_scheduler