From acfc18979883001c157433459a38b820f4f06af7 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 9 Feb 2026 14:55:25 -0500 Subject: [PATCH 1/2] [ROMM-2927] Add default folders to config manager --- backend/config/config_manager.py | 52 +++++++++++++++++++--- backend/tests/config/test_config_loader.py | 23 +++++++--- backend/tests/endpoints/test_config.py | 22 ++++++--- 3 files changed, 78 insertions(+), 19 deletions(-) diff --git a/backend/config/config_manager.py b/backend/config/config_manager.py index a98bd14e2..690dc3ec8 100644 --- a/backend/config/config_manager.py +++ b/backend/config/config_manager.py @@ -28,6 +28,34 @@ from logger.logger import log ROMM_USER_CONFIG_PATH: Final = f"{ROMM_BASE_PATH}/config" ROMM_USER_CONFIG_FILE: Final = f"{ROMM_USER_CONFIG_PATH}/config.yml" SQLITE_DB_BASE_PATH: Final = f"{ROMM_BASE_PATH}/database" +DEFAULT_EXCLUDED_EXTENSIONS: Final = [ + "db", + "ini", + "tmp", + "bak", + "lock", + "log", + "cache", + "crdownload", +] +DEFAULT_EXCLUDED_FILES: Final = [ + ".DS_Store", + ".localized", + ".Trashes", + ".stfolder", + "@SynoResource", +] +DEFAULT_EXCLUDED_DIRS: Final = [ + "@eaDir", + "__MACOSX", + "$RECYCLE.BIN", + ".Trash-*", + ".stfolder", + ".Spotlight-V100", + ".fseventsd", + ".DocumentRevisions-V100", + "System Volume Information", +] class EjsControlsButton(TypedDict): @@ -194,27 +222,39 @@ class ConfigManager: self.config = Config( CONFIG_FILE_MOUNTED=self._config_file_mounted, CONFIG_FILE_WRITABLE=self._config_file_writable, - EXCLUDED_PLATFORMS=pydash.get(self._raw_config, "exclude.platforms", []), + EXCLUDED_PLATFORMS=pydash.get( + self._raw_config, "exclude.platforms", DEFAULT_EXCLUDED_DIRS + ), EXCLUDED_SINGLE_EXT=[ e.lower() for e in pydash.get( - self._raw_config, "exclude.roms.single_file.extensions", [] + self._raw_config, + "exclude.roms.single_file.extensions", + DEFAULT_EXCLUDED_EXTENSIONS, ) ], EXCLUDED_SINGLE_FILES=pydash.get( - self._raw_config, "exclude.roms.single_file.names", [] + self._raw_config, + "exclude.roms.single_file.names", + DEFAULT_EXCLUDED_FILES, ), EXCLUDED_MULTI_FILES=pydash.get( - self._raw_config, "exclude.roms.multi_file.names", [] + self._raw_config, + "exclude.roms.multi_file.names", + DEFAULT_EXCLUDED_DIRS, ), EXCLUDED_MULTI_PARTS_EXT=[ e.lower() for e in pydash.get( - self._raw_config, "exclude.roms.multi_file.parts.extensions", [] + self._raw_config, + "exclude.roms.multi_file.parts.extensions", + DEFAULT_EXCLUDED_EXTENSIONS, ) ], EXCLUDED_MULTI_PARTS_FILES=pydash.get( - self._raw_config, "exclude.roms.multi_file.parts.names", [] + self._raw_config, + "exclude.roms.multi_file.parts.names", + DEFAULT_EXCLUDED_FILES, ), PLATFORMS_BINDING=pydash.get(self._raw_config, "system.platforms", {}), PLATFORMS_VERSIONS=pydash.get(self._raw_config, "system.versions", {}), diff --git a/backend/tests/config/test_config_loader.py b/backend/tests/config/test_config_loader.py index 44bf9f163..c1792858a 100644 --- a/backend/tests/config/test_config_loader.py +++ b/backend/tests/config/test_config_loader.py @@ -1,7 +1,12 @@ import os from pathlib import Path -from config.config_manager import ConfigManager +from config.config_manager import ( + DEFAULT_EXCLUDED_DIRS, + DEFAULT_EXCLUDED_EXTENSIONS, + DEFAULT_EXCLUDED_FILES, + ConfigManager, +) def test_config_loader(): @@ -58,12 +63,16 @@ def test_empty_config_loader(): ) ) - assert loader.config.EXCLUDED_PLATFORMS == [] - assert loader.config.EXCLUDED_SINGLE_EXT == [] - assert loader.config.EXCLUDED_SINGLE_FILES == [] - assert loader.config.EXCLUDED_MULTI_FILES == [] - assert loader.config.EXCLUDED_MULTI_PARTS_EXT == [] - assert loader.config.EXCLUDED_MULTI_PARTS_FILES == [] + assert loader.config.EXCLUDED_PLATFORMS == DEFAULT_EXCLUDED_DIRS + assert loader.config.EXCLUDED_SINGLE_EXT == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert loader.config.EXCLUDED_SINGLE_FILES == DEFAULT_EXCLUDED_FILES + assert loader.config.EXCLUDED_MULTI_FILES == DEFAULT_EXCLUDED_DIRS + assert loader.config.EXCLUDED_MULTI_PARTS_EXT == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert loader.config.EXCLUDED_MULTI_PARTS_FILES == DEFAULT_EXCLUDED_FILES assert loader.config.PLATFORMS_BINDING == {} assert loader.config.PLATFORMS_VERSIONS == {} assert loader.config.ROMS_FOLDER_NAME == "roms" diff --git a/backend/tests/endpoints/test_config.py b/backend/tests/endpoints/test_config.py index 4a892f34e..9df64b526 100644 --- a/backend/tests/endpoints/test_config.py +++ b/backend/tests/endpoints/test_config.py @@ -14,12 +14,22 @@ def test_config(client): response = client.get("/api/config") assert response.status_code == status.HTTP_200_OK + from config.config_manager import ( + DEFAULT_EXCLUDED_DIRS, + DEFAULT_EXCLUDED_EXTENSIONS, + DEFAULT_EXCLUDED_FILES, + ) + config = response.json() - assert config.get("EXCLUDED_PLATFORMS") == [] - assert config.get("EXCLUDED_SINGLE_EXT") == [] - assert config.get("EXCLUDED_SINGLE_FILES") == [] - assert config.get("EXCLUDED_MULTI_FILES") == [] - assert config.get("EXCLUDED_MULTI_PARTS_EXT") == [] - assert config.get("EXCLUDED_MULTI_PARTS_FILES") == [] + assert config.get("EXCLUDED_PLATFORMS") == DEFAULT_EXCLUDED_DIRS + assert config.get("EXCLUDED_SINGLE_EXT") == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert config.get("EXCLUDED_SINGLE_FILES") == DEFAULT_EXCLUDED_FILES + assert config.get("EXCLUDED_MULTI_FILES") == DEFAULT_EXCLUDED_DIRS + assert config.get("EXCLUDED_MULTI_PARTS_EXT") == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert config.get("EXCLUDED_MULTI_PARTS_FILES") == DEFAULT_EXCLUDED_FILES assert config.get("PLATFORMS_BINDING") == {} assert not config.get("SKIP_HASH_CALCULATION") From df4a4e3645ca4d3bf146b21b9e129e5ac96d0190 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 9 Feb 2026 15:08:21 -0500 Subject: [PATCH 2/2] move imports up --- backend/tests/endpoints/test_config.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/tests/endpoints/test_config.py b/backend/tests/endpoints/test_config.py index 9df64b526..64361367f 100644 --- a/backend/tests/endpoints/test_config.py +++ b/backend/tests/endpoints/test_config.py @@ -3,6 +3,12 @@ from fastapi import status from fastapi.testclient import TestClient from main import app +from config.config_manager import ( + DEFAULT_EXCLUDED_DIRS, + DEFAULT_EXCLUDED_EXTENSIONS, + DEFAULT_EXCLUDED_FILES, +) + @pytest.fixture def client(): @@ -14,12 +20,6 @@ def test_config(client): response = client.get("/api/config") assert response.status_code == status.HTTP_200_OK - from config.config_manager import ( - DEFAULT_EXCLUDED_DIRS, - DEFAULT_EXCLUDED_EXTENSIONS, - DEFAULT_EXCLUDED_FILES, - ) - config = response.json() assert config.get("EXCLUDED_PLATFORMS") == DEFAULT_EXCLUDED_DIRS assert config.get("EXCLUDED_SINGLE_EXT") == [