]> granicus.if.org Git - python/commitdiff
bpo-33251: Prevent ConfigParser.items returning items present in vars. (#6446)
authorChris Bradbury <chris@binaryspanner.com>
Mon, 23 Apr 2018 19:16:17 +0000 (20:16 +0100)
committerŁukasz Langa <lukasz@langa.pl>
Mon, 23 Apr 2018 19:16:17 +0000 (12:16 -0700)
* bpo-33251: ConfigParser.items no longer returns items present in vars.

Documentation for `ConfigParser.items()` states:
'Items present in vars no longer appear in the result.'

This fix aligns behaviour to that specified in the documentation.

Lib/configparser.py
Lib/test/test_configparser.py
Misc/NEWS.d/next/Library/2018-04-23-18-25-36.bpo-33251.C_K-J9.rst [new file with mode: 0644]

index 33dc9b9046f102a414b41a26389e5306b2107330..a681d3990e7261ce1d9e73450a97db5bcd15f464 100644 (file)
@@ -846,6 +846,7 @@ class RawConfigParser(MutableMapping):
         except KeyError:
             if section != self.default_section:
                 raise NoSectionError(section)
+        orig_keys = list(d.keys())
         # Update with the entry specific variables
         if vars:
             for key, value in vars.items():
@@ -854,7 +855,7 @@ class RawConfigParser(MutableMapping):
             section, option, d[option], d)
         if raw:
             value_getter = lambda option: d[option]
-        return [(option, value_getter(option)) for option in d.keys()]
+        return [(option, value_getter(option)) for option in orig_keys]
 
     def popitem(self):
         """Remove a section from the parser and return it as
index 4d07203b9dac289732da580a88e10262266e7cf1..87b811f09b6ead75208c99691a632742325e9a23 100644 (file)
@@ -915,8 +915,7 @@ class ConfigParserTestCase(BasicTestCase, unittest.TestCase):
         self.check_items_config([('default', '<default>'),
                                  ('getdefault', '|<default>|'),
                                  ('key', '|value|'),
-                                 ('name', 'value'),
-                                 ('value', 'value')])
+                                 ('name', 'value')])
 
     def test_safe_interpolation(self):
         # See http://www.python.org/sf/511737
@@ -1093,8 +1092,7 @@ class RawConfigParserTestCase(BasicTestCase, unittest.TestCase):
         self.check_items_config([('default', '<default>'),
                                  ('getdefault', '|%(default)s|'),
                                  ('key', '|%(name)s|'),
-                                 ('name', '%(value)s'),
-                                 ('value', 'value')])
+                                 ('name', '%(value)s')])
 
     def test_set_nonstring_types(self):
         cf = self.newconfig()
diff --git a/Misc/NEWS.d/next/Library/2018-04-23-18-25-36.bpo-33251.C_K-J9.rst b/Misc/NEWS.d/next/Library/2018-04-23-18-25-36.bpo-33251.C_K-J9.rst
new file mode 100644 (file)
index 0000000..fc6861f
--- /dev/null
@@ -0,0 +1,2 @@
+`ConfigParser.items()` was fixed so that key-value pairs passed in via `vars`
+are not included in the resulting output.