From 0210194d48569ce136bad4d324ade03767356905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Mon, 31 Dec 2012 13:55:11 +0100 Subject: Fixes `__setitem__` on parser['DEFAULT'] reported in issue #16820. --- Lib/configparser.py | 5 ++++- Lib/test/test_configparser.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Lib/configparser.py b/Lib/configparser.py index be1c9f3..eac508e 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -960,7 +960,10 @@ class RawConfigParser(MutableMapping): # XXX this is not atomic if read_dict fails at any point. Then again, # no update method in configparser is atomic in this implementation. - self.remove_section(key) + if key == self.default_section: + self._defaults.clear() + else: + self.remove_section(key) self.read_dict({key: value}) def __delitem__(self, key): diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index 37dee74..3823641 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -797,6 +797,34 @@ boolean {0[0]} NO self.assertEqual(set(cf.sections()), set()) self.assertEqual(set(cf[self.default_section].keys()), {'foo'}) + def test_setitem(self): + cf = self.fromstring(""" + [section1] + name1 {0[0]} value1 + [section2] + name2 {0[0]} value2 + [section3] + name3 {0[0]} value3 + """.format(self.delimiters), defaults={"nameD": "valueD"}) + self.assertEqual(set(cf['section1'].keys()), {'name1', 'named'}) + self.assertEqual(set(cf['section2'].keys()), {'name2', 'named'}) + self.assertEqual(set(cf['section3'].keys()), {'name3', 'named'}) + self.assertEqual(cf['section1']['name1'], 'value1') + self.assertEqual(cf['section2']['name2'], 'value2') + self.assertEqual(cf['section3']['name3'], 'value3') + cf['section2'] = {'name22': 'value22'} + self.assertEqual(set(cf['section2'].keys()), {'name22', 'named'}) + self.assertEqual(cf['section2']['name22'], 'value22') + self.assertNotIn('name2', cf['section2']) + cf['section3'] = {} + self.assertEqual(set(cf['section3'].keys()), {'named'}) + self.assertNotIn('name3', cf['section3']) + cf[self.default_section] = {} + self.assertEqual(set(cf[self.default_section].keys()), set()) + self.assertEqual(set(cf['section1'].keys()), {'name1'}) + self.assertEqual(set(cf['section2'].keys()), {'name22'}) + self.assertEqual(set(cf['section3'].keys()), set()) + class StrictTestCase(BasicTestCase): config_class = configparser.RawConfigParser -- cgit v0.12