feat: add "/markets" endpoint

This commit is contained in:
Matthias
2025-02-02 13:22:54 +01:00
parent b42a91d783
commit 59837ef6ac
2 changed files with 44 additions and 1 deletions

View File

@@ -607,6 +607,23 @@ class BacktestMarketChange(BaseModel):
data: list[list[Any]] data: list[list[Any]]
class MarketRequest(ExchangeModePayloadMixin, BaseModel):
base: str | None = None
quote: str | None = None
class MarketModel(BaseModel):
symbol: str
base: str
quote: str
spot: bool
swap: bool
class MarketResponse(BaseModel):
markets: dict[str, MarketModel]
class SysInfo(BaseModel): class SysInfo(BaseModel):
cpu_pct: list[float] cpu_pct: list[float]
ram_pct: float ram_pct: float

View File

@@ -1,5 +1,6 @@
import logging import logging
from copy import deepcopy from copy import deepcopy
from typing import Annotated
from fastapi import APIRouter, Depends, Query from fastapi import APIRouter, Depends, Query
from fastapi.exceptions import HTTPException from fastapi.exceptions import HTTPException
@@ -9,6 +10,7 @@ from freqtrade.data.history import get_datahandler
from freqtrade.enums import CandleType, State, TradingMode from freqtrade.enums import CandleType, State, TradingMode
from freqtrade.exceptions import OperationalException from freqtrade.exceptions import OperationalException
from freqtrade.rpc import RPC from freqtrade.rpc import RPC
from freqtrade.rpc.api_server.api_pairlists import handleExchangePayload
from freqtrade.rpc.api_server.api_schemas import ( from freqtrade.rpc.api_server.api_schemas import (
AvailablePairs, AvailablePairs,
Balances, Balances,
@@ -30,6 +32,8 @@ from freqtrade.rpc.api_server.api_schemas import (
Locks, Locks,
LocksPayload, LocksPayload,
Logs, Logs,
MarketRequest,
MarketResponse,
MixTag, MixTag,
OpenTradeSchema, OpenTradeSchema,
PairCandlesRequest, PairCandlesRequest,
@@ -48,7 +52,7 @@ from freqtrade.rpc.api_server.api_schemas import (
Version, Version,
WhitelistResponse, WhitelistResponse,
) )
from freqtrade.rpc.api_server.deps import get_config, get_rpc, get_rpc_optional from freqtrade.rpc.api_server.deps import get_config, get_exchange, get_rpc, get_rpc_optional
from freqtrade.rpc.rpc import RPCException from freqtrade.rpc.rpc import RPCException
@@ -473,6 +477,28 @@ def list_available_pairs(
return result return result
@router.get("/markets", response_model=MarketResponse, tags=["candle data", "webserver"])
def markets(
query: Annotated[MarketRequest, Query()],
config=Depends(get_config),
rpc: RPC | None = Depends(get_rpc_optional),
):
if not rpc:
# webserver mode
config_loc = deepcopy(config)
handleExchangePayload(query, config_loc)
exchange = get_exchange(config_loc)
else:
exchange = rpc._exchange
return {
"markets": exchange.get_markets(
base_currencies=[query.base] if query.base else None,
quote_currencies=[query.quote] if query.quote else None,
)
}
@router.get("/sysinfo", response_model=SysInfo, tags=["info"]) @router.get("/sysinfo", response_model=SysInfo, tags=["info"])
def sysinfo(): def sysinfo():
return RPC._rpc_sysinfo() return RPC._rpc_sysinfo()