From 8e648fd5b8d10c8f68b30ee0c30f02d5b60a1b77 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 27 Aug 2018 11:19:55 +0200 Subject: [PATCH] Use market options for fetch balances --- market.py | 10 ++++++---- store.py | 4 ++-- tests/test_market.py | 34 ++++++++++++++++++---------------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/market.py b/market.py index 546ee94..9612b17 100644 --- a/market.py +++ b/market.py @@ -427,16 +427,16 @@ class Processor: self.market.report.log_stage("{}_begin".format(process_name)) if "fetch_balances_begin" in step: - self.market.balances.fetch_balances(tag="{}_begin".format(process_name), - **step["fetch_balances_begin"]) + self.run_action("fetch_balances", step["fetch_balances_begin"], + dict(options, tag="{}_begin".format(process_name))) for action in self.ordered_actions: if action in step: self.run_action(action, step[action], options) if "fetch_balances_end" in step: - self.market.balances.fetch_balances(tag="{}_end".format(process_name), - **step["fetch_balances_end"]) + self.run_action("fetch_balances", step["fetch_balances_end"], + dict(options, tag="{}_end".format(process_name))) self.market.report.log_stage("{}_end".format(process_name)) @@ -459,6 +459,8 @@ class Processor: method = self.market.trades.close_trades elif action == "print_tickers": method = self.market.print_tickers + elif action == "fetch_balances": + method = self.market.balances.fetch_balances signature = inspect.getfullargspec(method) defaults = signature.defaults or [] diff --git a/store.py b/store.py index f987bb9..add3df6 100644 --- a/store.py +++ b/store.py @@ -304,7 +304,7 @@ class BalanceStore: compute_value, type) return amounts - def fetch_balances(self, tag=None, add_portfolio=False, + def fetch_balances(self, tag=None, add_portfolio=False, liquidity="medium", checkpoint=None, log_tickers=False, add_usdt=False, ticker_currency="BTC", ticker_compute_value="average", ticker_type="total"): all_balances = self.market.ccxt.fetch_all_balances() @@ -313,7 +313,7 @@ class BalanceStore: currency in self.all: self.all[currency] = portfolio.Balance(currency, balance) if add_portfolio: - for currency in Portfolio.repartition(from_cache=True): + for currency in Portfolio.repartition(from_cache=True, liquidity=liquidity): self.all.setdefault(currency, portfolio.Balance(currency, {})) if add_usdt: self.all.setdefault("USDT", portfolio.Balance("USDT", {})) diff --git a/tests/test_market.py b/tests/test_market.py index e6e6f36..9316480 100644 --- a/tests/test_market.py +++ b/tests/test_market.py @@ -1057,6 +1057,9 @@ class ProcessorTest(WebMockTestCase): method, arguments = processor.method_arguments("print_tickers") self.assertEqual(m.print_tickers, method) + method, arguments = processor.method_arguments("fetch_balances") + self.assertEqual(m.balances.fetch_balances, method) + def test_process_step(self): processor = market.Processor(self.m) @@ -1069,19 +1072,17 @@ class ProcessorTest(WebMockTestCase): mock.call("process_foo__2_sell_begin"), mock.call("process_foo__2_sell_end"), ]) - self.m.balances.fetch_balances.assert_has_calls([ - mock.call(tag="process_foo__2_sell_begin"), - mock.call(tag="process_foo__2_sell_end"), - ]) - self.assertEqual(5, run_action.call_count) + self.assertEqual(7, run_action.call_count) run_action.assert_has_calls([ + mock.call('fetch_balances', {}, {'foo': 'bar', 'tag': 'process_foo__2_sell_begin'}), mock.call('prepare_trades', {}, {'foo': 'bar'}), mock.call('prepare_orders', {'only': 'dispose', 'compute_value': 'average'}, {'foo': 'bar'}), mock.call('run_orders', {}, {'foo': 'bar'}), mock.call('follow_orders', {}, {'foo': 'bar'}), mock.call('close_trades', {}, {'foo': 'bar'}), + mock.call('fetch_balances', {}, {'foo': 'bar', 'tag': 'process_foo__2_sell_end'}), ]) self.m.reset_mock() @@ -1094,30 +1095,31 @@ class ProcessorTest(WebMockTestCase): mock.call("process_foo__0_print_balances_begin"), mock.call("process_foo__0_print_balances_end"), ]) - self.m.balances.fetch_balances.assert_has_calls([ - mock.call(add_portfolio=True, checkpoint='end', - log_tickers=True, - add_usdt=True, - tag='process_foo__0_print_balances_begin') - ]) - self.assertEqual(0, run_action.call_count) + self.assertEqual(1, run_action.call_count) + run_action.assert_has_calls([ + mock.call('fetch_balances', + {'checkpoint': 'end', 'log_tickers': True, 'add_usdt': True, 'add_portfolio': True}, + {'foo': 'bar', 'tag': 'process_foo__0_print_balances_begin'}), + ]) self.m.reset_mock() with mock.patch.object(processor, "run_action") as run_action: step = processor.scenarios["sell_needed"][1] processor.process_step("foo", step, {"foo":"bar"}) - self.m.balances.fetch_balances.assert_not_called() + self.assertEqual(1, run_action.call_count) self.m.reset_mock() with mock.patch.object(processor, "run_action") as run_action: step = processor.scenarios["print_balances"][0] processor.process_step("foo", step, {"foo":"bar"}) - self.m.balances.fetch_balances.assert_called_once_with( - add_portfolio=True, add_usdt=True, log_tickers=True, - tag='process_foo__1_print_balances_begin') + run_action.assert_has_calls([ + mock.call('fetch_balances', + {'log_tickers': True, 'add_usdt': True, 'add_portfolio': True}, + {'foo': 'bar', 'tag': 'process_foo__1_print_balances_begin'}), + ]) def test_parse_args(self): processor = market.Processor(self.m) -- 2.41.0