Support invalid regex blacklist from config
This commit is contained in:
parent
9feabe707f
commit
0affacd39a
@ -4,7 +4,12 @@ from typing import List
|
|||||||
|
|
||||||
def expand_pairlist(wildcardpl: List[str], available_pairs: List[str]) -> List[str]:
|
def expand_pairlist(wildcardpl: List[str], available_pairs: List[str]) -> List[str]:
|
||||||
"""
|
"""
|
||||||
TODO: Add docstring here
|
Expand pairlist potentially containing wildcards based on available markets.
|
||||||
|
This will implicitly filter all pairs in the wildcard-list which are not in available_pairs.
|
||||||
|
:param wildcardpl: List of Pairlists, which may contain regex
|
||||||
|
:param available_pairs: List of all available pairs, usually with `exchange.get_markets().keys()`
|
||||||
|
:return expanded pairlist, with Regexes from wildcardpl applied to match all available pairs.
|
||||||
|
:raises: ValueError if a wildcard is invalid (like '*/BTC' - which should be `.*/BTC`)
|
||||||
"""
|
"""
|
||||||
result = []
|
result = []
|
||||||
for pair_wc in wildcardpl:
|
for pair_wc in wildcardpl:
|
||||||
|
@ -128,8 +128,13 @@ class PairListManager():
|
|||||||
:param logmethod: Function that'll be called, `logger.info` or `logger.warning`.
|
:param logmethod: Function that'll be called, `logger.info` or `logger.warning`.
|
||||||
:return: pairlist - blacklisted pairs
|
:return: pairlist - blacklisted pairs
|
||||||
"""
|
"""
|
||||||
|
try:
|
||||||
|
blacklist = self.expanded_blacklist
|
||||||
|
except ValueError as err:
|
||||||
|
logger.error(f"Pair blacklist contains an invalid Wildcard: {err}")
|
||||||
|
return []
|
||||||
for pair in deepcopy(pairlist):
|
for pair in deepcopy(pairlist):
|
||||||
if pair in self.expanded_blacklist:
|
if pair in blacklist:
|
||||||
logmethod(f"Pair {pair} in your blacklist. Removing it from whitelist...")
|
logmethod(f"Pair {pair} in your blacklist. Removing it from whitelist...")
|
||||||
pairlist.remove(pair)
|
pairlist.remove(pair)
|
||||||
return pairlist
|
return pairlist
|
||||||
|
@ -156,6 +156,23 @@ def test_refresh_static_pairlist(mocker, markets, static_pl_conf):
|
|||||||
assert static_pl_conf['exchange']['pair_blacklist'] == freqtrade.pairlists.blacklist
|
assert static_pl_conf['exchange']['pair_blacklist'] == freqtrade.pairlists.blacklist
|
||||||
|
|
||||||
|
|
||||||
|
def test_invalid_blacklist(mocker, markets, static_pl_conf, caplog):
|
||||||
|
static_pl_conf['exchange']['pair_blacklist'] = ['*/BTC']
|
||||||
|
freqtrade = get_patched_freqtradebot(mocker, static_pl_conf)
|
||||||
|
mocker.patch.multiple(
|
||||||
|
'freqtrade.exchange.Exchange',
|
||||||
|
exchange_has=MagicMock(return_value=True),
|
||||||
|
markets=PropertyMock(return_value=markets),
|
||||||
|
)
|
||||||
|
freqtrade.pairlists.refresh_pairlist()
|
||||||
|
# List ordered by BaseVolume
|
||||||
|
whitelist = []
|
||||||
|
# Ensure all except those in whitelist are removed
|
||||||
|
assert set(whitelist) == set(freqtrade.pairlists.whitelist)
|
||||||
|
assert static_pl_conf['exchange']['pair_blacklist'] == freqtrade.pairlists.blacklist
|
||||||
|
log_has_re(r"Pair blacklist contains an invalid Wildcard.*", caplog)
|
||||||
|
|
||||||
|
|
||||||
def test_refresh_pairlist_dynamic(mocker, shitcoinmarkets, tickers, whitelist_conf):
|
def test_refresh_pairlist_dynamic(mocker, shitcoinmarkets, tickers, whitelist_conf):
|
||||||
|
|
||||||
mocker.patch.multiple(
|
mocker.patch.multiple(
|
||||||
|
Loading…
Reference in New Issue
Block a user