bpo-29196: Removed old-deprecated classes Plist, Dict and _InternalDict (#488)
in the plistlib module. Dict values in the result of functions readPlist() and readPlistFromBytes() are now exact dicts.
This commit is contained in:
parent
d812eb731d
commit
edef358ed6
|
@ -133,14 +133,12 @@ The following functions are deprecated:
|
|||
This function calls :func:`load` to do the actual work, see the documentation
|
||||
of :func:`that function <load>` for an explanation of the keyword arguments.
|
||||
|
||||
.. note::
|
||||
|
||||
Dict values in the result have a ``__getattr__`` method that defers
|
||||
to ``__getitem_``. This means that you can use attribute access to
|
||||
access items of these dictionaries.
|
||||
|
||||
.. deprecated:: 3.4 Use :func:`load` instead.
|
||||
|
||||
.. versionchanged:: 3.7
|
||||
Dict values in the result are now normal dicts. You no longer can use
|
||||
attribute access to access items of these dictionaries.
|
||||
|
||||
|
||||
.. function:: writePlist(rootObject, pathOrFile)
|
||||
|
||||
|
@ -156,14 +154,12 @@ The following functions are deprecated:
|
|||
|
||||
See :func:`load` for a description of the keyword arguments.
|
||||
|
||||
.. note::
|
||||
|
||||
Dict values in the result have a ``__getattr__`` method that defers
|
||||
to ``__getitem_``. This means that you can use attribute access to
|
||||
access items of these dictionaries.
|
||||
|
||||
.. deprecated:: 3.4 Use :func:`loads` instead.
|
||||
|
||||
.. versionchanged:: 3.7
|
||||
Dict values in the result are now normal dicts. You no longer can use
|
||||
attribute access to access items of these dictionaries.
|
||||
|
||||
|
||||
.. function:: writePlistToBytes(rootObject)
|
||||
|
||||
|
@ -174,18 +170,6 @@ The following functions are deprecated:
|
|||
|
||||
The following classes are available:
|
||||
|
||||
.. class:: Dict([dict]):
|
||||
|
||||
Return an extended mapping object with the same value as dictionary
|
||||
*dict*.
|
||||
|
||||
This class is a subclass of :class:`dict` where attribute access can
|
||||
be used to access items. That is, ``aDict.key`` is the same as
|
||||
``aDict['key']`` for getting, setting and deleting items in the mapping.
|
||||
|
||||
.. deprecated:: 3.0
|
||||
|
||||
|
||||
.. class:: Data(data)
|
||||
|
||||
Return a "data" wrapper object around the bytes object *data*. This is used
|
||||
|
|
|
@ -299,6 +299,12 @@ API and Feature Removals
|
|||
longer take keyword arguments. The first argument of :func:`int` can now
|
||||
be passes only as positional argument.
|
||||
|
||||
* Removed previously deprecated in Python 2.4 classes ``Plist``, ``Dict`` and
|
||||
``_InternalDict`` in the :mod:`plistlib` module. Dict values in the result
|
||||
of functions :func:`~plistlib.readPlist` and
|
||||
:func:`~plistlib.readPlistFromBytes` are now normal dicts. You no longer
|
||||
can use attribute access to access items of these dictionaries.
|
||||
|
||||
|
||||
Porting to Python 3.7
|
||||
=====================
|
||||
|
|
|
@ -47,7 +47,7 @@ Parse Plist example:
|
|||
"""
|
||||
__all__ = [
|
||||
"readPlist", "writePlist", "readPlistFromBytes", "writePlistToBytes",
|
||||
"Plist", "Data", "Dict", "InvalidFileException", "FMT_XML", "FMT_BINARY",
|
||||
"Data", "InvalidFileException", "FMT_XML", "FMT_BINARY",
|
||||
"load", "dump", "loads", "dumps"
|
||||
]
|
||||
|
||||
|
@ -76,44 +76,6 @@ globals().update(PlistFormat.__members__)
|
|||
#
|
||||
|
||||
|
||||
class _InternalDict(dict):
|
||||
|
||||
# This class is needed while Dict is scheduled for deprecation:
|
||||
# we only need to warn when a *user* instantiates Dict or when
|
||||
# the "attribute notation for dict keys" is used.
|
||||
__slots__ = ()
|
||||
|
||||
def __getattr__(self, attr):
|
||||
try:
|
||||
value = self[attr]
|
||||
except KeyError:
|
||||
raise AttributeError(attr)
|
||||
warn("Attribute access from plist dicts is deprecated, use d[key] "
|
||||
"notation instead", DeprecationWarning, 2)
|
||||
return value
|
||||
|
||||
def __setattr__(self, attr, value):
|
||||
warn("Attribute access from plist dicts is deprecated, use d[key] "
|
||||
"notation instead", DeprecationWarning, 2)
|
||||
self[attr] = value
|
||||
|
||||
def __delattr__(self, attr):
|
||||
try:
|
||||
del self[attr]
|
||||
except KeyError:
|
||||
raise AttributeError(attr)
|
||||
warn("Attribute access from plist dicts is deprecated, use d[key] "
|
||||
"notation instead", DeprecationWarning, 2)
|
||||
|
||||
|
||||
class Dict(_InternalDict):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
warn("The plistlib.Dict class is deprecated, use builtin dict instead",
|
||||
DeprecationWarning, 2)
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _maybe_open(pathOrFile, mode):
|
||||
if isinstance(pathOrFile, str):
|
||||
|
@ -124,31 +86,6 @@ def _maybe_open(pathOrFile, mode):
|
|||
yield pathOrFile
|
||||
|
||||
|
||||
class Plist(_InternalDict):
|
||||
"""This class has been deprecated. Use dump() and load()
|
||||
functions instead, together with regular dict objects.
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
warn("The Plist class is deprecated, use the load() and "
|
||||
"dump() functions instead", DeprecationWarning, 2)
|
||||
super().__init__(**kwargs)
|
||||
|
||||
@classmethod
|
||||
def fromFile(cls, pathOrFile):
|
||||
"""Deprecated. Use the load() function instead."""
|
||||
with _maybe_open(pathOrFile, 'rb') as fp:
|
||||
value = load(fp)
|
||||
plist = cls()
|
||||
plist.update(value)
|
||||
return plist
|
||||
|
||||
def write(self, pathOrFile):
|
||||
"""Deprecated. Use the dump() function instead."""
|
||||
with _maybe_open(pathOrFile, 'wb') as fp:
|
||||
dump(self, fp)
|
||||
|
||||
|
||||
def readPlist(pathOrFile):
|
||||
"""
|
||||
Read a .plist from a path or file. pathOrFile should either
|
||||
|
@ -160,8 +97,7 @@ def readPlist(pathOrFile):
|
|||
DeprecationWarning, 2)
|
||||
|
||||
with _maybe_open(pathOrFile, 'rb') as fp:
|
||||
return load(fp, fmt=None, use_builtin_types=False,
|
||||
dict_type=_InternalDict)
|
||||
return load(fp, fmt=None, use_builtin_types=False)
|
||||
|
||||
def writePlist(value, pathOrFile):
|
||||
"""
|
||||
|
@ -184,8 +120,7 @@ def readPlistFromBytes(data):
|
|||
"""
|
||||
warn("The readPlistFromBytes function is deprecated, use loads() instead",
|
||||
DeprecationWarning, 2)
|
||||
return load(BytesIO(data), fmt=None, use_builtin_types=False,
|
||||
dict_type=_InternalDict)
|
||||
return load(BytesIO(data), fmt=None, use_builtin_types=False)
|
||||
|
||||
|
||||
def writePlistToBytes(value):
|
||||
|
|
|
@ -173,7 +173,6 @@ class TestPlistlib(unittest.TestCase):
|
|||
pl = self._create()
|
||||
data = plistlib.dumps(pl)
|
||||
pl2 = plistlib.loads(data)
|
||||
self.assertNotIsInstance(pl, plistlib._InternalDict)
|
||||
self.assertEqual(dict(pl), dict(pl2))
|
||||
data2 = plistlib.dumps(pl2)
|
||||
self.assertEqual(data, data2)
|
||||
|
@ -454,14 +453,14 @@ class TestPlistlibDeprecated(unittest.TestCase):
|
|||
'data': b'buffer',
|
||||
}
|
||||
}
|
||||
pl_out = plistlib._InternalDict({
|
||||
pl_out = {
|
||||
'key': 42,
|
||||
'sub': plistlib._InternalDict({
|
||||
'sub': {
|
||||
'key': 9,
|
||||
'alt': 'value',
|
||||
'data': plistlib.Data(b'buffer'),
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
self.addCleanup(support.unlink, support.TESTFN)
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
|
@ -499,10 +498,10 @@ class TestPlistlibDeprecated(unittest.TestCase):
|
|||
with self.assertWarns(DeprecationWarning):
|
||||
pl2 = plistlib.readPlistFromBytes(data)
|
||||
|
||||
self.assertIsInstance(pl2, plistlib._InternalDict)
|
||||
self.assertEqual(pl2, plistlib._InternalDict(
|
||||
self.assertIsInstance(pl2, dict)
|
||||
self.assertEqual(pl2, dict(
|
||||
key=42,
|
||||
sub=plistlib._InternalDict(
|
||||
sub=dict(
|
||||
key=9,
|
||||
alt='value',
|
||||
data=plistlib.Data(b'buffer'),
|
||||
|
|
|
@ -323,6 +323,11 @@ Extension Modules
|
|||
Library
|
||||
-------
|
||||
|
||||
- bpo-29196: Removed previously deprecated in Python 2.4 classes Plist, Dict
|
||||
and _InternalDict in the plistlib module. Dict values in the result of
|
||||
functions readPlist() and readPlistFromBytes() are now normal dicts. You
|
||||
no longer can use attribute access to access items of these dictionaries.
|
||||
|
||||
- bpo-9850: The :mod:`macpath` is now deprecated and will be removed
|
||||
in Python 3.8.
|
||||
|
||||
|
|
Loading…
Reference in New Issue