From 4fed54576c84ff64e007d73425df7c63b54a5c47 Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Sat, 11 Apr 2020 13:08:04 -0600 Subject: [PATCH] [DayOne] support moderm `plistlib` (#909) The API of the standard library's `plistlib` changed with version 3.4 of Python, and the old API is being removed in Python 3.9. In other words, the new API is supported by all version of Python we current support (3.6 to 3.8). See https://docs.python.org/3.4/library/plistlib.html for more details. --- jrnl/DayOneJournal.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/jrnl/DayOneJournal.py b/jrnl/DayOneJournal.py index 8e8b2cd0..af82333c 100644 --- a/jrnl/DayOneJournal.py +++ b/jrnl/DayOneJournal.py @@ -8,6 +8,7 @@ import re from datetime import datetime import time import fnmatch +from pathlib import Path import plistlib import pytz import uuid @@ -43,7 +44,7 @@ class DayOne(Journal.Journal): for filename in filenames: with open(filename, "rb") as plist_entry: try: - dict_entry = plistlib.readPlist(plist_entry) + dict_entry = plistlib.load(plist_entry, fmt=plistlib.FMT_XML) except self.PLIST_EXCEPTIONS: pass else: @@ -84,8 +85,10 @@ class DayOne(Journal.Journal): if not hasattr(entry, "uuid"): entry.uuid = uuid.uuid1().hex - filename = os.path.join( - self.config["journal"], "entries", entry.uuid.upper() + ".doentry" + fn = ( + Path(self.config["journal"]) + / "entries" + / (entry.uuid.upper() + ".doentry") ) entry_plist = { @@ -99,7 +102,9 @@ class DayOne(Journal.Journal): for tag in entry.tags ], } - plistlib.writePlist(entry_plist, filename) + # plistlib expects a binary object + with fn.open(mode="wb") as f: + plistlib.dump(entry_plist, f, fmt=plistlib.FMT_XML, sort_keys=False) for entry in self._deleted_entries: filename = os.path.join( self.config["journal"], "entries", entry.uuid + ".doentry"