Add clear-and-refetch for hub K-line cache.
Force refresh wipes the series in hub_kline.db before pulling from the exchange; add a Linux clear script and rename the UI button to 清库重拉. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from hub_kline_store import (
|
||||
clear_series_bars,
|
||||
init_db,
|
||||
load_bars_before,
|
||||
load_bars_latest,
|
||||
@@ -339,6 +340,57 @@ class TestHubKlineStore(unittest.TestCase):
|
||||
self.assertGreaterEqual(len(out.get("candles") or []), 100)
|
||||
self.assertGreater(int(out.get("fetched") or 0), 0)
|
||||
|
||||
def test_clear_series_and_force_refetch(self):
|
||||
init_db(self.db)
|
||||
period = TIMEFRAME_MS["5m"]
|
||||
now = int(time.time() * 1000)
|
||||
stale = [
|
||||
{
|
||||
"open_time_ms": now - period * (i + 100),
|
||||
"open": 1,
|
||||
"high": 2,
|
||||
"low": 0.5,
|
||||
"close": 1.5,
|
||||
"volume": 1,
|
||||
}
|
||||
for i in range(40)
|
||||
]
|
||||
upsert_bars("binance", "BTC/USDT", "5m", stale, self.db)
|
||||
self.assertEqual(len(load_bars_latest("binance", "BTC/USDT", "5m", 100, self.db)), 40)
|
||||
removed = clear_series_bars("binance", "BTC/USDT", "5m", self.db)
|
||||
self.assertEqual(removed, 40)
|
||||
self.assertEqual(len(load_bars_latest("binance", "BTC/USDT", "5m", 100, self.db)), 0)
|
||||
|
||||
fresh = [
|
||||
{
|
||||
"open_time_ms": now - period * (20 - i),
|
||||
"open": 10,
|
||||
"high": 11,
|
||||
"low": 9,
|
||||
"close": 10.5,
|
||||
"volume": 2,
|
||||
}
|
||||
for i in range(20)
|
||||
]
|
||||
|
||||
def remote_fetch(**kwargs):
|
||||
return {"ok": True, "bars": fresh, "price_tick": 0.01}
|
||||
|
||||
out = resolve_chart_bars(
|
||||
"binance",
|
||||
"BTC/USDT",
|
||||
"5m",
|
||||
remote_fetch,
|
||||
db_path=self.db,
|
||||
force_refresh=True,
|
||||
clear_db=True,
|
||||
limit=50,
|
||||
)
|
||||
self.assertTrue(out.get("ok"))
|
||||
self.assertGreaterEqual(int(out.get("cleared") or 0), 0)
|
||||
self.assertGreater(int(out.get("fetched") or 0), 0)
|
||||
self.assertGreaterEqual(len(out.get("candles") or []), 19)
|
||||
|
||||
def test_resolve_before_ms_exhausted(self):
|
||||
init_db(self.db)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user