From 5e7246d23b7ef60c382d2f403ebfbaf7994eb372 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 20 Jan 2026 06:10:12 +0100 Subject: [PATCH] refactor: available_pairs is for webserver only --- freqtrade/rpc/api_server/api_v1.py | 33 --------------------- freqtrade/rpc/api_server/api_webserver.py | 36 +++++++++++++++++++++++ tests/rpc/test_rpc_apiserver.py | 1 + 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index c2446d770..f1be42abe 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -439,39 +439,6 @@ def list_freqaimodels(config=Depends(get_config)): return {"freqaimodels": [x["name"] for x in models]} -@router.get("/available_pairs", response_model=AvailablePairs, tags=["candle data"]) -def list_available_pairs( - timeframe: str | None = None, - stake_currency: str | None = None, - candletype: CandleType | None = None, - config=Depends(get_config), -): - dh = get_datahandler(config["datadir"], config.get("dataformat_ohlcv")) - trading_mode: TradingMode = config.get("trading_mode", TradingMode.SPOT) - pair_interval = dh.ohlcv_get_available_data(config["datadir"], trading_mode) - - if timeframe: - pair_interval = [pair for pair in pair_interval if pair[1] == timeframe] - if stake_currency: - pair_interval = [pair for pair in pair_interval if pair[0].endswith(stake_currency)] - if candletype: - pair_interval = [pair for pair in pair_interval if pair[2] == candletype] - else: - candle_type = CandleType.get_default(trading_mode) - pair_interval = [pair for pair in pair_interval if pair[2] == candle_type] - - pair_interval = sorted(pair_interval, key=lambda x: x[0]) - - pairs = list({x[0] for x in pair_interval}) - pairs.sort() - result = { - "length": len(pairs), - "pairs": pairs, - "pair_interval": pair_interval, - } - return result - - @router.get("/markets", response_model=MarketResponse, tags=["candle data", "webserver"]) def markets( query: Annotated[MarketRequest, Query()], diff --git a/freqtrade/rpc/api_server/api_webserver.py b/freqtrade/rpc/api_server/api_webserver.py index 894bd751b..022af3de8 100644 --- a/freqtrade/rpc/api_server/api_webserver.py +++ b/freqtrade/rpc/api_server/api_webserver.py @@ -4,8 +4,11 @@ from copy import deepcopy from fastapi import APIRouter, Depends from fastapi.exceptions import HTTPException +from freqtrade.data.history.datahandlers import get_datahandler +from freqtrade.enums import CandleType, TradingMode from freqtrade.exceptions import OperationalException from freqtrade.rpc.api_server.api_schemas import ( + AvailablePairs, ExchangeListResponse, HyperoptLossListResponse, StrategyListResponse, @@ -87,3 +90,36 @@ def list_hyperoptloss( for x in loss_functions ] } + + +@router.get("/available_pairs", response_model=AvailablePairs, tags=["candle data"]) +def list_available_pairs( + timeframe: str | None = None, + stake_currency: str | None = None, + candletype: CandleType | None = None, + config=Depends(get_config), +): + dh = get_datahandler(config["datadir"], config.get("dataformat_ohlcv")) + trading_mode: TradingMode = config.get("trading_mode", TradingMode.SPOT) + pair_interval = dh.ohlcv_get_available_data(config["datadir"], trading_mode) + + if timeframe: + pair_interval = [pair for pair in pair_interval if pair[1] == timeframe] + if stake_currency: + pair_interval = [pair for pair in pair_interval if pair[0].endswith(stake_currency)] + if candletype: + pair_interval = [pair for pair in pair_interval if pair[2] == candletype] + else: + candle_type = CandleType.get_default(trading_mode) + pair_interval = [pair for pair in pair_interval if pair[2] == candle_type] + + pair_interval = sorted(pair_interval, key=lambda x: x[0]) + + pairs = list({x[0] for x in pair_interval}) + pairs.sort() + result = { + "length": len(pairs), + "pairs": pairs, + "pair_interval": pair_interval, + } + return result diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index 6eac0756e..31bc9b8fc 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -2826,6 +2826,7 @@ def test_api_pairlists_evaluate(botclient, tmp_path, mocker): def test_list_available_pairs(botclient): ftbot, client = botclient + ftbot.config["runmode"] = RunMode.WEBSERVER rc = client_get(client, f"{BASE_URI}/available_pairs")