mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08:38:32 +02:00
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:
parent
c45bed7f6c
commit
3a5316cedc
4 changed files with 71 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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}': "
|
||||
|
|
|
@ -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"
|
27
tests/data/configs/duplicate_keys.yaml
Normal file
27
tests/data/configs/duplicate_keys.yaml
Normal 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: "|"
|
Loading…
Add table
Reference in a new issue