self.ccxt.check_required_credentials()
for action in actions:
if bool(before) is bool(after):
- self.processor.process(action, steps="all")
+ self.processor.process(action, steps="all", options=self.options)
elif before:
- self.processor.process(action, steps="before")
+ self.processor.process(action, steps="before", options=self.options)
elif after:
- self.processor.process(action, steps="after")
+ self.processor.process(action, steps="after", options=self.options)
except AuthenticationError:
self.report.log_error("market_authentication", message="Impossible to authenticate to market")
except Exception as e:
def can_process(self, scenario_name):
return scenario_name in self.scenarios
- def process(self, scenario_name, steps="all", **kwargs):
+ def process(self, scenario_name, steps="all", options={}):
if not self.can_process(scenario_name):
raise TypeError("Unknown scenario {}".format(scenario_name))
scenario = self.scenarios[scenario_name]
for step in steps:
selected_steps += self.select_steps(scenario, step)
for step in selected_steps:
- self.process_step(scenario_name, step, kwargs)
+ self.process_step(scenario_name, step, options)
- def process_step(self, scenario_name, step, kwargs):
+ def process_step(self, scenario_name, step, options):
process_name = "process_{}__{}_{}".format(scenario_name, step["number"], step["name"])
self.market.report.log_stage("{}_begin".format(process_name))
for action in self.ordered_actions:
if action in step:
- self.run_action(action, step[action], kwargs)
+ self.run_action(action, step[action], options)
if "fetch_balances_end" in step:
self.market.balances.fetch_balances(tag="{}_end".format(process_name),
return [method, kwargs]
- def parse_args(self, action, default_args, kwargs):
+ def parse_args(self, action, default_args, options):
method, allowed_arguments = self.method_arguments(action)
- args = {k: v for k, v in {**default_args, **kwargs, **self.market.options}.items() if k in allowed_arguments }
+ args = {k: v for k, v in {**default_args, **options}.items() if k in allowed_arguments }
if "repartition" in args and "base_currency" in args["repartition"]:
r = args["repartition"]
return method, args
- def run_action(self, action, default_args, kwargs):
- method, args = self.parse_args(action, default_args, kwargs)
+ def run_action(self, action, default_args, options):
+ method, args = self.parse_args(action, default_args, options)
method(**args)
@mock.patch("market.ReportStore.log_error")
@mock.patch("market.Market.store_report")
def test_process(self, store_report, log_error, process):
- m = market.Market(self.ccxt, self.market_args())
+ m = market.Market(self.ccxt, self.market_args(), options={"foo": "bar"})
with self.subTest(actions=[], before=False, after=False):
m.process([])
with self.subTest(before=True, after=False):
m.process(["foo"], before=True)
- process.assert_called_once_with("foo", steps="before")
+ process.assert_called_once_with("foo", options={"foo": "bar"}, steps="before")
store_report.assert_called_once()
log_error.assert_not_called()
with self.subTest(before=False, after=True):
m.process(["sell_all"], after=True)
- process.assert_called_once_with("sell_all", steps="after")
+ process.assert_called_once_with("sell_all", options={"foo": "bar"}, steps="after")
store_report.assert_called_once()
log_error.assert_not_called()
with self.subTest(before=False, after=False):
m.process(["foo"])
- process.assert_called_once_with("foo", steps="all")
+ process.assert_called_once_with("foo", options={"foo": "bar"}, steps="all")
store_report.assert_called_once()
log_error.assert_not_called()
with self.subTest(before=True, after=True):
m.process(["sell_all"], before=True, after=True)
- process.assert_called_once_with("sell_all", steps="all")
+ process.assert_called_once_with("sell_all", options={"foo": "bar"}, steps="all")
store_report.assert_called_once()
log_error.assert_not_called()
with self.subTest("nominal case"):
processor = market.Processor(self.m)
- processor.process("sell_all", foo="bar")
+ processor.process("sell_all", options="bar")
self.assertEqual(3, process_step.call_count)
steps = list(map(lambda x: x[1][1]["name"], process_step.mock_calls))
kwargs = list(map(lambda x: x[1][2], process_step.mock_calls))
self.assertEqual(["all_sell", "wait", "all_buy"], steps)
self.assertEqual(["sell_all", "sell_all", "sell_all"], scenario_names)
- self.assertEqual([{"foo":"bar"}, {"foo":"bar"}, {"foo":"bar"}], kwargs)
+ self.assertEqual(["bar", "bar", "bar"], kwargs)
process_step.reset_mock()
method_mock = mock.Mock()
method_arguments.return_value = [
method_mock,
- ["foo2", "foo", "foo3"]
+ ["foo2", "foo"]
]
- self.m.options = { "foo3": "coucou"}
method, args = processor.parse_args("action", {"foo": "bar", "foo2": "bar"}, {"foo": "bar2", "bla": "bla"})
self.assertEqual(method_mock, method)
- self.assertEqual({"foo": "bar2", "foo2": "bar", "foo3": "coucou"}, args)
+ self.assertEqual({"foo": "bar2", "foo2": "bar"}, args)
with mock.patch.object(processor, "method_arguments") as method_arguments:
method_mock = mock.Mock()