feat(exchange): apply ft_has overrides in check_exchange
This commit is contained in:
@@ -1,15 +1,30 @@
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from freqtrade.constants import Config
|
||||
from freqtrade.enums import RunMode
|
||||
from freqtrade.exceptions import OperationalException
|
||||
from freqtrade.exchange import available_exchanges, is_exchange_known_ccxt, validate_exchange
|
||||
from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS, SUPPORTED_EXCHANGES
|
||||
from freqtrade.resolvers.exchange_resolver import ExchangeResolver
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _get_ft_has_overrides(exchange_name: str) -> dict[str, Any] | None:
|
||||
subclassed = {e["name"].lower(): e for e in ExchangeResolver.search_all_objects({}, False)}
|
||||
mapped = MAP_EXCHANGE_CHILDCLASS.get(exchange_name.lower(), exchange_name.lower()).lower()
|
||||
resolved = subclassed.get(mapped)
|
||||
if not resolved:
|
||||
return None
|
||||
|
||||
get_ft_has = getattr(resolved["class"], "get_ft_has", None)
|
||||
if callable(get_ft_has):
|
||||
return get_ft_has() or None
|
||||
return None
|
||||
|
||||
|
||||
def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
|
||||
"""
|
||||
Check if the exchange name in the config file is supported by Freqtrade
|
||||
@@ -47,7 +62,8 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
|
||||
f"{', '.join(available_exchanges())}"
|
||||
)
|
||||
|
||||
valid, reason, _, _ = validate_exchange(exchange)
|
||||
ft_has_overrides = _get_ft_has_overrides(exchange)
|
||||
valid, reason, _, _ = validate_exchange(exchange, ft_has_overrides)
|
||||
if not valid:
|
||||
if check_for_bad:
|
||||
raise OperationalException(
|
||||
@@ -72,3 +88,4 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user