This commit is contained in:
@@ -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
|
||||
|
||||
18
tests/test_snapshot_date_helpers.py
Normal file
18
tests/test_snapshot_date_helpers.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user