.. method:: read_file(f, source=None)
Read and parse configuration data from *f* which must be an iterable
- yielding Unicode strings (for example any file object).
+ yielding Unicode strings (for example files opened in text mode).
Optional argument *source* specifies the name of the file being read. If
not given and *f* has a :attr:`name` attribute, that is used for
.. versionadded:: 3.2
Replaces :meth:`readfp`.
- .. note::
-
- Prior to Python 3.2, :meth:`readfp` consumed lines from the file-like
- argument by calling its :meth:`~file.readline` method. For existing code
- calling :meth:`readfp` with arguments which don't support iteration,
- the following generator may be used as a wrapper around the file-like
- object::
-
- def readline_generator(f):
- line = f.readline()
- while line != '':
- yield line
- line = f.readline()
-
- Before::
-
- parser.readfp(f)
-
- After::
-
- parser.read_file(readline_generator(f))
-
.. method:: read_string(string, source='<string>')
Parse configuration data from a string.
.. deprecated:: 3.2
Use :meth:`read_file` instead.
+ .. versionchanged:: 3.2
+ :meth:`readfp` now iterates on *f* instead of calling ``f.readline()``.
+
+ For existing code calling :meth:`readfp` with arguments which don't
+ support iteration, the following generator may be used as a wrapper
+ around the file-like object::
+
+ def readline_generator(f):
+ line = f.readline()
+ while line:
+ yield line
+ line = f.readline()
+
+ Instead of ``parser.readfp(f)`` use
+ ``parser.read_file(readline_generator(f))``.
+
.. data:: MAX_INTERPOLATION_DEPTH
def readline_generator(f):
"""As advised in Doc/library/configparser.rst."""
line = f.readline()
- while line != '':
+ while line:
yield line
line = f.readline()
parser = configparser.ConfigParser()
with open(file_path) as f:
parser.read_file(f)
- self.assertTrue("Foo Bar" in parser)
- self.assertTrue("foo" in parser["Foo Bar"])
+ self.assertIn("Foo Bar", parser)
+ self.assertIn("foo", parser["Foo Bar"])
self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
def test_iterable(self):
foo=newbar""").strip().split('\n')
parser = configparser.ConfigParser()
parser.read_file(lines)
- self.assertTrue("Foo Bar" in parser)
- self.assertTrue("foo" in parser["Foo Bar"])
+ self.assertIn("Foo Bar", parser)
+ self.assertIn("foo", parser["Foo Bar"])
self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
def test_readline_generator(self):
with self.assertRaises(TypeError):
parser.read_file(FakeFile())
parser.read_file(readline_generator(FakeFile()))
- self.assertTrue("Foo Bar" in parser)
- self.assertTrue("foo" in parser["Foo Bar"])
+ self.assertIn("Foo Bar", parser)
+ self.assertIn("foo", parser["Foo Bar"])
self.assertEqual(parser["Foo Bar"]["foo"], "newbar")