diff --git a/routes/import_routes.py b/routes/import_routes.py index 83bafd5..787e3e6 100644 --- a/routes/import_routes.py +++ b/routes/import_routes.py @@ -21,6 +21,7 @@ from config import BASE_DIR from database.manager import DatabaseManager from database.models import MonthlySummaryAnalysis from services.logger_manager import SystemLogger +from utils.text_helpers import extract_snapshot_date_from_filename as _extract_snapshot_date_from_filename from utils.validators import validate_upload_file # 時區設定 @@ -47,21 +48,6 @@ def _get_cache_refs(): return _SALES_DF_CACHE, _SALES_PROCESSED_CACHE, clear_sales_cache_for_table -def _extract_snapshot_date_from_filename(filename): - """從檔名提取日期:即時業績_當日_20260111.xlsx → 2026-01-11""" - match = re.search(r'(\d{8})', filename) - if match: - date_str = match.group(1) - try: - year = date_str[:4] - month = date_str[4:6] - day = date_str[6:8] - return f"{year}-{month}-{day}" - except: - return None - return None - - def _safe_read_sql(table_name, engine): """安全的 SQL 讀取函數""" from utils.validators import safe_read_sql diff --git a/tests/test_snapshot_date_helpers.py b/tests/test_snapshot_date_helpers.py new file mode 100644 index 0000000..0643317 --- /dev/null +++ b/tests/test_snapshot_date_helpers.py @@ -0,0 +1,18 @@ +from pathlib import Path + +from utils.text_helpers import extract_snapshot_date_from_filename + + +def test_extract_snapshot_date_from_filename_valid_date(): + assert extract_snapshot_date_from_filename("即時業績_當日_20260111.xlsx") == "2026-01-11" + + +def test_extract_snapshot_date_from_filename_rejects_invalid_date(): + assert extract_snapshot_date_from_filename("即時業績_當日_20261399.xlsx") is None + + +def test_import_routes_uses_shared_snapshot_date_helper(): + source = Path("routes/import_routes.py").read_text(encoding="utf-8") + + assert "except:" not in source + assert "extract_snapshot_date_from_filename as _extract_snapshot_date_from_filename" in source diff --git a/utils/text_helpers.py b/utils/text_helpers.py index 11d0df5..473725d 100644 --- a/utils/text_helpers.py +++ b/utils/text_helpers.py @@ -4,6 +4,7 @@ """ import hashlib import re +from datetime import datetime def slugify(text): @@ -43,11 +44,8 @@ def extract_snapshot_date_from_filename(filename): return None date_str = match.group(1) try: - year = date_str[:4] - month = date_str[4:6] - day = date_str[6:8] - return f"{year}-{month}-{day}" - except Exception: + return datetime.strptime(date_str, "%Y%m%d").date().isoformat() + except ValueError: return None