fix output from RawConfigParser.write and ConfigParser.write for None

values (http://bugs.python.org/issue7005)
(merged r84443 from the release27-mmaint branch, with changes to reflect
changes in Python 3)
This commit is contained in:
Fred Drake 2010-09-03 04:22:36 +00:00
parent af1e140334
commit 8844441ae6
3 changed files with 33 additions and 1 deletions

View File

@ -637,7 +637,7 @@ class RawConfigParser:
for key, value in section_items:
if key == "__name__":
continue
if value is not None:
if (value is not None) or (self._optcre == self.OPTCRE):
value = delimiter + str(value).replace('\n', '\n\t')
else:
value = ""

View File

@ -755,6 +755,34 @@ class SafeConfigParserTestCaseTrickyFile(CfgParserTestCaseClass):
with self.assertRaises(UnicodeDecodeError):
cf.read(tricky, encoding='ascii')
class Issue7005TestCase(unittest.TestCase):
"""Test output when None is set() as a value and allow_no_value == False.
http://bugs.python.org/issue7005
"""
expected_output = "[section]\noption = None\n\n"
def prepare(self, config_class):
# This is the default, but that's the point.
cp = config_class(allow_no_value=False)
cp.add_section("section")
cp.set("section", "option", None)
sio = io.StringIO()
cp.write(sio)
return sio.getvalue()
def test_none_as_value_stringified(self):
output = self.prepare(configparser.ConfigParser)
self.assertEqual(output, self.expected_output)
def test_none_as_value_stringified_raw(self):
output = self.prepare(configparser.RawConfigParser)
self.assertEqual(output, self.expected_output)
class SortedTestCase(RawConfigParserTestCase):
dict_type = SortedDict
@ -811,6 +839,7 @@ def test_main():
SafeConfigParserTestCaseNoValue,
SafeConfigParserTestCaseTrickyFile,
SortedTestCase,
Issue7005TestCase,
StrictTestCase,
CompatibleTestCase,
)

View File

@ -155,6 +155,9 @@ Extensions
Library
-------
- Issue #7005: Fixed output of None values for RawConfigParser.write and
ConfigParser.write.
- Issue #8990: array.fromstring() and array.tostring() get renamed to
frombytes() and tobytes(), respectively, to avoid confusion. Furthermore,
array.frombytes(), array.extend() as well as the array.array()