Skip to content

Commit

Permalink
[DayOne] support moderm plistlib
Browse files Browse the repository at this point in the history
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.

This should (hopefully) allow our Python 3.9 tests to pass.
  • Loading branch information
MinchinWeb committed Apr 7, 2020
1 parent 9215dc5 commit 4678432
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions jrnl/DayOneJournal.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from datetime import datetime
import time
import fnmatch
from pathlib import Path
import plistlib
import pytz
import uuid
Expand Down Expand Up @@ -43,7 +44,7 @@ def open(self):
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:
Expand Down Expand Up @@ -84,8 +85,10 @@ def write(self):
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 = {
Expand All @@ -99,7 +102,9 @@ def write(self):
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"
Expand Down

0 comments on commit 4678432

Please sign in to comment.