Issue #21888: plistlib's load() and loads() now work if the fmt parameter is
specified.
This commit is contained in:
commit
37f50e0c6b
|
@ -984,18 +984,16 @@ def load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict):
|
|||
fp.seek(0)
|
||||
for info in _FORMATS.values():
|
||||
if info['detect'](header):
|
||||
p = info['parser'](
|
||||
use_builtin_types=use_builtin_types,
|
||||
dict_type=dict_type,
|
||||
)
|
||||
P = info['parser']
|
||||
break
|
||||
|
||||
else:
|
||||
raise InvalidFileException()
|
||||
|
||||
else:
|
||||
p = _FORMATS[fmt]['parser'](use_builtin_types=use_builtin_types)
|
||||
P = _FORMATS[fmt]['parser']
|
||||
|
||||
p = P(use_builtin_types=use_builtin_types, dict_type=dict_type)
|
||||
return p.parse(fp)
|
||||
|
||||
|
||||
|
|
|
@ -207,6 +207,9 @@ class TestPlistlib(unittest.TestCase):
|
|||
for fmt in ALL_FORMATS:
|
||||
with self.subTest(fmt=fmt):
|
||||
pl = self._create(fmt=fmt)
|
||||
pl2 = plistlib.loads(TESTDATA[fmt], fmt=fmt)
|
||||
self.assertEqual(dict(pl), dict(pl2),
|
||||
"generated data was not identical to Apple's output")
|
||||
pl2 = plistlib.loads(TESTDATA[fmt])
|
||||
self.assertEqual(dict(pl), dict(pl2),
|
||||
"generated data was not identical to Apple's output")
|
||||
|
@ -217,6 +220,8 @@ class TestPlistlib(unittest.TestCase):
|
|||
b = BytesIO()
|
||||
pl = self._create(fmt=fmt)
|
||||
plistlib.dump(pl, b, fmt=fmt)
|
||||
pl2 = plistlib.load(BytesIO(b.getvalue()), fmt=fmt)
|
||||
self.assertEqual(dict(pl), dict(pl2))
|
||||
pl2 = plistlib.load(BytesIO(b.getvalue()))
|
||||
self.assertEqual(dict(pl), dict(pl2))
|
||||
|
||||
|
|
|
@ -108,6 +108,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #21888: plistlib's load() and loads() now work if the fmt parameter is
|
||||
specified.
|
||||
|
||||
- Issue #22032: __qualname__ instead of __name__ is now always used to format
|
||||
fully qualified class names of Python implemented classes.
|
||||
|
||||
|
|
Loading…
Reference in New Issue