mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-07-11 09:36:14 +02:00
Notify user when config directory can't be created because there is already a file with the same name (#1134)
* Moving configuration values and methods from install.py to config.py -- everything is broken right now * Using context to store config path - still lots broken * Use mocks and context.config_path to store test configs - many tests still broken though * Update changelog [ci skip] * Fix jrnl --ls crash * Fix crash when no editor configured * Attempt to patch config path with test data - doesn't appear to be working * Properly use patched config path and add config given to scenario that wasn't using it * Fix copypasta * Fix editor test that needed patched config and trapping for system exit * Add exception and handling for when configuration directory is actually a file * Remove extraneous comment * Use more generic JrnlError with messaging switchboard * Format code a bit nicer * Remove unnecessary given in diagnostic test * Ensure full error message is output * Remove unnecessary whitespace characters
This commit is contained in:
parent
e0c53c28bb
commit
c155bafa84
8 changed files with 182 additions and 97 deletions
|
@ -8,86 +8,45 @@ import logging
|
|||
import os
|
||||
import sys
|
||||
|
||||
import xdg.BaseDirectory
|
||||
import yaml
|
||||
|
||||
from . import __version__
|
||||
from .config import DEFAULT_JOURNAL_KEY
|
||||
from .config import get_config_path
|
||||
from .config import get_default_config
|
||||
from .config import get_default_journal_path
|
||||
from .config import load_config
|
||||
from .config import save_config
|
||||
from .config import verify_config_colors
|
||||
from .exception import UserAbort
|
||||
from .prompt import yesno
|
||||
from .upgrade import is_old_version
|
||||
|
||||
DEFAULT_CONFIG_NAME = "jrnl.yaml"
|
||||
DEFAULT_JOURNAL_NAME = "journal.txt"
|
||||
DEFAULT_JOURNAL_KEY = "default"
|
||||
XDG_RESOURCE = "jrnl"
|
||||
|
||||
USER_HOME = os.path.expanduser("~")
|
||||
|
||||
CONFIG_PATH = xdg.BaseDirectory.save_config_path(XDG_RESOURCE) or USER_HOME
|
||||
CONFIG_FILE_PATH = os.path.join(CONFIG_PATH, DEFAULT_CONFIG_NAME)
|
||||
CONFIG_FILE_PATH_FALLBACK = os.path.join(USER_HOME, ".jrnl_config")
|
||||
|
||||
JOURNAL_PATH = xdg.BaseDirectory.save_data_path(XDG_RESOURCE) or USER_HOME
|
||||
JOURNAL_FILE_PATH = os.path.join(JOURNAL_PATH, DEFAULT_JOURNAL_NAME)
|
||||
|
||||
|
||||
default_config = {
|
||||
"version": __version__,
|
||||
"journals": {"default": JOURNAL_FILE_PATH},
|
||||
"editor": os.getenv("VISUAL") or os.getenv("EDITOR") or "",
|
||||
"encrypt": False,
|
||||
"template": False,
|
||||
"default_hour": 9,
|
||||
"default_minute": 0,
|
||||
"timeformat": "%Y-%m-%d %H:%M",
|
||||
"tagsymbols": "@",
|
||||
"highlight": True,
|
||||
"linewrap": 79,
|
||||
"indent_character": "|",
|
||||
"colors": {
|
||||
"date": "none",
|
||||
"title": "none",
|
||||
"body": "none",
|
||||
"tags": "none",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def upgrade_config(config):
|
||||
"""Checks if there are keys missing in a given config dict, and if so, updates the config file accordingly.
|
||||
This essentially automatically ports jrnl installations if new config parameters are introduced in later
|
||||
versions."""
|
||||
default_config = get_default_config()
|
||||
missing_keys = set(default_config).difference(config)
|
||||
if missing_keys:
|
||||
for key in missing_keys:
|
||||
config[key] = default_config[key]
|
||||
save_config(config)
|
||||
print(
|
||||
f"[Configuration updated to newest version at {CONFIG_FILE_PATH}]",
|
||||
f"[Configuration updated to newest version at {get_config_path()}]",
|
||||
file=sys.stderr,
|
||||
)
|
||||
|
||||
|
||||
def save_config(config):
|
||||
config["version"] = __version__
|
||||
with open(CONFIG_FILE_PATH, "w") as f:
|
||||
yaml.safe_dump(
|
||||
config, f, encoding="utf-8", allow_unicode=True, default_flow_style=False
|
||||
)
|
||||
|
||||
|
||||
def load_or_install_jrnl():
|
||||
"""
|
||||
If jrnl is already installed, loads and returns a config object.
|
||||
Else, perform various prompts to install jrnl.
|
||||
"""
|
||||
config_path = (
|
||||
CONFIG_FILE_PATH
|
||||
if os.path.exists(CONFIG_FILE_PATH)
|
||||
else CONFIG_FILE_PATH_FALLBACK
|
||||
get_config_path()
|
||||
if os.path.exists(get_config_path())
|
||||
else os.path.join(os.path.expanduser("~"), ".jrnl_config")
|
||||
)
|
||||
|
||||
if os.path.exists(config_path):
|
||||
logging.debug("Reading configuration from file %s", config_path)
|
||||
config = load_config(config_path)
|
||||
|
@ -128,8 +87,10 @@ def install():
|
|||
_initialize_autocomplete()
|
||||
|
||||
# Where to create the journal?
|
||||
path_query = f"Path to your journal file (leave blank for {JOURNAL_FILE_PATH}): "
|
||||
journal_path = os.path.abspath(input(path_query).strip() or JOURNAL_FILE_PATH)
|
||||
default_journal_path = get_default_journal_path()
|
||||
path_query = f"Path to your journal file (leave blank for {default_journal_path}): "
|
||||
journal_path = os.path.abspath(input(path_query).strip() or default_journal_path)
|
||||
default_config = get_default_config()
|
||||
default_config["journals"][DEFAULT_JOURNAL_KEY] = os.path.expanduser(
|
||||
os.path.expandvars(journal_path)
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue