From f8347e2d3110916fe2de60bebe13c22d9d76f14b Mon Sep 17 00:00:00 2001 From: Serene-Arc Date: Thu, 11 Mar 2021 10:43:26 +1000 Subject: [PATCH] Add function to process click contexts for config --- bulkredditdownloader/configuration.py | 7 +++++++ .../tests/test_configuration.py | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 bulkredditdownloader/tests/test_configuration.py diff --git a/bulkredditdownloader/configuration.py b/bulkredditdownloader/configuration.py index 6b35e36..02d1c46 100644 --- a/bulkredditdownloader/configuration.py +++ b/bulkredditdownloader/configuration.py @@ -4,6 +4,8 @@ from argparse import Namespace from typing import Optional +import click + class Configuration(Namespace): def __init__(self): @@ -26,3 +28,8 @@ class Configuration(Namespace): self.upvoted: bool = False self.user: Optional[str] = None self.verbose: int = 0 + + def process_click_arguments(self, context: click.Context): + for arg_key in context.params.keys(): + if arg_key in vars(self) and context.params[arg_key] is not None: + vars(self)[arg_key] = context.params[arg_key] diff --git a/bulkredditdownloader/tests/test_configuration.py b/bulkredditdownloader/tests/test_configuration.py new file mode 100644 index 0000000..9905150 --- /dev/null +++ b/bulkredditdownloader/tests/test_configuration.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +from unittest.mock import MagicMock + +import pytest + +from bulkredditdownloader.configuration import Configuration + + +@pytest.mark.parametrize('arg_dict', ( + {'directory': 'test_dir'}, + {'directory': 'test_dir', 'no_dupes': True}, +)) +def test_process_click_context(arg_dict: dict): + test_config = Configuration() + test_context = MagicMock() + test_context.params = arg_dict + test_config.process_click_arguments(test_context) + test_config = vars(test_config) + assert all([test_config[arg] == arg_dict[arg] for arg in arg_dict.keys()])