From 92c7f3e5414a046defbc7745458859e6aa47a460 Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Wed, 4 Sep 2024 20:02:54 +0200 Subject: [PATCH] Output and secrets are now configurable --- crypto_seller/__init__.py | 4 +++- crypto_seller/__main__.py | 35 ++++++++++++++++++++++----------- crypto_seller/secrets_config.py | 2 +- requirements_test.txt | 1 + test/test_auto_sell.py | 4 ++-- 5 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 requirements_test.txt diff --git a/crypto_seller/__init__.py b/crypto_seller/__init__.py index 9fbcc3c..c3373d6 100644 --- a/crypto_seller/__init__.py +++ b/crypto_seller/__init__.py @@ -239,7 +239,9 @@ def run_auto_sell( rounding=ROUND_DOWN, ) logger.info( - 'Attempting to sell %s %s', amount_to_sell, config.input_asset, + 'Attempting to sell %s %s', + amount_to_sell, + config.input_asset, ) order_details = config.seller.place_market_order( diff --git a/crypto_seller/__main__.py b/crypto_seller/__main__.py index 1fc7a34..8e39021 100644 --- a/crypto_seller/__main__.py +++ b/crypto_seller/__main__.py @@ -25,18 +25,18 @@ logger = logging.getLogger(__name__) ################################################################################ # Constants # -PATH_OUTPUT = Path('./output').absolute() -PATH_LOG_FILE = PATH_OUTPUT / 'log.txt' -PATH_TRADES_FILE = PATH_OUTPUT / 'trades.csv' +PATH_FILE_LOG = 'log.txt' +PATH_FILE_TRADES = 'trades.csv' ################################################################################ # Application Setup # -def setup_logging(): +def setup_logging(output_directory: Path): """Enables logging for the terminal and to a log file.""" - PATH_LOG_FILE.parent.mkdir(parents=True, exist_ok=True) - file_handler = logging.handlers.WatchedFileHandler(filename=PATH_LOG_FILE) + path_log_file = output_directory / PATH_FILE_LOG + path_log_file.parent.mkdir(parents=True, exist_ok=True) + file_handler = logging.handlers.WatchedFileHandler(filename=path_log_file) file_handler.setFormatter( logging.Formatter( '%(levelname)s:%(asctime)s: %(message)s', @@ -70,7 +70,7 @@ License : MIT License (see website for full text) """.strip() -def load_config(config_path: Path) -> AutoSellConfig: +def load_config(config_path: Path, output_directory: Path) -> AutoSellConfig: logger.info('Loading configuration') from . import secrets_config @@ -99,7 +99,7 @@ def load_config(config_path: Path) -> AutoSellConfig: exit_when_empty=True, seller=seller_backend, sleep=time.sleep, - log_order_to_csv=order_csv.CsvFileLogger(PATH_TRADES_FILE), + log_order_to_csv=order_csv.CsvFileLogger(output_directory / PATH_FILE_TRADES), ) @@ -117,6 +117,13 @@ def parse_args(): required=True, help='Trading configuration file', ) + parser.add_argument( + '--output', + type=Path, + dest='output_directory', + required=True, + help='Directory for outputing logs and trades list', + ) parser.add_argument( '--wait-before-first', action='store_true', @@ -128,13 +135,17 @@ def parse_args(): def main(): """Initializes the program.""" - setup_logging() - - logger.info('Initializing crypto_seller') args = parse_args() + setup_logging(output_directory=args.output_directory) + + logger.info('Initializing crypto_seller') + # Load config - auto_sell_config = load_config(args.config_file) + auto_sell_config = load_config( + args.config_file, + output_directory=args.output_directory, + ) # Display estimates try: diff --git a/crypto_seller/secrets_config.py b/crypto_seller/secrets_config.py index fa44d7e..3a5d3e2 100644 --- a/crypto_seller/secrets_config.py +++ b/crypto_seller/secrets_config.py @@ -4,7 +4,7 @@ from secret_loader import SecretLoader __all__ = ['KUCOIN_KEY', 'KUCOIN_SECRET', 'KUCOIN_PASS'] -secret_loader = SecretLoader() +secret_loader = SecretLoader(ENV_KEY_PREFIX='CS') KUCOIN_KEY = secret_loader.load_or_fail('KUCOIN_KEY') KUCOIN_SECRET = secret_loader.load_or_fail('KUCOIN_SECRET') diff --git a/requirements_test.txt b/requirements_test.txt new file mode 100644 index 0000000..e079f8a --- /dev/null +++ b/requirements_test.txt @@ -0,0 +1 @@ +pytest diff --git a/test/test_auto_sell.py b/test/test_auto_sell.py index afc8a92..4bb3052 100644 --- a/test/test_auto_sell.py +++ b/test/test_auto_sell.py @@ -65,7 +65,7 @@ def test_auto_run(): exit_when_empty=True, seller=seller_mock, log_order_to_csv=crypto_seller.order_csv.CsvFileLogger( - Path('output/test-trades.csv'), + Path('test/output/test-trades.csv'), ), sleep=sleep_mock, ) @@ -82,4 +82,4 @@ def test_auto_run(): # Check mocks agree assert seller_mock.amount_left == 0 - assert sleep_mock.time_slept == 1000 + 23 + assert sleep_mock.time_slept == 1000 + 17.2