diff --git a/freqtrade/rpc/api_server2/api_v1.py b/freqtrade/rpc/api_server2/api_v1.py index 1e8bae1d4..2d1491b06 100644 --- a/freqtrade/rpc/api_server2/api_v1.py +++ b/freqtrade/rpc/api_server2/api_v1.py @@ -1,14 +1,21 @@ from typing import Dict -from fastapi import APIRouter +from fastapi import APIRouter, Depends +from .deps import get_rpc, get_config +from .models import Balances, Ping +# Public API, requires no auth. +router_public = APIRouter() router = APIRouter() -@router.get('/ping') -def _ping() -> Dict[str, str]: +@router_public.get('/ping', response_model=Ping) +def ping(): """simple ping version""" return {"status": "pong"} +@router.get('/balance', response_model=Balances) +def balance(rpc=Depends(get_rpc), config=Depends(get_config)) -> Dict[str, str]: + return rpc._rpc_balance(config['stake_currency'], config.get('fiat_display_currency', ''),) diff --git a/freqtrade/rpc/api_server2/deps.py b/freqtrade/rpc/api_server2/deps.py new file mode 100644 index 000000000..60cc6b8fb --- /dev/null +++ b/freqtrade/rpc/api_server2/deps.py @@ -0,0 +1,9 @@ +from .webserver import ApiServer + + +def get_rpc(): + return ApiServer._rpc + + +def get_config(): + return ApiServer._config diff --git a/freqtrade/rpc/api_server2/models.py b/freqtrade/rpc/api_server2/models.py new file mode 100644 index 000000000..3d1fbf969 --- /dev/null +++ b/freqtrade/rpc/api_server2/models.py @@ -0,0 +1,29 @@ +from typing import List +from pydantic import BaseModel + + +class Ping(BaseModel): + status: str + + class Config: + schema_extra = { + "example": {"status", "pong"} + } + + +class Balance(BaseModel): + currency: str + free: float + balance: float + used: float + est_stake: float + stake: str + + +class Balances(BaseModel): + currencies: List[Balance] + total: float + symbol: str + value: float + stake: str + note: str diff --git a/freqtrade/rpc/api_server2/webserver.py b/freqtrade/rpc/api_server2/webserver.py index 3f9baeaff..23cae8b73 100644 --- a/freqtrade/rpc/api_server2/webserver.py +++ b/freqtrade/rpc/api_server2/webserver.py @@ -1,11 +1,9 @@ -import threading from typing import Any, Dict from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import uvicorn -from freqtrade.rpc.fiat_convert import CryptoToFiatConverter from freqtrade.rpc.rpc import RPCHandler, RPC from .uvicorn_threaded import UvicornServer @@ -13,10 +11,16 @@ from .uvicorn_threaded import UvicornServer class ApiServer(RPCHandler): + _rpc = None + _config = None + def __init__(self, rpc: RPC, config: Dict[str, Any]) -> None: super().__init__(rpc, config) self._server = None + ApiServer._rpc = rpc + ApiServer._config = config + self.app = FastAPI() self.configure_app(self.app, self._config) @@ -30,8 +34,12 @@ class ApiServer(RPCHandler): def send_msg(self, msg: Dict[str, str]) -> None: pass - def configure_app(self, app, config): + def configure_app(self, app: FastAPI, config): + from .api_v1 import router_public as api_v1_public from .api_v1 import router as api_v1 + app.include_router(api_v1_public, prefix="/api/v1") + + # TODO: Include auth dependency! app.include_router(api_v1, prefix="/api/v1") app.add_middleware(