mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-06-29 14:06:14 +02:00
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>
This commit is contained in:
parent
619de775fd
commit
63850a33c1
8 changed files with 70 additions and 19 deletions
|
@ -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"])
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"]:
|
||||
raise JrnlException(
|
||||
Message(
|
||||
MsgText.NoDefaultJournal,
|
||||
MsgStyle.ERROR,
|
||||
{"journals": list_journals(config)},
|
||||
),
|
||||
)
|
||||
|
||||
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.NoNamedJournal,
|
||||
MsgStyle.ERROR,
|
||||
{
|
||||
"journal_name": journal_name,
|
||||
"journals": list_journals(config),
|
||||
},
|
||||
),
|
||||
)
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue