report = None
trades = None
balances = None
+ options = None
def __init__(self, ccxt_instance, args, **kwargs):
self.args = args
self.balances = BalanceStore(self)
self.processor = Processor(self)
+ self.options = kwargs.get("options", {})
for key in ["user_id", "market_id"]:
setattr(self, key, kwargs.get(key, None))
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))
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], kwargs)
+ 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))
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 []
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}.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)