summaryrefslogtreecommitdiffstats
path: root/jrnl
diff options
context:
space:
mode:
authorJonathan Wren <jonathan@nowandwren.com>2022-10-22 15:35:16 -0700
committerGitHub <noreply@github.com>2022-10-22 15:35:16 -0700
commit63850a33c12da1fc623721ef4fd2e2faa598ef88 (patch)
tree5903fcdf904b0da01db8e701f7f7bb3799863a42 /jrnl
parent619de775fdf47508c4493cdcff844113e46fa757 (diff)
Fix bug for new `--list --format` options when no default journal is specified (#1621)
* rename test config * Change journal name validation Journal name validation used to happen before postconfig commands could have a chance to run, so now each command is responsible for its own error-checking of the journal name. Added a new decorator and function that makes this error-checking easier. Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com> * fix wrapper function call to be more like original * change arg names to show which aren't used * add type hints Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
Diffstat (limited to 'jrnl')
-rw-r--r--jrnl/Journal.py2
-rw-r--r--jrnl/commands.py25
-rw-r--r--jrnl/config.py27
-rw-r--r--jrnl/messages/MsgText.py2
4 files changed, 45 insertions, 11 deletions
diff --git a/jrnl/Journal.py b/jrnl/Journal.py
index c2c43142..2fa1d465 100644
--- a/jrnl/Journal.py
+++ b/jrnl/Journal.py
@@ -8,6 +8,7 @@ import re
from jrnl import Entry
from jrnl import time
+from jrnl.config import validate_journal_name
from jrnl.messages import Message
from jrnl.messages import MsgStyle
from jrnl.messages import MsgText
@@ -430,6 +431,7 @@ def open_journal(journal_name, config, legacy=False):
If legacy is True, it will open Journals with legacy classes build for
backwards compatibility with jrnl 1.x
"""
+ validate_journal_name(journal_name, config)
config = config.copy()
config["journal"] = expand_path(config["journal"])
diff --git a/jrnl/commands.py b/jrnl/commands.py
index 6100422b..b1fc81e0 100644
--- a/jrnl/commands.py
+++ b/jrnl/commands.py
@@ -14,9 +14,11 @@ run.
Also, please note that all (non-builtin) imports should be scoped to each function to
avoid any possible overhead for these standalone commands.
"""
+import argparse
import platform
import sys
+from jrnl.config import cmd_requires_valid_journal_name
from jrnl.exception import JrnlException
from jrnl.messages import Message
from jrnl.messages import MsgStyle
@@ -56,13 +58,16 @@ def preconfig_version(_):
print(output)
-def postconfig_list(args, config, **kwargs):
+def postconfig_list(args: argparse.Namespace, config: dict, **_) -> int:
from jrnl.output import list_journals
print(list_journals(config, args.export))
+ return 0
-def postconfig_import(args, config, **kwargs):
+
+@cmd_requires_valid_journal_name
+def postconfig_import(args: argparse.Namespace, config: dict, **_) -> int:
from jrnl.Journal import open_journal
from jrnl.plugins import get_importer
@@ -72,8 +77,13 @@ def postconfig_import(args, config, **kwargs):
format = args.export if args.export else "jrnl"
get_importer(format).import_(journal, args.filename)
+ return 0
+
-def postconfig_encrypt(args, config, original_config, **kwargs):
+@cmd_requires_valid_journal_name
+def postconfig_encrypt(
+ args: argparse.Namespace, config: dict, original_config: dict
+) -> int:
"""
Encrypt a journal in place, or optionally to a new file
"""
@@ -122,8 +132,13 @@ def postconfig_encrypt(args, config, original_config, **kwargs):
)
save_config(original_config)
+ return 0
-def postconfig_decrypt(args, config, original_config, **kwargs):
+
+@cmd_requires_valid_journal_name
+def postconfig_decrypt(
+ args: argparse.Namespace, config: dict, original_config: dict
+) -> int:
"""Decrypts into new file. If filename is not set, we encrypt the journal file itself."""
from jrnl.config import update_config
from jrnl.install import save_config
@@ -149,3 +164,5 @@ def postconfig_decrypt(args, config, original_config, **kwargs):
original_config, {"encrypt": False}, args.journal_name, force_local=True
)
save_config(original_config)
+
+ return 0
diff --git a/jrnl/config.py b/jrnl/config.py
index aed17200..8e5c5a14 100644
--- a/jrnl/config.py
+++ b/jrnl/config.py
@@ -1,8 +1,10 @@
# Copyright © 2012-2022 jrnl contributors
# License: https://www.gnu.org/licenses/gpl-3.0.html
+import argparse
import logging
import os
+from typing import Callable
import colorama
import xdg.BaseDirectory
@@ -213,14 +215,27 @@ def get_journal_name(args, config):
args.journal_name = potential_journal_name
args.text = args.text[1:]
- if args.journal_name not in config["journals"]:
+ logging.debug("Using journal name: %s", args.journal_name)
+ return args
+
+
+def cmd_requires_valid_journal_name(func: Callable) -> Callable:
+ def wrapper(args: argparse.Namespace, config: dict, original_config: dict):
+ validate_journal_name(args.journal_name, config)
+ func(args=args, config=config, original_config=original_config)
+
+ return wrapper
+
+
+def validate_journal_name(journal_name: str, config: dict) -> None:
+ if journal_name not in config["journals"]:
raise JrnlException(
Message(
- MsgText.NoDefaultJournal,
+ MsgText.NoNamedJournal,
MsgStyle.ERROR,
- {"journals": list_journals(config)},
+ {
+ "journal_name": journal_name,
+ "journals": list_journals(config),
+ },
),
)
-
- logging.debug("Using journal name: %s", args.journal_name)
- return args
diff --git a/jrnl/messages/MsgText.py b/jrnl/messages/MsgText.py
index 0f509645..b3cc50e7 100644
--- a/jrnl/messages/MsgText.py
+++ b/jrnl/messages/MsgText.py
@@ -101,7 +101,7 @@ class MsgText(Enum):
{template}
"""
- NoDefaultJournal = "No default journal configured\n{journals}"
+ NoNamedJournal = "No '{journal_name}' journal configured\n{journals}"
DoesNotExist = "{name} does not exist"