summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2010-09-03 04:22:36 (GMT)
committerFred Drake <fdrake@acm.org>2010-09-03 04:22:36 (GMT)
commit8844441ae68358c832e04d8b48ba7b035f67d9bf (patch)
tree464decec5e4b8669c0e76edaaac96d4f36caaaea /Lib
parentaf1e140334e090583651670193d1c310f29bf90e (diff)
downloadcpython-8844441ae68358c832e04d8b48ba7b035f67d9bf.zip
cpython-8844441ae68358c832e04d8b48ba7b035f67d9bf.tar.gz
cpython-8844441ae68358c832e04d8b48ba7b035f67d9bf.tar.bz2
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)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/configparser.py2
-rw-r--r--Lib/test/test_cfgparser.py29
2 files changed, 30 insertions, 1 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py
index eb29b02..fb39ac3 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -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 = ""
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index f43d1d7..a20678d 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -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,
)