From 39c5fd57693e6ceb5af2ce0bac7d1e53e7aca7e1 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Wed, 13 May 2026 13:41:41 +0000 Subject: [PATCH] =?UTF-8?q?new=20files=20types=20inferred=20from=20file=20?= =?UTF-8?q?names=20=F0=9F=9F=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pashub_fetcher/core_files.py | 71 +++++++++++++++++----------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/backend/pashub_fetcher/core_files.py b/backend/pashub_fetcher/core_files.py index b5ce1073..3e69bf9a 100644 --- a/backend/pashub_fetcher/core_files.py +++ b/backend/pashub_fetcher/core_files.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Optional +from typing import Callable, Optional from backend.app.db.models.uploaded_file import FileTypeEnum @@ -19,34 +19,51 @@ class CoreFiles(Enum): RETROFIT_DESIGN_DOC = "Retrofit Design Doc" -CORE_TO_FILETYPE_MAP = { - CoreFiles.PHOTOPACK: FileTypeEnum.PHOTO_PACK.value, - CoreFiles.SITENOTE: FileTypeEnum.SITE_NOTE.value, - CoreFiles.RDSAP_SITENOTE: FileTypeEnum.RD_SAP_SITE_NOTE.value, - CoreFiles.PAS2023_VENTILATION: FileTypeEnum.PAS_2023_VENTILATION.value, - CoreFiles.PAS2023_CONDITION: FileTypeEnum.PAS_2023_CONDITION.value, - CoreFiles.PAS_SIGNIFICANCE: FileTypeEnum.PAS_SIGNIFICANCE.value, - CoreFiles.PAR_PHOTOPACK: FileTypeEnum.PAR_PHOTO_PACK.value, - CoreFiles.PAS2023_PROPERTY: FileTypeEnum.PAS_2023_PROPERTY.value, - CoreFiles.PAS2023_OCCUPANCY: FileTypeEnum.PAS_2023_OCCUPANCY.value, - CoreFiles.IMPROVEMENT_OPTION_EVALUATION: FileTypeEnum.IMPROVEMENT_OPTION_EVALUATION.value, - CoreFiles.MEDIUM_TERM_IMPROVEMENT_PLAN: FileTypeEnum.MEDIUM_TERM_IMPROVEMENT_PLAN.value, - CoreFiles.RETROFIT_DESIGN_DOC: FileTypeEnum.RETROFIT_DESIGN_DOC.value, -} +_MATCHERS: list[tuple[Callable[[str], bool], str]] = [ + (lambda f: f.startswith(CoreFiles.PHOTOPACK.value), FileTypeEnum.PHOTO_PACK.value), + (lambda f: f.startswith(CoreFiles.SITENOTE.value), FileTypeEnum.SITE_NOTE.value), + ( + lambda f: f.startswith(CoreFiles.RDSAP_SITENOTE.value), + FileTypeEnum.RD_SAP_SITE_NOTE.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAS2023_VENTILATION.value), + FileTypeEnum.PAS_2023_VENTILATION.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAS2023_CONDITION.value), + FileTypeEnum.PAS_2023_CONDITION.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAS_SIGNIFICANCE.value), + FileTypeEnum.PAS_SIGNIFICANCE.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAR_PHOTOPACK.value), + FileTypeEnum.PAR_PHOTO_PACK.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAS2023_PROPERTY.value), + FileTypeEnum.PAS_2023_PROPERTY.value, + ), + ( + lambda f: f.startswith(CoreFiles.PAS2023_OCCUPANCY.value), + FileTypeEnum.PAS_2023_OCCUPANCY.value, + ), + ( + lambda f: CoreFiles.IMPROVEMENT_OPTION_EVALUATION.value in f, + FileTypeEnum.IMPROVEMENT_OPTION_EVALUATION.value, + ), + ( + lambda f: CoreFiles.MEDIUM_TERM_IMPROVEMENT_PLAN.value in f, + FileTypeEnum.MEDIUM_TERM_IMPROVEMENT_PLAN.value, + ), + (lambda f: "-OSM-" in f and "DR-N-A" in f, FileTypeEnum.RETROFIT_DESIGN_DOC.value), +] def infer_file_type(filename: str) -> Optional[str]: - for core_file, file_type in CORE_TO_FILETYPE_MAP.items(): - if filename.startswith(core_file.value): + for matcher, file_type in _MATCHERS: + if matcher(filename): return file_type - - if CoreFiles.IMPROVEMENT_OPTION_EVALUATION.value in filename: - return CORE_TO_FILETYPE_MAP[CoreFiles.IMPROVEMENT_OPTION_EVALUATION] - - if CoreFiles.MEDIUM_TERM_IMPROVEMENT_PLAN.value in filename: - return CORE_TO_FILETYPE_MAP[CoreFiles.MEDIUM_TERM_IMPROVEMENT_PLAN] - - if "-OSM-" in filename and "DR-N-A" in filename: - return CORE_TO_FILETYPE_MAP[CoreFiles.RETROFIT_DESIGN_DOC] - return None