diff options
author | Berker Peksag <berker.peksag@gmail.com> | 2016-03-06 14:50:44 (GMT) |
---|---|---|
committer | Berker Peksag <berker.peksag@gmail.com> | 2016-03-06 14:50:44 (GMT) |
commit | d07a1cb53b3d5b3b68b92207f308b6bfb9235a33 (patch) | |
tree | 942748d28e820de56f73df8e6c58d2934a0c7b63 | |
parent | 48238c7e373aed6bf0f246b6c0887827397ae5ce (diff) | |
parent | d66dd5ce68cbf4a33c385439d5eeb2bff4e860f1 (diff) | |
download | cpython-d07a1cb53b3d5b3b68b92207f308b6bfb9235a33.zip cpython-d07a1cb53b3d5b3b68b92207f308b6bfb9235a33.tar.gz cpython-d07a1cb53b3d5b3b68b92207f308b6bfb9235a33.tar.bz2 |
Issue #26489: Add dictionary unpacking support to Tools/parser/unparse.py
Patch by Guo Ci Teo.
-rw-r--r-- | Lib/test/test_tools/test_unparse.py | 5 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Tools/parser/unparse.py | 15 |
3 files changed, 20 insertions, 3 deletions
diff --git a/Lib/test/test_tools/test_unparse.py b/Lib/test/test_tools/test_unparse.py index 4b47916..d91ade9 100644 --- a/Lib/test/test_tools/test_unparse.py +++ b/Lib/test/test_tools/test_unparse.py @@ -259,6 +259,11 @@ class UnparseTestCase(ASTTestCase): def test_with_two_items(self): self.check_roundtrip(with_two_items) + def test_dict_unpacking_in_dict(self): + # See issue 26489 + self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""") + self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""") + class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test.""" @@ -828,6 +828,9 @@ Windows Tools/Demos ----------- +- Issue #26489: Add dictionary unpacking support to Tools/parser/unparse.py. + Patch by Guo Ci Teo. + - Issue #26316: Fix variable name typo in Argument Clinic. - Issue #25440: Fix output of python-config --extension-suffix. diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py index 35ebc66..7203057 100644 --- a/Tools/parser/unparse.py +++ b/Tools/parser/unparse.py @@ -456,12 +456,21 @@ class Unparser: def _Dict(self, t): self.write("{") - def write_pair(pair): - (k, v) = pair + def write_key_value_pair(k, v): self.dispatch(k) self.write(": ") self.dispatch(v) - interleave(lambda: self.write(", "), write_pair, zip(t.keys, t.values)) + + def write_item(item): + k, v = item + if k is None: + # for dictionary unpacking operator in dicts {**{'y': 2}} + # see PEP 448 for details + self.write("**") + self.dispatch(v) + else: + write_key_value_pair(k, v) + interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values)) self.write("}") def _Tuple(self, t): |