bpo-23835: Enforce that configparser defaults are strings (#2558)

* Enforce that configparser defaults are strings
* Update test_configparser.py
This commit is contained in:
James Tocknell 2017-08-22 08:46:30 +10:00 committed by Łukasz Langa
parent 9a83f651f3
commit 44e6ad8734
2 changed files with 11 additions and 3 deletions

View file

@ -610,9 +610,6 @@ def __init__(self, defaults=None, dict_type=_default_dict,
self._converters = ConverterMapping(self)
self._proxies = self._dict()
self._proxies[default_section] = SectionProxy(self, default_section)
if defaults:
for key, value in defaults.items():
self._defaults[self.optionxform(key)] = value
self._delimiters = tuple(delimiters)
if delimiters == ('=', ':'):
self._optcre = self.OPTCRE_NV if allow_no_value else self.OPTCRE
@ -637,6 +634,8 @@ def __init__(self, defaults=None, dict_type=_default_dict,
self._interpolation = Interpolation()
if converters is not _UNSET:
self._converters.update(converters)
if defaults:
self.read_dict({default_section: defaults})
def defaults(self):
return self._defaults

View file

@ -855,6 +855,15 @@ def test_invalid_multiline_value(self):
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