changeset: 100433:a34428aff42d branch: 3.5 parent: 100430:22eab50cb585 user: Berker Peksag date: Sun Mar 06 16:50:15 2016 +0200 files: Lib/test/test_tools/test_unparse.py Misc/NEWS Tools/parser/unparse.py description: Issue #26489: Add dictionary unpacking support to Tools/parser/unparse.py Patch by Guo Ci Teo. diff -r 22eab50cb585 -r a34428aff42d Lib/test/test_tools/test_unparse.py --- a/Lib/test/test_tools/test_unparse.py Sun Mar 06 16:16:40 2016 +0200 +++ b/Lib/test/test_tools/test_unparse.py Sun Mar 06 16:50:15 2016 +0200 @@ -250,6 +250,11 @@ 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.""" diff -r 22eab50cb585 -r a34428aff42d Misc/NEWS --- a/Misc/NEWS Sun Mar 06 16:16:40 2016 +0200 +++ b/Misc/NEWS Sun Mar 06 16:50:15 2016 +0200 @@ -328,6 +328,9 @@ 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. diff -r 22eab50cb585 -r a34428aff42d Tools/parser/unparse.py --- a/Tools/parser/unparse.py Sun Mar 06 16:16:40 2016 +0200 +++ b/Tools/parser/unparse.py Sun Mar 06 16:50:15 2016 +0200 @@ -393,12 +393,21 @@ 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):