mirror of
git://github.com/kovidgoyal/calibre.git
synced 2026-05-09 03:53:51 +02:00
py3: port plistlib
This commit is contained in:
parent
e0205790b9
commit
ce007d8bab
3 changed files with 27 additions and 10 deletions
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
import optparse
|
||||
import os
|
||||
import plistlib
|
||||
from copy import deepcopy
|
||||
|
||||
from calibre.constants import (
|
||||
|
|
@ -22,7 +21,6 @@
|
|||
tweaks, from_json, to_json
|
||||
)
|
||||
from calibre.utils.lock import ExclusiveFile
|
||||
from polyglot.builtins import string_or_bytes
|
||||
|
||||
|
||||
# optparse uses gettext.gettext instead of _ from builtins, so we
|
||||
|
|
@ -335,10 +333,12 @@ def touch(self):
|
|||
pass
|
||||
|
||||
def raw_to_object(self, raw):
|
||||
return plistlib.readPlistFromString(raw)
|
||||
from polyglot.plistlib import loads
|
||||
return loads(raw)
|
||||
|
||||
def to_raw(self):
|
||||
return plistlib.writePlistToString(self)
|
||||
from polyglot.plistlib import dumps
|
||||
return dumps(self)
|
||||
|
||||
def decouple(self, prefix):
|
||||
self.file_path = os.path.join(os.path.dirname(self.file_path), prefix + os.path.basename(self.file_path))
|
||||
|
|
@ -362,26 +362,29 @@ def refresh(self, clear_current=True):
|
|||
self.update(d)
|
||||
|
||||
def __getitem__(self, key):
|
||||
from polyglot.plistlib import Data
|
||||
try:
|
||||
ans = dict.__getitem__(self, key)
|
||||
if isinstance(ans, plistlib.Data):
|
||||
if isinstance(ans, Data):
|
||||
ans = ans.data
|
||||
return ans
|
||||
except KeyError:
|
||||
return self.defaults.get(key, None)
|
||||
|
||||
def get(self, key, default=None):
|
||||
from polyglot.plistlib import Data
|
||||
try:
|
||||
ans = dict.__getitem__(self, key)
|
||||
if isinstance(ans, plistlib.Data):
|
||||
if isinstance(ans, Data):
|
||||
ans = ans.data
|
||||
return ans
|
||||
except KeyError:
|
||||
return self.defaults.get(key, default)
|
||||
|
||||
def __setitem__(self, key, val):
|
||||
if isinstance(val, string_or_bytes):
|
||||
val = plistlib.Data(val)
|
||||
from polyglot.plistlib import Data
|
||||
if isinstance(val, bytes):
|
||||
val = Data(val)
|
||||
dict.__setitem__(self, key, val)
|
||||
self.commit()
|
||||
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@
|
|||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
|
||||
import os, plistlib, re, mimetypes, subprocess
|
||||
import os, re, mimetypes, subprocess
|
||||
from collections import defaultdict
|
||||
|
||||
from calibre.ptempfile import TemporaryDirectory
|
||||
from calibre.utils.icu import numeric_sort_key
|
||||
from polyglot.builtins import iteritems, unicode_type, string_or_bytes
|
||||
from polyglot.plistlib import loads
|
||||
|
||||
application_locations = ('/Applications', '~/Applications', '~/Desktop')
|
||||
|
||||
|
|
@ -266,7 +267,8 @@ def get_bundle_data(path):
|
|||
'path': path,
|
||||
}
|
||||
try:
|
||||
plist = plistlib.readPlist(info)
|
||||
with open(info, 'rb') as f:
|
||||
plist = loads(f.read())
|
||||
except Exception:
|
||||
return None
|
||||
ans['name'] = plist.get('CFBundleDisplayName') or plist.get('CFBundleName') or ans['name']
|
||||
|
|
|
|||
12
src/polyglot/plistlib.py
Normal file
12
src/polyglot/plistlib.py
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python2
|
||||
# vim:fileencoding=utf-8
|
||||
# License: GPL v3 Copyright: 2019, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
from polyglot.builtins import is_py3
|
||||
|
||||
if is_py3:
|
||||
from plistlib import loads, dumps, Data # noqa
|
||||
else:
|
||||
from plistlib import readPlistFromString as loads, writePlistToString as dumps, Data # noqa
|
||||
Loading…
Reference in a new issue