Allow retrieval of rpc and config via dependencies

This commit is contained in:
Matthias 2020-12-25 13:08:25 +01:00
parent 1e38fec61b
commit a862f19f82
4 changed files with 59 additions and 6 deletions

View File

@ -1,14 +1,21 @@
from typing import Dict 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 = APIRouter()
@router.get('/ping') @router_public.get('/ping', response_model=Ping)
def _ping() -> Dict[str, str]: def ping():
"""simple ping version""" """simple ping version"""
return {"status": "pong"} 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', ''),)

View File

@ -0,0 +1,9 @@
from .webserver import ApiServer
def get_rpc():
return ApiServer._rpc
def get_config():
return ApiServer._config

View File

@ -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

View File

@ -1,11 +1,9 @@
import threading
from typing import Any, Dict from typing import Any, Dict
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
import uvicorn import uvicorn
from freqtrade.rpc.fiat_convert import CryptoToFiatConverter
from freqtrade.rpc.rpc import RPCHandler, RPC from freqtrade.rpc.rpc import RPCHandler, RPC
from .uvicorn_threaded import UvicornServer from .uvicorn_threaded import UvicornServer
@ -13,10 +11,16 @@ from .uvicorn_threaded import UvicornServer
class ApiServer(RPCHandler): class ApiServer(RPCHandler):
_rpc = None
_config = None
def __init__(self, rpc: RPC, config: Dict[str, Any]) -> None: def __init__(self, rpc: RPC, config: Dict[str, Any]) -> None:
super().__init__(rpc, config) super().__init__(rpc, config)
self._server = None self._server = None
ApiServer._rpc = rpc
ApiServer._config = config
self.app = FastAPI() self.app = FastAPI()
self.configure_app(self.app, self._config) self.configure_app(self.app, self._config)
@ -30,8 +34,12 @@ class ApiServer(RPCHandler):
def send_msg(self, msg: Dict[str, str]) -> None: def send_msg(self, msg: Dict[str, str]) -> None:
pass 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 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.include_router(api_v1, prefix="/api/v1")
app.add_middleware( app.add_middleware(