From 110e2b9022b8c3a892e3776ea17b1ccf337306ac Mon Sep 17 00:00:00 2001 From: sugas182 Date: Tue, 19 Jan 2021 09:03:43 -0500 Subject: [PATCH] add test and argument handler for runtime override of configurations. --- jrnl/args.py | 20 ++++++++++++++++++++ tests/test_parse_args.py | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/jrnl/args.py b/jrnl/args.py index f934ca16..cab41001 100644 --- a/jrnl/args.py +++ b/jrnl/args.py @@ -2,8 +2,10 @@ # License: https://www.gnu.org/licenses/gpl-3.0.html import argparse +from jrnl import config import re import textwrap +import json from .commands import postconfig_decrypt from .commands import postconfig_encrypt @@ -314,6 +316,24 @@ def parse_args(args=[]): help=argparse.SUPPRESS, ) + overrides = parser.add_argument_group("Config file overrides",textwrap.dedent('These are one-off overrides of the config file options')) + overrides.add_argument( + "--override", + dest="config_override", + action="store", + type=json.loads, + nargs="?", + default={}, + metavar="CONFIG_KV_PAIR", + help=""" + Override configured key-value pairs with CONFIG_KV_PAIR for this command invocation only. + + For example, to use a different editor for this jrnl entry, call: + jrnl --override '{"editor": "nano"}' + + """ + ) + # Handle '-123' as a shortcut for '-n 123' num = re.compile(r"^-(\d+)$") args = [num.sub(r"-n \1", arg) for arg in args] diff --git a/tests/test_parse_args.py b/tests/test_parse_args.py index 252638c9..fa367462 100644 --- a/tests/test_parse_args.py +++ b/tests/test_parse_args.py @@ -35,6 +35,7 @@ def expected_args(**kwargs): "strict": False, "tags": False, "text": [], + "config_override":{} } return {**default_args, **kwargs} @@ -204,6 +205,10 @@ def test_version_alone(): assert cli_as_dict("--version") == expected_args(preconfig_cmd=preconfig_version) +def test_editor_override(): + from jrnl.commands import postconfig_override + + assert cli_as_dict("--override '{\"editor\": \"nano\"}'") == expected_args(config_override={'editor':'nano'}) # @see https://github.com/jrnl-org/jrnl/issues/520 @pytest.mark.parametrize(