Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Doc/library/plistlib.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ top level object is a dictionary.
To write out and to parse a plist file, use the :func:`dump` and
:func:`load` functions.

To work with plist data in bytes objects, use :func:`dumps`
To work with plist data in bytes or string objects, use :func:`dumps`
and :func:`loads`.

Values can be strings, integers, floats, booleans, tuples, lists, dictionaries
Expand Down Expand Up @@ -82,8 +82,8 @@ This module defines the following functions:

.. function:: loads(data, *, fmt=None, dict_type=dict)

Load a plist from a bytes object. See :func:`load` for an explanation of
the keyword arguments.
Load a plist from a bytes or string object. See :func:`load` for an
explanation of the keyword arguments.

.. versionadded:: 3.4

Expand Down
2 changes: 2 additions & 0 deletions Lib/plistlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,8 @@ def loads(value, *, fmt=None, dict_type=dict):
"""Read a .plist file from a bytes object.
Return the unpacked root object (which usually is a dictionary).
"""
if type(value) == str:
value = value.encode()
fp = BytesIO(value)
return load(fp, fmt=fmt, dict_type=dict_type)

Expand Down
8 changes: 8 additions & 0 deletions Lib/test/test_plistlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,14 @@ def test_bytes(self):
data2 = plistlib.dumps(pl2)
self.assertEqual(data, data2)

def test_loads_str(self):
pl = self._create()
b = plistlib.dumps(pl)
s = b.decode()
self.assertEqual(type(s), str)
pl2 = plistlib.loads(s)
self.assertEqual(pl, pl2)

def test_indentation_array(self):
data = [[[[[[[[{'test': b'aaaaaa'}]]]]]]]]
self.assertEqual(plistlib.loads(plistlib.dumps(data)), data)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Support loads ``str`` in :func:`plistlib.loads`.