4c8c879302
- snapshot_admin_store_v1.py: summarize_workspace에서 account_snapshot의 captured_at 사용 (updated_at 대신) - account_snapshot 테이블: 올바른 스키마 재정의 (ordinal PK, row_json, 핵심필드, updated_at) - settings 테이블: 올바른 스키마 재정의 (ordinal PK, key, value_json, note, updated_at) - initialize_snapshot_admin_db.py: XLSX에서 settings, account_snapshot을 올바른 스키마로 로드 - load_from_xlsx_correct.py: account_snapshot을 특별 처리해서 스키마 보존 - /api/settings/save: 정상 작동 (200 응답) - build_ui_state: load_collection_dashboard_state 예외 처리 추가 (진행 중) 데이터 현황: - kis_data_collection.db: 1 테이블 (data_feed), 25행 - snapshot_admin.db: 27 테이블, 7,501행 * settings: 32행 (올바른 스키마) * account_snapshot: 44행 (올바른 스키마) 남은 작업: - /api/state 크래시 원인 진단 및 수정 - /api/export 데이터 검증 - 웹 UI 개선 (백오피스 수준) - T+20 모니터링 활성화 - CI/CD 백업 기능 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
132 lines
3.4 KiB
Python
132 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
build_ui_state 함수의 각 단계 테스트
|
|
"""
|
|
|
|
import sys
|
|
sys.path.insert(0, '.')
|
|
|
|
# Import from package
|
|
import importlib.util
|
|
spec = importlib.util.spec_from_file_location(
|
|
"snapshot_admin_store_v1",
|
|
"src/quant_engine/snapshot_admin_store_v1.py"
|
|
)
|
|
store = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(store)
|
|
|
|
from snapshot_admin_store_v1 import (
|
|
summarize_workspace,
|
|
load_settings_rows,
|
|
load_account_snapshot_rows,
|
|
validate_settings_rows,
|
|
validate_account_snapshot_rows,
|
|
load_approval_rows,
|
|
load_locks,
|
|
load_change_log_rows,
|
|
)
|
|
from pathlib import Path
|
|
import time
|
|
|
|
db_path = Path('src/quant_engine/snapshot_admin.db')
|
|
|
|
print("="*80)
|
|
print("build_ui_state 함수 단계별 테스트")
|
|
print("="*80)
|
|
|
|
# 1. summarize_workspace
|
|
print("\n[1] summarize_workspace")
|
|
try:
|
|
start = time.time()
|
|
result = summarize_workspace(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 2. load_settings_rows
|
|
print("\n[2] load_settings_rows")
|
|
try:
|
|
start = time.time()
|
|
result = load_settings_rows(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} rows, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 3. load_account_snapshot_rows
|
|
print("\n[3] load_account_snapshot_rows")
|
|
try:
|
|
start = time.time()
|
|
result = load_account_snapshot_rows(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} rows, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 4. validate_settings_rows
|
|
print("\n[4] validate_settings_rows")
|
|
try:
|
|
start = time.time()
|
|
settings = load_settings_rows(db_path)
|
|
result = validate_settings_rows(settings)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} errors, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 5. validate_account_snapshot_rows
|
|
print("\n[5] validate_account_snapshot_rows")
|
|
try:
|
|
start = time.time()
|
|
snapshot = load_account_snapshot_rows(db_path)
|
|
result = validate_account_snapshot_rows(snapshot)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} errors, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 6. load_approval_rows
|
|
print("\n[6] load_approval_rows")
|
|
try:
|
|
start = time.time()
|
|
result = load_approval_rows(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} rows, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 7. load_locks
|
|
print("\n[7] load_locks")
|
|
try:
|
|
start = time.time()
|
|
result = load_locks(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} rows, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 8. load_change_log_rows
|
|
print("\n[8] load_change_log_rows")
|
|
try:
|
|
start = time.time()
|
|
result = load_change_log_rows(db_path, limit=12)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] {len(result)} rows, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
|
|
# 9. Full build_ui_state (at the end)
|
|
print("\n[9] build_ui_state (FULL)")
|
|
try:
|
|
start = time.time()
|
|
result = build_ui_state(db_path)
|
|
elapsed = time.time() - start
|
|
print(f" [OK] keys={len(result)}, {elapsed:.2f}s")
|
|
except Exception as e:
|
|
print(f" [ERROR] {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
print("\n[완료]")
|