upgrade_config checks for nested changes

This commit is contained in:
dbxnr 2020-01-10 01:53:55 +00:00
parent 9d9f61ac1e
commit 65eb1bb51b

View file

@ -10,6 +10,7 @@ from . import __version__
from .Journal import PlainJournal from .Journal import PlainJournal
from .EncryptedJournal import EncryptedJournal from .EncryptedJournal import EncryptedJournal
from .util import UserAbort from .util import UserAbort
from collections.abc import Mapping
import yaml import yaml
import logging import logging
import sys import sys
@ -61,19 +62,16 @@ default_config = {
} }
def upgrade_config(config): def upgrade_config(user_config, new_config=default_config):
"""Checks if there are keys missing in a given config dict, and if so, updates the config file accordingly. """Checks if there are keys missing in a given config dict, and returns a config dict with them added.
This essentially automatically ports jrnl installations if new config parameters are introduced in later This essentially automatically ports jrnl installations if new config parameters are introduced in later
versions.""" versions."""
missing_keys = set(default_config).difference(config) for k, v in new_config.items():
if missing_keys: new_value = user_config.get(k)
for key in missing_keys: if isinstance(v, Mapping) and isinstance(new_value, Mapping):
config[key] = default_config[key] user_config[k] = v
save_config(config) upgrade_config(new_value, v)
print( return user_config
f"[Configuration updated to newest version at {CONFIG_FILE_PATH}]",
file=sys.stderr,
)
def save_config(config): def save_config(config):
@ -113,7 +111,9 @@ def load_or_install_jrnl():
print("Exiting.", file=sys.stderr) print("Exiting.", file=sys.stderr)
sys.exit(1) sys.exit(1)
upgrade_config(config) if config.get('version') and config.get('version') < __version__:
upgraded_user_config = upgrade_config(config)
save_config(upgraded_user_config)
return config return config
else: else: