[Python-checkins] cpython (3.4): Issue #21888: plistlib's load() and loads() now work if the fmt parameter is

serhiy.storchaka python-checkins at python.org
Wed Jul 23 17:50:31 CEST 2014


http://hg.python.org/cpython/rev/09746dc1a3b4
changeset:   91779:09746dc1a3b4
branch:      3.4
parent:      91777:825137d0d4ca
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed Jul 23 18:49:31 2014 +0300
summary:
  Issue #21888: plistlib's load() and loads() now work if the fmt parameter is
specified.

files:
  Lib/plistlib.py           |  8 +++-----
  Lib/test/test_plistlib.py |  5 +++++
  Misc/NEWS                 |  3 +++
  3 files changed, 11 insertions(+), 5 deletions(-)


diff --git a/Lib/plistlib.py b/Lib/plistlib.py
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -984,18 +984,16 @@
         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)
 
 
diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py
--- a/Lib/test/test_plistlib.py
+++ b/Lib/test/test_plistlib.py
@@ -207,6 +207,9 @@
         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 @@
                 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))
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@
 Library
 -------
 
+- Issue #21888: plistlib's load() and loads() now work if the fmt parameter is
+  specified.
+
 - Issue #21044: tarfile.open() now handles fileobj with an integer 'name'
   attribute.  Based on patch by Antoine Pietri.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list