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 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', ''),)

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