fix(data): read_db_daily 配置 vnpy database 路径(修端到端读取 gap)
Fix: read_db_daily 现在在调用 get_database() 前配置 vnpy SETTINGS, 指向 cfg.data_paths["vnpy_db"](NAS quant_trading.db),修复端到端冒烟发现的读取 gap。
This commit is contained in:
@@ -13,6 +13,7 @@ from datetime import datetime
|
|||||||
from vnpy.trader.object import BarData
|
from vnpy.trader.object import BarData
|
||||||
from vnpy.trader.constant import Exchange, Interval
|
from vnpy.trader.constant import Exchange, Interval
|
||||||
from vnpy.trader.database import get_database
|
from vnpy.trader.database import get_database
|
||||||
|
from vnpy.trader.setting import SETTINGS
|
||||||
|
|
||||||
def read_parquet_daily(symbol: str, start: str, end: str, cfg) -> list[BarData]:
|
def read_parquet_daily(symbol: str, start: str, end: str, cfg) -> list[BarData]:
|
||||||
daily_dir = Path(cfg.data_paths["daily_dir"])
|
daily_dir = Path(cfg.data_paths["daily_dir"])
|
||||||
@@ -55,6 +56,10 @@ def guess_exchange(symbol: str) -> Exchange:
|
|||||||
|
|
||||||
|
|
||||||
def read_db_daily(symbol: str, start: str, end: str, cfg) -> list[BarData]:
|
def read_db_daily(symbol: str, start: str, end: str, cfg) -> list[BarData]:
|
||||||
|
# Configure vnpy database SETTINGS before calling get_database()
|
||||||
|
SETTINGS["database.name"] = "sqlite"
|
||||||
|
SETTINGS["database.database"] = cfg.data_paths["vnpy_db"]
|
||||||
|
|
||||||
db = get_database()
|
db = get_database()
|
||||||
start_dt = datetime.strptime(start, "%Y-%m-%d")
|
start_dt = datetime.strptime(start, "%Y-%m-%d")
|
||||||
end_dt = datetime.strptime(end, "%Y-%m-%d")
|
end_dt = datetime.strptime(end, "%Y-%m-%d")
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
from vnpy.trader.constant import Exchange, Interval
|
from vnpy.trader.constant import Exchange, Interval
|
||||||
|
from vnpy.trader.setting import SETTINGS
|
||||||
from sanguo_data.config import DataConfig
|
from sanguo_data.config import DataConfig
|
||||||
from sanguo_data.datareader import read_parquet_daily, guess_exchange
|
from sanguo_data.datareader import read_parquet_daily, guess_exchange, read_db_daily
|
||||||
|
|
||||||
def test_read_parquet_daily_returns_bardata(tmp_path):
|
def test_read_parquet_daily_returns_bardata(tmp_path):
|
||||||
year_dir = tmp_path / "2026"
|
year_dir = tmp_path / "2026"
|
||||||
@@ -30,3 +32,23 @@ def test_guess_exchange_sh():
|
|||||||
|
|
||||||
def test_guess_exchange_sz():
|
def test_guess_exchange_sz():
|
||||||
assert guess_exchange("000001").value == "SZSE"
|
assert guess_exchange("000001").value == "SZSE"
|
||||||
|
|
||||||
|
|
||||||
|
def test_read_db_daily_configures_vnpy_settings():
|
||||||
|
"""Test that read_db_daily configures vnpy SETTINGS with correct database path."""
|
||||||
|
cfg = DataConfig(
|
||||||
|
data_paths={"vnpy_db": "/volume1/stock/sanguo_vnpy/data/quant_trading.db"},
|
||||||
|
data_sources={}, validation={}, performance={},
|
||||||
|
)
|
||||||
|
|
||||||
|
# Mock get_database to avoid actual database connection
|
||||||
|
mock_db = MagicMock()
|
||||||
|
mock_db.load_bar_data.return_value = [] # Return empty list to avoid data processing
|
||||||
|
|
||||||
|
with patch('sanguo_data.datareader.get_database', return_value=mock_db):
|
||||||
|
# Call read_db_daily
|
||||||
|
read_db_daily("600000", "2024-01-01", "2024-12-31", cfg)
|
||||||
|
|
||||||
|
# Assert that SETTINGS was configured correctly
|
||||||
|
assert SETTINGS["database.name"] == "sqlite", f"Expected database.name to be 'sqlite', got {SETTINGS.get('database.name')}"
|
||||||
|
assert SETTINGS["database.database"] == cfg.data_paths["vnpy_db"], f"Expected database.database to be {cfg.data_paths['vnpy_db']}, got {SETTINGS.get('database.database')}"
|
||||||
|
|||||||
Reference in New Issue
Block a user