diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index 9d23ec6ad..8aafa04c6 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -7,7 +7,7 @@ from fastapi.exceptions import HTTPException from freqtrade import __version__ from freqtrade.data.history import get_datahandler -from freqtrade.enums import CandleType, State, TradingMode +from freqtrade.enums import CandleType, RunMode, State, TradingMode from freqtrade.exceptions import OperationalException from freqtrade.rpc import RPC from freqtrade.rpc.api_server.api_pairlists import handleExchangePayload @@ -483,7 +483,7 @@ def markets( config=Depends(get_config), rpc: RPC | None = Depends(get_rpc_optional), ): - if not rpc: + if not rpc or config["runmode"] == RunMode.WEBSERVER: # webserver mode config_loc = deepcopy(config) handleExchangePayload(query, config_loc) diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index 777703a22..af33cd95c 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -3009,3 +3009,55 @@ def test_api_download_data(botclient, mocker, tmp_path): assert response["job_category"] == "download_data" assert response["status"] == "failed" assert response["error"] == "Download error" + + +def test_api_markets_live(botclient): + ftbot, client = botclient + + rc = client_get(client, f"{BASE_URI}/markets") + assert_response(rc, 200) + response = rc.json() + assert "markets" in response + assert len(response["markets"]) >= 0 + assert response["markets"]["XRP/USDT"] == { + "base": "XRP", + "quote": "USDT", + "symbol": "XRP/USDT", + "spot": True, + "swap": False, + } + + assert "BTC/USDT" in response["markets"] + assert "XRP/BTC" in response["markets"] + + rc = client_get( + client, + f"{BASE_URI}/markets?base=XRP", + ) + assert_response(rc, 200) + response = rc.json() + assert "XRP/USDT" in response["markets"] + assert "XRP/BTC" in response["markets"] + + assert "BTC/USDT" not in response["markets"] + + +def test_api_markets_webserver(botclient): + # Ensure webserver exchanges are reset + ApiBG.exchanges = {} + ftbot, client = botclient + # Test in webserver mode + ftbot.config["runmode"] = RunMode.WEBSERVER + + rc = client_get(client, f"{BASE_URI}/markets?exchange=binance") + assert_response(rc, 200) + response = rc.json() + assert "markets" in response + assert len(response["markets"]) >= 0 + assert response["exchange_id"] == "binance" + + rc = client_get(client, f"{BASE_URI}/markets?exchange=hyperliquid") + assert_response(rc, 200) + + assert "hyperliquid_spot" in ApiBG.exchanges + assert "binance_spot" in ApiBG.exchanges