diff --git a/jrnl/cli.py b/jrnl/cli.py index 148408d3c..df8808fc4 100644 --- a/jrnl/cli.py +++ b/jrnl/cli.py @@ -27,7 +27,6 @@ import jrnl from . import install, plugins, util -from .EncryptedJournal import EncryptedJournal from .Journal import PlainJournal, open_journal from .util import ERROR_COLOR, RESET_COLOR, UserAbort @@ -242,6 +241,8 @@ def guess_mode(args, config): def encrypt(journal, filename=None): """ Encrypt into new file. If filename is not set, we encrypt the journal file itself. """ + from .EncryptedJournal import EncryptedJournal + journal.config["encrypt"] = True new_journal = EncryptedJournal.from_journal(journal) diff --git a/jrnl/install.py b/jrnl/install.py index 7844d3e24..58c8cf01f 100644 --- a/jrnl/install.py +++ b/jrnl/install.py @@ -8,7 +8,7 @@ import xdg.BaseDirectory import yaml -from . import __version__, upgrade, util +from . import __version__, util from .util import UserAbort, verify_config if "win32" not in sys.platform: @@ -96,20 +96,23 @@ def load_or_install_jrnl(): log.debug("Reading configuration from file %s", config_path) config = util.load_config(config_path) - try: - upgrade.upgrade_jrnl_if_necessary(config_path) - except upgrade.UpgradeValidationException: - print("Aborting upgrade.", file=sys.stderr) - print( - "Please tell us about this problem at the following URL:", - file=sys.stderr, - ) - print( - "https://github.com/jrnl-org/jrnl/issues/new?title=UpgradeValidationException", - file=sys.stderr, - ) - print("Exiting.", file=sys.stderr) - sys.exit(1) + if util.is_old_version(config_path): + from . import upgrade + + try: + upgrade.upgrade_jrnl(config_path) + except upgrade.UpgradeValidationException: + print("Aborting upgrade.", file=sys.stderr) + print( + "Please tell us about this problem at the following URL:", + file=sys.stderr, + ) + print( + "https://github.com/jrnl-org/jrnl/issues/new?title=UpgradeValidationException", + file=sys.stderr, + ) + print("Exiting.", file=sys.stderr) + sys.exit(1) upgrade_config(config) verify_config(config) diff --git a/jrnl/time.py b/jrnl/time.py index 6dc9773e4..25fba0d76 100644 --- a/jrnl/time.py +++ b/jrnl/time.py @@ -1,19 +1,22 @@ from datetime import datetime -from dateutil.parser import parse as dateparse - -try: - import parsedatetime.parsedatetime_consts as pdt -except ImportError: - import parsedatetime as pdt FAKE_YEAR = 9999 DEFAULT_FUTURE = datetime(FAKE_YEAR, 12, 31, 23, 59, 59) DEFAULT_PAST = datetime(FAKE_YEAR, 1, 1, 0, 0) -consts = pdt.Constants(usePyICU=False) -consts.DOWParseStyle = -1 # "Monday" will be either today or the last Monday -CALENDAR = pdt.Calendar(consts) + +def __get_pdt_calendar(): + try: + import parsedatetime.parsedatetime_consts as pdt + except ImportError: + import parsedatetime as pdt + + consts = pdt.Constants(usePyICU=False) + consts.DOWParseStyle = -1 # "Monday" will be either today or the last Monday + calendar = pdt.Calendar(consts) + + return calendar def parse( @@ -35,6 +38,8 @@ def parse( year_present = False while not date: try: + from dateutil.parser import parse as dateparse + date = dateparse(date_str, default=default_date) if date.year == FAKE_YEAR: date = datetime(datetime.now().year, date.timetuple()[1:6]) @@ -47,7 +52,8 @@ def parse( y, m, d, H, M, S = default_date.timetuple()[:6] default_date = datetime(y, m, d - 1, H, M, S) else: - date, flag = CALENDAR.parse(date_str) + calendar = __get_pdt_calendar() + date, flag = calendar.parse(date_str) if not flag: # Oops, unparsable. try: # Try and parse this as a single year diff --git a/jrnl/upgrade.py b/jrnl/upgrade.py index 762970a11..4a6385638 100644 --- a/jrnl/upgrade.py +++ b/jrnl/upgrade.py @@ -34,12 +34,7 @@ def check_exists(path): return os.path.exists(path) -def upgrade_jrnl_if_necessary(config_path): - with open(config_path, "r", encoding="utf-8") as f: - config_file = f.read() - if not config_file.strip().startswith("{"): - return - +def upgrade_jrnl(config_path): config = util.load_config(config_path) print( diff --git a/jrnl/util.py b/jrnl/util.py index 8033306bc..5e77fd76a 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -123,6 +123,16 @@ def load_config(config_path): return yaml.load(f, Loader=yaml.FullLoader) +def is_config_json(config_path): + with open(config_path, "r", encoding="utf-8") as f: + config_file = f.read() + return config_file.strip().startswith("{") + + +def is_old_version(config_path): + return is_config_json(config_path) + + def scope_config(config, journal_name): if journal_name not in config["journals"]: return config