Check for duplicate keys in config file (#1511)

* Check for duplicate keys in config file
* Corrected BDD tests
* Unneeded check removed
* Make use of ruamel DuplicateKeyError exception
* Remove unneeded import and function
* slightly reword warning message
* fix merge conflicts
* update tests

Co-authored-by: Jonathan Wren <jonathan@nowandwren.com>
This commit is contained in:
Jonathan van der Steege 2022-07-16 23:21:21 +02:00 committed by GitHub
parent c45bed7f6c
commit 3a5316cedc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 71 additions and 4 deletions

View file

@ -7,6 +7,7 @@ import os
import colorama
import xdg.BaseDirectory
from ruamel.yaml import YAML
from ruamel.yaml import constructor
from jrnl import __version__
from jrnl.exception import JrnlException
@ -159,6 +160,21 @@ def verify_config_colors(config):
def load_config(config_path):
"""Tries to load a config file from YAML."""
try:
with open(config_path, encoding=YAML_FILE_ENCODING) as f:
yaml = YAML(typ="safe")
yaml.allow_duplicate_keys = False
return yaml.load(f)
except constructor.DuplicateKeyError as e:
print_msg(
Message(
MsgText.ConfigDoubleKeys,
MsgStyle.WARNING,
{
"error_message": e,
},
)
)
with open(config_path, encoding=YAML_FILE_ENCODING) as f:
yaml = YAML(typ="safe")
yaml.allow_duplicate_keys = True

View file

@ -198,6 +198,13 @@ class MsgText(Enum):
Configuration updated to newest version at {config_path}
"""
ConfigDoubleKeys = """
There is at least one duplicate key in your configuration file.
Details:
{error_message}
"""
# --- Password --- #
Password = "Password:"
PasswordFirstEntry = "Enter password for journal '{journal_name}': "

View file

@ -106,3 +106,20 @@ Feature: Multiple journals
And we use the config "basic_onefile.yaml"
When we run "jrnl --cf empty_file.yaml"
Then the error output should contain "Unable to parse config file"
Scenario: Show a warning message when the config file contains duplicate keys at the same level
Given the config "duplicate_keys.yaml" exists
And we use the config "duplicate_keys.yaml"
When we run "jrnl -1"
Then the output should contain "There is at least one duplicate key in your configuration file"
Scenario: Show a warning message when using --config-file with duplicate keys
Given the config "duplicate_keys.yaml" exists
And we use the config "multiple.yaml"
When we run "jrnl --cf duplicate_keys.yaml -1"
Then the output should contain "There is at least one duplicate key in your configuration file"
Scenario: Don't show a duplicate keys warning message when using --config-override on an existing value
Given we use the config "multiple.yaml"
When we run "jrnl --config-override highlight false"
Then the output should not contain "There is at least one duplicate key in your configuration file"

View file

@ -0,0 +1,27 @@
default_hour: 9
default_minute: 0
editor: ''
encrypt: false
highlight: true
template: false
template: false
journals:
default:
encrypt: false
journal: features/journals/simple.journal
journal: features/journals/simple.journal
ideas:
encrypt: false
journal: features/journals/does-not-exist.journal
simple:
encrypt: false
journal: features/journals/simple.journal
encrypt: false
work:
encrypt: false
journal: features/journals/work.journal
linewrap: 80
tagsymbols: '@'
editor: nano
timeformat: '%Y-%m-%d %H:%M'
indent_character: "|"