exchange_utils: use ccxt exchange.has directly in capability checks
This commit is contained in:
@@ -54,17 +54,18 @@ def available_exchanges(ccxt_module: CcxtModuleType | None = None) -> list[str]:
|
|||||||
return [x for x in exchanges if validate_exchange(x)[0]]
|
return [x for x in exchanges if validate_exchange(x)[0]]
|
||||||
|
|
||||||
|
|
||||||
def _exchange_has_helper(ex_has: dict[str, Any], required: dict[str, list[str]]) -> list[str]:
|
def _exchange_has_helper(ex_mod: ccxt.Exchange, required: dict[str, list[str]]) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Checks availability of methods (or their replacement)s in a merged has-dict.
|
Checks availability of methods (or their replacement)s in ex_mod.has
|
||||||
:param ex_has: merged "has" dict (ccxt.has)
|
:param ex_mod: ccxt Exchange module
|
||||||
:param required: dict of required methods, with possible replacement methods as list
|
:param required: dict of required methods, with possible replacement methods as list
|
||||||
:return: list of missing required methods
|
:return: list of missing required methods
|
||||||
"""
|
"""
|
||||||
return [
|
return [
|
||||||
k
|
k
|
||||||
for k, v in required.items()
|
for k, v in required.items()
|
||||||
if ex_has.get(k) is not True and (len(v) == 0 or not (all(ex_has.get(x) for x in v)))
|
if ex_mod.has.get(k) is not True
|
||||||
|
and (len(v) == 0 or not (all(ex_mod.has.get(x) for x in v)))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -81,19 +82,17 @@ def validate_exchange(exchange: str) -> tuple[bool, str, str, ccxt.Exchange | No
|
|||||||
if not ex_mod or not ex_mod.has:
|
if not ex_mod or not ex_mod.has:
|
||||||
return False, "", "", None
|
return False, "", "", None
|
||||||
|
|
||||||
ex_has = dict(ex_mod.has or {})
|
|
||||||
|
|
||||||
result = True
|
result = True
|
||||||
reasons = []
|
reasons = []
|
||||||
reasons_fut = ""
|
reasons_fut = ""
|
||||||
missing = _exchange_has_helper(ex_has, EXCHANGE_HAS_REQUIRED)
|
missing = _exchange_has_helper(ex_mod, EXCHANGE_HAS_REQUIRED)
|
||||||
if missing:
|
if missing:
|
||||||
result = False
|
result = False
|
||||||
reasons.append(f"missing: {', '.join(missing)}")
|
reasons.append(f"missing: {', '.join(missing)}")
|
||||||
|
|
||||||
missing_opt = _exchange_has_helper(ex_has, EXCHANGE_HAS_OPTIONAL)
|
missing_opt = _exchange_has_helper(ex_mod, EXCHANGE_HAS_OPTIONAL)
|
||||||
|
|
||||||
missing_futures = _exchange_has_helper(ex_has, EXCHANGE_HAS_OPTIONAL_FUTURES)
|
missing_futures = _exchange_has_helper(ex_mod, EXCHANGE_HAS_OPTIONAL_FUTURES)
|
||||||
|
|
||||||
if exchange.lower() in BAD_EXCHANGES:
|
if exchange.lower() in BAD_EXCHANGES:
|
||||||
result = False
|
result = False
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ def test_exchange__exchange_has_helper():
|
|||||||
"fetchMyTrades": ["fetchTrades"],
|
"fetchMyTrades": ["fetchTrades"],
|
||||||
"fetchOrder": ["fetchOpenOrder", "fetchClosedOrder"],
|
"fetchOrder": ["fetchOpenOrder", "fetchClosedOrder"],
|
||||||
}
|
}
|
||||||
missing = _exchange_has_helper(e_mod.has, required)
|
missing = _exchange_has_helper(e_mod, required)
|
||||||
assert set(missing) == {"fetchOHLCV"}
|
assert set(missing) == {"fetchOHLCV"}
|
||||||
|
|
||||||
e_mod.has = {
|
e_mod.has = {
|
||||||
@@ -414,7 +414,7 @@ def test_exchange__exchange_has_helper():
|
|||||||
"fetchMyTrades": False,
|
"fetchMyTrades": False,
|
||||||
"fetchOrder": True,
|
"fetchOrder": True,
|
||||||
}
|
}
|
||||||
missing = _exchange_has_helper(e_mod.has, required)
|
missing = _exchange_has_helper(e_mod, required)
|
||||||
assert set(missing) == {"fetchOHLCV", "fetchMyTrades"}
|
assert set(missing) == {"fetchOHLCV", "fetchMyTrades"}
|
||||||
|
|
||||||
e_mod.has = {
|
e_mod.has = {
|
||||||
@@ -424,5 +424,5 @@ def test_exchange__exchange_has_helper():
|
|||||||
"fetchMyTrades": False,
|
"fetchMyTrades": False,
|
||||||
"fetchOrder": False,
|
"fetchOrder": False,
|
||||||
}
|
}
|
||||||
missing = _exchange_has_helper(e_mod.has, required)
|
missing = _exchange_has_helper(e_mod, required)
|
||||||
assert set(missing) == {"fetchOHLCV", "fetchMyTrades", "fetchOrder"}
|
assert set(missing) == {"fetchOHLCV", "fetchMyTrades", "fetchOrder"}
|
||||||
|
|||||||
Reference in New Issue
Block a user