Allow to pass config into worker, as it's used in the tests
This commit is contained in:
parent
c8b0c9af0a
commit
5161e1abb3
@ -34,7 +34,7 @@ class FreqtradeBot(object):
|
|||||||
This is from here the bot start its logic.
|
This is from here the bot start its logic.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, config: Dict[str, Any], worker: Worker) -> None:
|
def __init__(self, config: Dict[str, Any], worker: Optional[Worker] = None) -> None:
|
||||||
"""
|
"""
|
||||||
Init all variables and objects the bot needs to work
|
Init all variables and objects the bot needs to work
|
||||||
:param config: configuration dict, you can use Configuration.get_config()
|
:param config: configuration dict, you can use Configuration.get_config()
|
||||||
@ -45,7 +45,7 @@ class FreqtradeBot(object):
|
|||||||
|
|
||||||
# Init objects
|
# Init objects
|
||||||
self.config = config
|
self.config = config
|
||||||
self._worker: Worker = worker
|
self._worker = worker
|
||||||
|
|
||||||
self.strategy: IStrategy = StrategyResolver(self.config).strategy
|
self.strategy: IStrategy = StrategyResolver(self.config).strategy
|
||||||
|
|
||||||
@ -75,10 +75,14 @@ class FreqtradeBot(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self) -> State:
|
def state(self) -> State:
|
||||||
|
if self._worker is None:
|
||||||
|
raise DependencyException("No Worker is available")
|
||||||
return self._worker.state
|
return self._worker.state
|
||||||
|
|
||||||
@state.setter
|
@state.setter
|
||||||
def state(self, value: State):
|
def state(self, value: State):
|
||||||
|
if self._worker is None:
|
||||||
|
raise DependencyException("No Worker is available")
|
||||||
self._worker.state = value
|
self._worker.state = value
|
||||||
|
|
||||||
def cleanup(self) -> None:
|
def cleanup(self) -> None:
|
||||||
|
@ -5,7 +5,7 @@ import logging
|
|||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable, Optional
|
||||||
import sdnotify
|
import sdnotify
|
||||||
|
|
||||||
from freqtrade import (constants, OperationalException, TemporaryError,
|
from freqtrade import (constants, OperationalException, TemporaryError,
|
||||||
@ -23,26 +23,28 @@ class Worker(object):
|
|||||||
Freqtradebot worker class
|
Freqtradebot worker class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, args: Namespace) -> None:
|
def __init__(self, args: Optional[Namespace] = None, config = None) -> None:
|
||||||
"""
|
"""
|
||||||
Init all variables and objects the bot needs to work
|
Init all variables and objects the bot needs to work
|
||||||
"""
|
"""
|
||||||
logger.info('Starting worker %s', __version__)
|
logger.info('Starting worker %s', __version__)
|
||||||
|
|
||||||
self._args = args
|
self._args = args
|
||||||
self._init()
|
self._config = config
|
||||||
|
self._init(False)
|
||||||
|
|
||||||
# Tell systemd that we completed initialization phase
|
# Tell systemd that we completed initialization phase
|
||||||
if self._sd_notify:
|
if self._sd_notify:
|
||||||
logger.debug("sd_notify: READY=1")
|
logger.debug("sd_notify: READY=1")
|
||||||
self._sd_notify.notify("READY=1")
|
self._sd_notify.notify("READY=1")
|
||||||
|
|
||||||
def _init(self):
|
def _init(self, reconfig: bool):
|
||||||
"""
|
"""
|
||||||
Also called from the _reconfigure() method.
|
Also called from the _reconfigure() method (with reconfig=True).
|
||||||
"""
|
"""
|
||||||
# Load configuration
|
if reconfig or self._config is None:
|
||||||
self._config = Configuration(self._args, None).get_config()
|
# Load configuration
|
||||||
|
self._config = Configuration(self._args, None).get_config()
|
||||||
|
|
||||||
# Import freqtradebot here in order to avoid python circular
|
# Import freqtradebot here in order to avoid python circular
|
||||||
# dependency error, damn!
|
# dependency error, damn!
|
||||||
@ -77,17 +79,19 @@ class Worker(object):
|
|||||||
def run(self):
|
def run(self):
|
||||||
state = None
|
state = None
|
||||||
while True:
|
while True:
|
||||||
state = self._worker(old_state=state, throttle_secs=self._throttle_secs)
|
state = self._worker(old_state=state)
|
||||||
if state == State.RELOAD_CONF:
|
if state == State.RELOAD_CONF:
|
||||||
self.freqtrade = self._reconfigure()
|
self.freqtrade = self._reconfigure()
|
||||||
|
|
||||||
def _worker(self, old_state: State, throttle_secs: float) -> State:
|
def _worker(self, old_state: State, throttle_secs: Optional[float] = None) -> State:
|
||||||
"""
|
"""
|
||||||
Trading routine that must be run at each loop
|
Trading routine that must be run at each loop
|
||||||
:param old_state: the previous service state from the previous call
|
:param old_state: the previous service state from the previous call
|
||||||
:return: current service state
|
:return: current service state
|
||||||
"""
|
"""
|
||||||
state = self._state
|
state = self._state
|
||||||
|
if throttle_secs is None:
|
||||||
|
throttle_secs = self._throttle_secs
|
||||||
|
|
||||||
# Log state transition
|
# Log state transition
|
||||||
if state != old_state:
|
if state != old_state:
|
||||||
@ -166,7 +170,7 @@ class Worker(object):
|
|||||||
self.freqtrade.cleanup()
|
self.freqtrade.cleanup()
|
||||||
|
|
||||||
# Load and validate config and create new instance of the bot
|
# Load and validate config and create new instance of the bot
|
||||||
self._init()
|
self._init(True)
|
||||||
|
|
||||||
self.freqtrade.rpc.send_msg({
|
self.freqtrade.rpc.send_msg({
|
||||||
'type': RPCMessageType.STATUS_NOTIFICATION,
|
'type': RPCMessageType.STATUS_NOTIFICATION,
|
||||||
|
Loading…
Reference in New Issue
Block a user