Stop and start calls added
Along with refactoring to base line and use decorators.
Also modules loaded optionally if enabled in config or not
binds to ip / port set from config.json with warning if not localhost

TODO:
 - use argparse in client, and generally clean client up
 - create unit test
 - documentation
 - extend to other RCP commands, after feedback
This commit is contained in:
creslinux
2018-06-14 15:38:26 +00:00
parent 6bb1ad288e
commit fb60f684f7
3 changed files with 131 additions and 86 deletions

View File

@@ -1,13 +1,10 @@
"""
This module contains class to manage RPC communications (Telegram, Slack, ....)
This module contains class to manage RPC communications (Telegram, Slack, Rest ...)
"""
from typing import Any, List
import logging
import time
from freqtrade.rpc.telegram import Telegram
from freqtrade.rpc.local_rest_server import LocalRestSuperWrap
from typing import List
from freqtrade.rpc.rpc import RPC
logger = logging.getLogger(__name__)
@@ -17,42 +14,29 @@ class RPCManager(object):
Class to manage RPC objects (Telegram, Slack, ...)
"""
def __init__(self, freqtrade) -> None:
"""
Initializes all enabled rpc modules
:param config: config to use
:return: None
"""
self.freqtrade = freqtrade
""" Initializes all enabled rpc modules """
self.registered_modules: List[RPC] = []
self.registered_modules: List[str] = []
self.telegram: Any = None
self._init()
def _init(self) -> None:
"""
Init RPC modules
:return:
"""
if self.freqtrade.config['telegram'].get('enabled', False):
# Enable telegram
if freqtrade.config['telegram'].get('enabled', False):
logger.info('Enabling rpc.telegram ...')
self.registered_modules.append('telegram')
self.telegram = Telegram(self.freqtrade)
from freqtrade.rpc.telegram import Telegram
self.registered_modules.append(Telegram(freqtrade))
# Added another RPC client - for cmdline local client.
# Uses existing superclass RPC build for Telegram
if self.freqtrade.config['rest_cmd'].get('enabled', False):
self.localRPC = LocalRestSuperWrap(self.freqtrade)
time.sleep(1)
# Enable local rest server for cmd line control
if freqtrade.config['rest_cmd_line'].get('enabled', False):
logger.info('Enabling rpc.local_rest_server ...')
from freqtrade.rpc.local_rest_server import LocalRestSuperWrap
self.registered_modules.append(LocalRestSuperWrap(freqtrade))
def cleanup(self) -> None:
"""
Stops all enabled rpc modules
:return: None
"""
if 'telegram' in self.registered_modules:
logger.info('Cleaning up rpc.telegram ...')
self.registered_modules.remove('telegram')
self.telegram.cleanup()
""" Stops all enabled rpc modules """
logger.info('Cleaning up rpc modules ...')
while self.registered_modules:
mod = self.registered_modules.pop()
logger.debug('Cleaning up rpc.%s ...', mod.name)
mod.cleanup()
del mod
def send_msg(self, msg: str) -> None:
"""
@@ -60,6 +44,7 @@ class RPCManager(object):
:param msg: message
:return: None
"""
logger.info(msg)
if 'telegram' in self.registered_modules:
self.telegram.send_msg(msg)
logger.info('Sending rpc message: %s', msg)
for mod in self.registered_modules:
logger.debug('Forwarding message to rpc.%s', mod.name)
mod.send_msg(msg)