summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Bradbury <chris@binaryspanner.com>2018-04-23 19:16:17 (GMT)
committerƁukasz Langa <lukasz@langa.pl>2018-04-23 19:16:17 (GMT)
commit1d4a733cceee237f0850b7887c2945dee707da27 (patch)
tree7669a141d360b6a19d2d51ecf202701468614cc9
parent25038ecfb665bef641abf8cb61afff7505b0e008 (diff)
downloadcpython-1d4a733cceee237f0850b7887c2945dee707da27.zip
cpython-1d4a733cceee237f0850b7887c2945dee707da27.tar.gz
cpython-1d4a733cceee237f0850b7887c2945dee707da27.tar.bz2
bpo-33251: Prevent ConfigParser.items returning items present in vars. (#6446)
* 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.
-rw-r--r--Lib/configparser.py3
-rw-r--r--Lib/test/test_configparser.py6
-rw-r--r--Misc/NEWS.d/next/Library/2018-04-23-18-25-36.bpo-33251.C_K-J9.rst2
3 files changed, 6 insertions, 5 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py
index 33dc9b9..a681d39 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -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
diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py
index 4d07203..87b811f 100644
--- a/Lib/test/test_configparser.py
+++ b/Lib/test/test_configparser.py
@@ -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
index 0000000..fc6861f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-23-18-25-36.bpo-33251.C_K-J9.rst
@@ -0,0 +1,2 @@
+`ConfigParser.items()` was fixed so that key-value pairs passed in via `vars`
+are not included in the resulting output.