mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-23835: Restore legacy defaults= behavior for RawConfigParser (#3191)
The fix for bpo-23835 fixed ConfigParser behavior in defaults= handling. Unfortunately, it caused a backwards compatibility regression with RawConfigParser objects which allow for non-string values. This commit restores the legacy behavior for RawConfigParser only.
This commit is contained in:
parent
a6296d34a4
commit
a5fab17fc1
3 changed files with 34 additions and 12 deletions
|
@ -855,15 +855,6 @@ boolean {0[0]} NO
|
|||
self.assertEqual(cf.get('DEFAULT', 'test'), 'test')
|
||||
self.assertEqual(cf['DEFAULT']['test'], 'test')
|
||||
|
||||
def test_defaults_keyword(self):
|
||||
# test that bpo-23835 is fixed
|
||||
cf = self.newconfig(defaults={1: 2.4})
|
||||
self.assertEqual(cf[self.default_section]['1'], '2.4')
|
||||
self.assertAlmostEqual(cf[self.default_section].getfloat('1'), 2.4)
|
||||
cf = self.newconfig(defaults={"A": 5.2})
|
||||
self.assertEqual(cf[self.default_section]['a'], '5.2')
|
||||
self.assertAlmostEqual(cf[self.default_section].getfloat('a'), 5.2)
|
||||
|
||||
|
||||
class StrictTestCase(BasicTestCase, unittest.TestCase):
|
||||
config_class = configparser.RawConfigParser
|
||||
|
@ -959,6 +950,15 @@ class ConfigParserTestCase(BasicTestCase, unittest.TestCase):
|
|||
cf = self.newconfig()
|
||||
self.assertRaises(ValueError, cf.add_section, self.default_section)
|
||||
|
||||
def test_defaults_keyword(self):
|
||||
"""bpo-23835 fix for ConfigParser"""
|
||||
cf = self.newconfig(defaults={1: 2.4})
|
||||
self.assertEqual(cf[self.default_section]['1'], '2.4')
|
||||
self.assertAlmostEqual(cf[self.default_section].getfloat('1'), 2.4)
|
||||
cf = self.newconfig(defaults={"A": 5.2})
|
||||
self.assertEqual(cf[self.default_section]['a'], '5.2')
|
||||
self.assertAlmostEqual(cf[self.default_section].getfloat('a'), 5.2)
|
||||
|
||||
|
||||
class ConfigParserTestCaseNoInterpolation(BasicTestCase, unittest.TestCase):
|
||||
config_class = configparser.ConfigParser
|
||||
|
@ -1099,6 +1099,15 @@ class RawConfigParserTestCase(BasicTestCase, unittest.TestCase):
|
|||
cf.set('non-string', 1, 1)
|
||||
self.assertEqual(cf.get('non-string', 1), 1)
|
||||
|
||||
def test_defaults_keyword(self):
|
||||
"""bpo-23835 legacy behavior for RawConfigParser"""
|
||||
with self.assertRaises(AttributeError) as ctx:
|
||||
self.newconfig(defaults={1: 2.4})
|
||||
err = ctx.exception
|
||||
self.assertEqual(str(err), "'int' object has no attribute 'lower'")
|
||||
cf = self.newconfig(defaults={"A": 5.2})
|
||||
self.assertAlmostEqual(cf[self.default_section]['a'], 5.2)
|
||||
|
||||
|
||||
class RawConfigParserTestCaseNonStandardDelimiters(RawConfigParserTestCase):
|
||||
delimiters = (':=', '$')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue