From d9d1735333d0781a2b52f0ad4b4c9f066dba7bc8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 3 Jun 2023 06:57:25 +0200 Subject: [PATCH] Extract ExchangePayload updating --- .../rpc/api_server/api_background_tasks.py | 24 ++++++++++++------- freqtrade/rpc/api_server/api_schemas.py | 9 ++++--- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/freqtrade/rpc/api_server/api_background_tasks.py b/freqtrade/rpc/api_server/api_background_tasks.py index 8a6814801..504ae7837 100644 --- a/freqtrade/rpc/api_server/api_background_tasks.py +++ b/freqtrade/rpc/api_server/api_background_tasks.py @@ -8,8 +8,8 @@ from freqtrade.constants import Config from freqtrade.enums import CandleType from freqtrade.exceptions import OperationalException from freqtrade.rpc.api_server.api_schemas import (BackgroundTaskStatus, BgJobStarted, - PairListsPayload, PairListsResponse, - WhitelistEvaluateResponse) + ExchangeModePayloadMixin, PairListsPayload, + PairListsResponse, WhitelistEvaluateResponse) from freqtrade.rpc.api_server.deps import get_config, get_exchange from freqtrade.rpc.api_server.webserver_bgwork import ApiBG @@ -85,12 +85,7 @@ def pairlists_evaluate(payload: PairListsPayload, background_tasks: BackgroundTa config_loc = deepcopy(config) config_loc['stake_currency'] = payload.stake_currency config_loc['pairlists'] = payload.pairlists - if payload.exchange: - config_loc['exchange']['name'] = payload.exchange - if payload.trading_mode: - config_loc['trading_mode'] = payload.trading_mode - config_loc['candle_type_def'] = CandleType.get_default( - config_loc.get('trading_mode', 'spot') or 'spot') + handleExchangePayload(payload, config_loc) # TODO: overwrite blacklist? make it optional and fall back to the one in config? # Outcome depends on the UI approach. config_loc['exchange']['pair_blacklist'] = payload.blacklist @@ -114,6 +109,19 @@ def pairlists_evaluate(payload: PairListsPayload, background_tasks: BackgroundTa } +def handleExchangePayload(payload: ExchangeModePayloadMixin, config_loc: Config): + """ + Handle exchange and trading mode payload. + Updates the configuration with the payload values. + """ + if payload.exchange: + config_loc['exchange']['name'] = payload.exchange + if payload.trading_mode: + config_loc['trading_mode'] = payload.trading_mode + config_loc['candle_type_def'] = CandleType.get_default( + config_loc.get('trading_mode', 'spot') or 'spot') + + @router.get('/pairlists/evaluate/{jobid}', response_model=WhitelistEvaluateResponse, tags=['pairlists']) def pairlists_evaluate_get(jobid: str): diff --git a/freqtrade/rpc/api_server/api_schemas.py b/freqtrade/rpc/api_server/api_schemas.py index 1f5a79aef..b849ebeb7 100644 --- a/freqtrade/rpc/api_server/api_schemas.py +++ b/freqtrade/rpc/api_server/api_schemas.py @@ -7,6 +7,11 @@ from freqtrade.constants import DATETIME_PRINT_FORMAT, IntOrInf from freqtrade.enums import OrderTypeValues, SignalDirection, TradingMode +class ExchangeModePayloadMixin(BaseModel): + trading_mode: Optional[TradingMode] + exchange: Optional[str] + + class Ping(BaseModel): status: str @@ -428,12 +433,10 @@ class PairListsResponse(BaseModel): pairlists: List[PairListResponse] -class PairListsPayload(BaseModel): +class PairListsPayload(ExchangeModePayloadMixin, BaseModel): pairlists: List[Dict[str, Any]] blacklist: List[str] stake_currency: str - trading_mode: Optional[TradingMode] - exchange: Optional[str] class FreqAIModelListResponse(BaseModel):