From 049a93fa26358210c0c12aaecc3f1812077af806 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 19 Jan 2026 11:47:32 +0000 Subject: [PATCH] =?UTF-8?q?Create=20FileType=20enum=20=F0=9F=9F=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/condition/file_type.py | 12 ++++++++++ backend/condition/parsing/factory.py | 9 ++++---- backend/condition/processor.py | 2 +- .../tests/parsing/test_parsing_factory.py | 15 ++++--------- .../condition/tests/test_detect_file_type.py | 22 +++++++++++++++++++ 5 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 backend/condition/file_type.py create mode 100644 backend/condition/tests/test_detect_file_type.py diff --git a/backend/condition/file_type.py b/backend/condition/file_type.py new file mode 100644 index 00000000..b9a4357f --- /dev/null +++ b/backend/condition/file_type.py @@ -0,0 +1,12 @@ +from enum import Enum + +class FileType(Enum): + LBWF = "lbwf" + +def detect_file_type(filepath: str) -> FileType: + path = filepath.lower() + + if "lbwf" in path: + return FileType.LBWF + + raise ValueError("Unrecognised file path") \ No newline at end of file diff --git a/backend/condition/parsing/factory.py b/backend/condition/parsing/factory.py index 7db8383f..01dce75d 100644 --- a/backend/condition/parsing/factory.py +++ b/backend/condition/parsing/factory.py @@ -1,10 +1,9 @@ +from backend.condition.file_type import FileType from backend.condition.parsing.parser import Parser from backend.condition.parsing.lbwf_parser import LbwfParser -def select_parser(filepath: str) -> Parser: - path = filepath.lower() - - if "lbwf" in path: +def select_parser(file_type: FileType) -> Parser: + if file_type is FileType.LBWF: return LbwfParser() - raise ValueError("Unrecognised file path, unable to instantiate Parser") \ No newline at end of file + raise ValueError("Unrecognised file type, unable to instantiate Parser") diff --git a/backend/condition/processor.py b/backend/condition/processor.py index 82f1b92e..c4dcabc2 100644 --- a/backend/condition/processor.py +++ b/backend/condition/processor.py @@ -1,6 +1,7 @@ from typing import BinaryIO, List from utils.logger import setup_logger +from backend.condition.file_type import FileType def process_file(file_stream: BinaryIO, source_key: str) -> None: print(f"[processor] Received file: {source_key}") @@ -9,4 +10,3 @@ def process_file(file_stream: BinaryIO, source_key: str) -> None: # Orchestration - diff --git a/backend/condition/tests/parsing/test_parsing_factory.py b/backend/condition/tests/parsing/test_parsing_factory.py index 4e373a12..481418d7 100644 --- a/backend/condition/tests/parsing/test_parsing_factory.py +++ b/backend/condition/tests/parsing/test_parsing_factory.py @@ -1,22 +1,15 @@ import pytest from backend.condition.parsing.factory import select_parser +from backend.condition.file_type import FileType def test_selects_lbwf_parser(): # arrange - file_path_str = "uploads/lbwf/Example Asset Data.xlsx" + file_type = FileType.LBWF expected_class_name = "LbwfParser" # act - actual_class_name = select_parser(file_path_str).__class__.__name__ + actual_class_name = select_parser(file_type).__class__.__name__ # assert - assert expected_class_name == actual_class_name - -def test_unknown_filepath_raises_value_error(): - # arrange - file_path_str = "unkown/Example Asset Data.xlsx" - - # act + assert - with pytest.raises(ValueError): - select_parser(file_path_str) \ No newline at end of file + assert expected_class_name == actual_class_name \ No newline at end of file diff --git a/backend/condition/tests/test_detect_file_type.py b/backend/condition/tests/test_detect_file_type.py new file mode 100644 index 00000000..fecf22c1 --- /dev/null +++ b/backend/condition/tests/test_detect_file_type.py @@ -0,0 +1,22 @@ +import pytest + +from backend.condition.file_type import FileType, detect_file_type + +def test_detects_lbwf_file_type(): + # arrange + file_path_str = "uploads/lbwf/Exaple Asset Data.xlsx" + expected_file_type = FileType.LBWF + + # act + actual_file_type: FileType = detect_file_type(file_path_str) + + # assert + assert expected_file_type == actual_file_type + +def test_unknown_filepath_raises_value_error(): + # arrange + file_path_str = "unknown/Example Asset Data.xlsx" + + # act + assert + with pytest.raises(ValueError): + detect_file_type(file_path_str) \ No newline at end of file