Speed up jrnl by 10%, improve slow imports (#959)

* Improve slow imports
* Fix codestyle
* fix twice version validation
* Fix a syntax mistake
This commit is contained in:
wotgl 2020-05-28 00:11:40 +03:00 committed by GitHub
parent ef5f0a8331
commit 63df95f2ea
5 changed files with 47 additions and 32 deletions

View file

@ -27,7 +27,6 @@ import sys
import jrnl import jrnl
from . import install, plugins, util from . import install, plugins, util
from .EncryptedJournal import EncryptedJournal
from .Journal import PlainJournal, open_journal from .Journal import PlainJournal, open_journal
from .util import ERROR_COLOR, RESET_COLOR, UserAbort from .util import ERROR_COLOR, RESET_COLOR, UserAbort
@ -245,6 +244,8 @@ def guess_mode(args, config):
def encrypt(journal, filename=None): def encrypt(journal, filename=None):
""" Encrypt into new file. If filename is not set, we encrypt the journal file itself. """ """ Encrypt into new file. If filename is not set, we encrypt the journal file itself. """
from .EncryptedJournal import EncryptedJournal
journal.config["encrypt"] = True journal.config["encrypt"] = True
new_journal = EncryptedJournal.from_journal(journal) new_journal = EncryptedJournal.from_journal(journal)

View file

@ -8,7 +8,7 @@ import sys
import xdg.BaseDirectory import xdg.BaseDirectory
import yaml import yaml
from . import __version__, upgrade, util from . import __version__, util
from .util import UserAbort, verify_config from .util import UserAbort, verify_config
if "win32" not in sys.platform: if "win32" not in sys.platform:
@ -96,20 +96,23 @@ def load_or_install_jrnl():
log.debug("Reading configuration from file %s", config_path) log.debug("Reading configuration from file %s", config_path)
config = util.load_config(config_path) config = util.load_config(config_path)
try: if util.is_old_version(config_path):
upgrade.upgrade_jrnl_if_necessary(config_path) from . import upgrade
except upgrade.UpgradeValidationException:
print("Aborting upgrade.", file=sys.stderr) try:
print( upgrade.upgrade_jrnl(config_path)
"Please tell us about this problem at the following URL:", except upgrade.UpgradeValidationException:
file=sys.stderr, print("Aborting upgrade.", file=sys.stderr)
) print(
print( "Please tell us about this problem at the following URL:",
"https://github.com/jrnl-org/jrnl/issues/new?title=UpgradeValidationException", file=sys.stderr,
file=sys.stderr, )
) print(
print("Exiting.", file=sys.stderr) "https://github.com/jrnl-org/jrnl/issues/new?title=UpgradeValidationException",
sys.exit(1) file=sys.stderr,
)
print("Exiting.", file=sys.stderr)
sys.exit(1)
upgrade_config(config) upgrade_config(config)
verify_config(config) verify_config(config)

View file

@ -1,19 +1,22 @@
from datetime import datetime 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 FAKE_YEAR = 9999
DEFAULT_FUTURE = datetime(FAKE_YEAR, 12, 31, 23, 59, 59) DEFAULT_FUTURE = datetime(FAKE_YEAR, 12, 31, 23, 59, 59)
DEFAULT_PAST = datetime(FAKE_YEAR, 1, 1, 0, 0) 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 def __get_pdt_calendar():
CALENDAR = pdt.Calendar(consts) 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( def parse(
@ -35,6 +38,8 @@ def parse(
year_present = False year_present = False
while not date: while not date:
try: try:
from dateutil.parser import parse as dateparse
date = dateparse(date_str, default=default_date) date = dateparse(date_str, default=default_date)
if date.year == FAKE_YEAR: if date.year == FAKE_YEAR:
date = datetime(datetime.now().year, date.timetuple()[1:6]) 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] y, m, d, H, M, S = default_date.timetuple()[:6]
default_date = datetime(y, m, d - 1, H, M, S) default_date = datetime(y, m, d - 1, H, M, S)
else: else:
date, flag = CALENDAR.parse(date_str) calendar = __get_pdt_calendar()
date, flag = calendar.parse(date_str)
if not flag: # Oops, unparsable. if not flag: # Oops, unparsable.
try: # Try and parse this as a single year try: # Try and parse this as a single year

View file

@ -34,12 +34,7 @@ def check_exists(path):
return os.path.exists(path) return os.path.exists(path)
def upgrade_jrnl_if_necessary(config_path): def upgrade_jrnl(config_path):
with open(config_path, "r", encoding="utf-8") as f:
config_file = f.read()
if not config_file.strip().startswith("{"):
return
config = util.load_config(config_path) config = util.load_config(config_path)
print( print(

View file

@ -124,6 +124,16 @@ def load_config(config_path):
return yaml.load(f, Loader=yaml.FullLoader) 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): def scope_config(config, journal_name):
if journal_name not in config["journals"]: if journal_name not in config["journals"]:
return config return config