共用匯入檔名日期解析
All checks were successful
CD Pipeline / deploy (push) Successful in 57s

This commit is contained in:
OoO
2026-05-13 09:58:56 +08:00
parent 1ca535720f
commit 317ff1bf02
3 changed files with 22 additions and 20 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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