]> granicus.if.org Git - python/commitdiff
Fixes `__setitem__` on parser['DEFAULT'] reported in issue #16820.
authorŁukasz Langa <lukasz@langa.pl>
Mon, 31 Dec 2012 12:55:11 +0000 (13:55 +0100)
committerŁukasz Langa <lukasz@langa.pl>
Mon, 31 Dec 2012 12:55:11 +0000 (13:55 +0100)
Lib/configparser.py
Lib/test/test_configparser.py

index be1c9f35da4753967a037d131abe944cfc4934d1..eac508e41245b64bd6cf38ddce5fce0e0cd3ffa3 100644 (file)
@@ -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):
index 37dee744d19ec5bd3961f4d99ff900bb12a8e5b0..3823641f56e53867d9a5d6813646fbac1a9b4061 100644 (file)
@@ -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