From 6467d3b58e29c15157be6b264a55acefeb89f406 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Mon, 6 May 2019 18:27:05 +0300 Subject: [PATCH 1/5] check python version --- freqtrade/main.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/freqtrade/main.py b/freqtrade/main.py index 877e2921d..79d150441 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -22,21 +22,28 @@ def main(sysargv: List[str]) -> None: This function will initiate the bot and start the trading loop. :return: None """ - arguments = Arguments( - sysargv, - 'Free, open source crypto trading bot' - ) - args: Namespace = arguments.get_parsed_arg() - - # A subcommand has been issued. - # Means if Backtesting or Hyperopt have been called we exit the bot - if hasattr(args, 'func'): - args.func(args) - return - - worker = None - return_code = 1 try: + worker = None + return_code = 1 + + # check min. python version + if sys.version_info < (3, 6): + raise SystemError("Freqtrade requires Python version >= 3.6") + + arguments = Arguments( + sysargv, + 'Free, open source crypto trading bot' + ) + args: Namespace = arguments.get_parsed_arg() + + # A subcommand has been issued. + # Means if Backtesting or Hyperopt have been called we exit the bot + if hasattr(args, 'func'): + args.func(args) + # TODO: fetch return_code as returned by the command function here + return_code = 0 + return + # Load and run worker worker = Worker(args) worker.run() @@ -47,8 +54,8 @@ def main(sysargv: List[str]) -> None: except OperationalException as e: logger.error(str(e)) return_code = 2 - except BaseException: - logger.exception('Fatal exception!') + except BaseException as e: + logger.exception('Fatal exception! ' + str(e)) finally: if worker: worker.exit() From 7b968a2401dc0b82d0c2e32016f16d9c19185173 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Fri, 24 May 2019 04:04:07 +0300 Subject: [PATCH 2/5] logger.exception cleanup --- freqtrade/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/main.py b/freqtrade/main.py index 79d150441..809ab3c7a 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -54,8 +54,8 @@ def main(sysargv: List[str]) -> None: except OperationalException as e: logger.error(str(e)) return_code = 2 - except BaseException as e: - logger.exception('Fatal exception! ' + str(e)) + except BaseException: + logger.exception('Fatal exception!') finally: if worker: worker.exit() From 536c8fa4549715ab6bd63d35ef7b0b4a1223f385 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Tue, 28 May 2019 23:04:39 +0300 Subject: [PATCH 3/5] move python version check to the top --- freqtrade/main.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/freqtrade/main.py b/freqtrade/main.py index 809ab3c7a..35fbccfa3 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -3,8 +3,14 @@ Main Freqtrade bot script. Read the documentation to know what cli arguments you need. """ -import logging + import sys +# check min. python version +if sys.version_info < (3, 6): + sys.exit("Freqtrade requires Python version >= 3.6") + +# flake8: noqa E402 +import logging from argparse import Namespace from typing import List @@ -26,10 +32,6 @@ def main(sysargv: List[str]) -> None: worker = None return_code = 1 - # check min. python version - if sys.version_info < (3, 6): - raise SystemError("Freqtrade requires Python version >= 3.6") - arguments = Arguments( sysargv, 'Free, open source crypto trading bot' From 58477dcd8205784ba58c69233229f285fb272c20 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Tue, 28 May 2019 23:25:19 +0300 Subject: [PATCH 4/5] cleanup: return after cmd removed in main() --- freqtrade/main.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/freqtrade/main.py b/freqtrade/main.py index 35fbccfa3..d8c447800 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -44,11 +44,10 @@ def main(sysargv: List[str]) -> None: args.func(args) # TODO: fetch return_code as returned by the command function here return_code = 0 - return - - # Load and run worker - worker = Worker(args) - worker.run() + else: + # Load and run worker + worker = Worker(args) + worker.run() except KeyboardInterrupt: logger.info('SIGINT received, aborting ...') From db2e6f2d1c9a25c077f660c1738bc65b64f26a7e Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Tue, 28 May 2019 23:25:53 +0300 Subject: [PATCH 5/5] tests adjusted --- freqtrade/tests/test_main.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/freqtrade/tests/test_main.py b/freqtrade/tests/test_main.py index e4ffc5fae..9e7cc4a66 100644 --- a/freqtrade/tests/test_main.py +++ b/freqtrade/tests/test_main.py @@ -20,7 +20,9 @@ def test_parse_args_backtesting(mocker) -> None: further argument parsing is done in test_arguments.py """ backtesting_mock = mocker.patch('freqtrade.optimize.backtesting.start', MagicMock()) - main(['backtesting']) + # it's sys.exit(0) at the end of backtesting + with pytest.raises(SystemExit): + main(['backtesting']) assert backtesting_mock.call_count == 1 call_args = backtesting_mock.call_args[0][0] assert call_args.config == ['config.json'] @@ -33,7 +35,9 @@ def test_parse_args_backtesting(mocker) -> None: def test_main_start_hyperopt(mocker) -> None: hyperopt_mock = mocker.patch('freqtrade.optimize.hyperopt.start', MagicMock()) - main(['hyperopt']) + # it's sys.exit(0) at the end of hyperopt + with pytest.raises(SystemExit): + main(['hyperopt']) assert hyperopt_mock.call_count == 1 call_args = hyperopt_mock.call_args[0][0] assert call_args.config == ['config.json']