From e688783931a64ccfa8ee371892dee927caecb042 Mon Sep 17 00:00:00 2001 From: Frederic Fortier Date: Fri, 12 Jan 2018 19:35:32 -0500 Subject: [PATCH] BLD: added auth alias to support more than one api token per exchange --- catalyst/exchange/utils/exchange_utils.py | 5 +++-- catalyst/exchange/utils/factory.py | 4 ++-- catalyst/utils/run_algo.py | 16 ++++++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/catalyst/exchange/utils/exchange_utils.py b/catalyst/exchange/utils/exchange_utils.py index 081da592..baf4c629 100644 --- a/catalyst/exchange/utils/exchange_utils.py +++ b/catalyst/exchange/utils/exchange_utils.py @@ -192,7 +192,7 @@ def get_symbols_string(assets): return ', '.join([asset.symbol for asset in array]) -def get_exchange_auth(exchange_name, environ=None): +def get_exchange_auth(exchange_name, alias=None, environ=None): """ The de-serialized contend of the exchange's auth.json file. @@ -207,7 +207,8 @@ def get_exchange_auth(exchange_name, environ=None): """ exchange_folder = get_exchange_folder(exchange_name, environ) - filename = os.path.join(exchange_folder, 'auth.json') + name = 'auth' if alias is None else alias + filename = os.path.join(exchange_folder, '{}.json'.format(name)) if os.path.isfile(filename): with open(filename) as data_file: diff --git a/catalyst/exchange/utils/factory.py b/catalyst/exchange/utils/factory.py index 5650c42b..77b2d708 100644 --- a/catalyst/exchange/utils/factory.py +++ b/catalyst/exchange/utils/factory.py @@ -13,12 +13,12 @@ exchange_cache = dict() def get_exchange(exchange_name, base_currency=None, must_authenticate=False, - skip_init=False): + skip_init=False, auth_alias=None): key = (exchange_name, base_currency) if key in exchange_cache: return exchange_cache[key] - exchange_auth = get_exchange_auth(exchange_name) + exchange_auth = get_exchange_auth(exchange_name, alias=auth_alias) has_auth = (exchange_auth['key'] != '' and exchange_auth['secret'] != '') if must_authenticate and not has_auth: diff --git a/catalyst/utils/run_algo.py b/catalyst/utils/run_algo.py index 3d83426c..d1945fc6 100644 --- a/catalyst/utils/run_algo.py +++ b/catalyst/utils/run_algo.py @@ -91,6 +91,7 @@ def _run(handle_data, live_graph, analyze_live, simulate_orders, + auth_aliases, stats_output): """Run a backtest for the given algorithm. @@ -163,14 +164,19 @@ def _run(handle_data, raise ValueError('Please specify at least one exchange.') exchange_list = [x.strip().lower() for x in exchange.split(',')] - exchanges = dict() - for exchange_name in exchange_list: - exchanges[exchange_name] = get_exchange( - exchange_name=exchange_name, + for name in exchange_list: + if auth_aliases is not None and name in auth_aliases: + auth_alias = auth_aliases[name] + else: + auth_alias = None + + exchanges[name] = get_exchange( + exchange_name=name, base_currency=base_currency, must_authenticate=(live and not simulate_orders), skip_init=True, + auth_alias=auth_alias, ) open_calendar = get_calendar('OPEN') @@ -391,6 +397,7 @@ def run_algorithm(initialize, live_graph=False, analyze_live=None, simulate_orders=True, + auth_aliases=None, stats_output=None, output=os.devnull): """Run a trading algorithm. @@ -524,5 +531,6 @@ def run_algorithm(initialize, live_graph=live_graph, analyze_live=analyze_live, simulate_orders=simulate_orders, + auth_aliases=auth_aliases, stats_output=stats_output )