This commit is contained in:
@@ -21,6 +21,7 @@ from config import BASE_DIR
|
|||||||
from database.manager import DatabaseManager
|
from database.manager import DatabaseManager
|
||||||
from database.models import MonthlySummaryAnalysis
|
from database.models import MonthlySummaryAnalysis
|
||||||
from services.logger_manager import SystemLogger
|
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
|
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
|
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):
|
def _safe_read_sql(table_name, engine):
|
||||||
"""安全的 SQL 讀取函數"""
|
"""安全的 SQL 讀取函數"""
|
||||||
from utils.validators import safe_read_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 hashlib
|
||||||
import re
|
import re
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
def slugify(text):
|
def slugify(text):
|
||||||
@@ -43,11 +44,8 @@ def extract_snapshot_date_from_filename(filename):
|
|||||||
return None
|
return None
|
||||||
date_str = match.group(1)
|
date_str = match.group(1)
|
||||||
try:
|
try:
|
||||||
year = date_str[:4]
|
return datetime.strptime(date_str, "%Y%m%d").date().isoformat()
|
||||||
month = date_str[4:6]
|
except ValueError:
|
||||||
day = date_str[6:8]
|
|
||||||
return f"{year}-{month}-{day}"
|
|
||||||
except Exception:
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user