From e6176d43f3b631b6969978274baef77178f2b905 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 2 Jan 2021 13:12:49 +0100 Subject: [PATCH] Optional RPC dependency --- freqtrade/rpc/api_server/api_v1.py | 9 ++++++--- freqtrade/rpc/api_server/deps.py | 18 ++++++++++++++---- freqtrade/rpc/api_server/webserver.py | 1 + 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index 614563d01..ddca88b06 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -18,7 +18,7 @@ from freqtrade.rpc.api_server.api_schemas import (AvailablePairs, Balances, Blac StatusMsg, StrategyListResponse, StrategyResponse, TradeResponse, TradeSchema, Version, WhitelistResponse) -from freqtrade.rpc.api_server.deps import get_config, get_rpc +from freqtrade.rpc.api_server.deps import get_config, get_rpc, get_rpc_optional from freqtrade.rpc.rpc import RPCException @@ -100,8 +100,11 @@ def edge(rpc: RPC = Depends(get_rpc)): # TODO: Missing response model @router.get('/show_config', tags=['info']) -def show_config(rpc: RPC = Depends(get_rpc), config=Depends(get_config)): - return RPC._rpc_show_config(config, rpc._freqtrade.state) +def show_config(rpc: Optional[RPC] = Depends(get_rpc_optional), config=Depends(get_config)): + state = '' + if rpc: + state = rpc._freqtrade.state + return RPC._rpc_show_config(config, state) @router.post('/forcebuy', response_model=Union[TradeSchema, StatusMsg], tags=['trading']) diff --git a/freqtrade/rpc/api_server/deps.py b/freqtrade/rpc/api_server/deps.py index ce6fbf4aa..d2459010f 100644 --- a/freqtrade/rpc/api_server/deps.py +++ b/freqtrade/rpc/api_server/deps.py @@ -1,12 +1,22 @@ -from typing import Any, Dict +from typing import Any, Dict, Optional -from freqtrade.rpc.rpc import RPC +from freqtrade.rpc.rpc import RPC, RPCException from .webserver import ApiServer -def get_rpc() -> RPC: - return ApiServer._rpc +def get_rpc_optional() -> Optional[RPC]: + if ApiServer._has_rpc: + return ApiServer._rpc + return None + + +def get_rpc() -> Optional[RPC]: + _rpc = get_rpc_optional() + if _rpc: + return _rpc + else: + raise RPCException('Bot is not in the correct state') def get_config() -> Dict[str, Any]: diff --git a/freqtrade/rpc/api_server/webserver.py b/freqtrade/rpc/api_server/webserver.py index ac7a35a9e..a475ad494 100644 --- a/freqtrade/rpc/api_server/webserver.py +++ b/freqtrade/rpc/api_server/webserver.py @@ -17,6 +17,7 @@ logger = logging.getLogger(__name__) class ApiServer(RPCHandler): _rpc: RPC + _has_rpc: bool = False _config: Dict[str, Any] = {} def __init__(self, rpc: RPC, config: Dict[str, Any]) -> None: