2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
:mod:`ConfigParser` --- Configuration file parser
|
|
|
|
=================================================
|
|
|
|
|
|
|
|
.. module:: ConfigParser
|
|
|
|
:synopsis: Configuration file parser.
|
|
|
|
.. moduleauthor:: Ken Manheimer <klm@zope.com>
|
|
|
|
.. moduleauthor:: Barry Warsaw <bwarsaw@python.org>
|
|
|
|
.. moduleauthor:: Eric S. Raymond <esr@thyrsus.com>
|
|
|
|
.. sectionauthor:: Christopher G. Petrilli <petrilli@amber.org>
|
|
|
|
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
pair: .ini; file
|
|
|
|
pair: configuration; file
|
|
|
|
single: ini file
|
|
|
|
single: Windows ini file
|
|
|
|
|
|
|
|
This module defines the class :class:`ConfigParser`. The :class:`ConfigParser`
|
|
|
|
class implements a basic configuration file parser language which provides a
|
|
|
|
structure similar to what you would find on Microsoft Windows INI files. You
|
|
|
|
can use this to write Python programs which can be customized by end users
|
|
|
|
easily.
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
This library does *not* interpret or write the value-type prefixes used in the
|
|
|
|
Windows Registry extended version of INI syntax.
|
|
|
|
|
|
|
|
The configuration file consists of sections, led by a ``[section]`` header and
|
|
|
|
followed by ``name: value`` entries, with continuations in the style of
|
|
|
|
:rfc:`822`; ``name=value`` is also accepted. Note that leading whitespace is
|
|
|
|
removed from values. The optional values can contain format strings which refer
|
|
|
|
to other values in the same section, or values in a special ``DEFAULT`` section.
|
|
|
|
Additional defaults can be provided on initialization and retrieval. Lines
|
|
|
|
beginning with ``'#'`` or ``';'`` are ignored and may be used to provide
|
|
|
|
comments.
|
|
|
|
|
|
|
|
For example::
|
|
|
|
|
|
|
|
[My Section]
|
|
|
|
foodir: %(dir)s/whatever
|
|
|
|
dir=frob
|
|
|
|
|
|
|
|
would resolve the ``%(dir)s`` to the value of ``dir`` (``frob`` in this case).
|
|
|
|
All reference expansions are done on demand.
|
|
|
|
|
|
|
|
Default values can be specified by passing them into the :class:`ConfigParser`
|
|
|
|
constructor as a dictionary. Additional defaults may be passed into the
|
|
|
|
:meth:`get` method which will override all others.
|
|
|
|
|
|
|
|
Sections are normally stored in a builtin dictionary. An alternative dictionary
|
|
|
|
type can be passed to the :class:`ConfigParser` constructor. For example, if a
|
|
|
|
dictionary type is passed that sorts its keys, the sections will be sorted on
|
|
|
|
write-back, as will be the keys within each section.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: RawConfigParser([defaults[, dict_type]])
|
|
|
|
|
|
|
|
The basic configuration object. When *defaults* is given, it is initialized
|
|
|
|
into the dictionary of intrinsic defaults. When *dict_type* is given, it will
|
|
|
|
be used to create the dictionary objects for the list of sections, for the
|
|
|
|
options within a section, and for the default values. This class does not
|
|
|
|
support the magical interpolation behavior.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: ConfigParser([defaults])
|
|
|
|
|
|
|
|
Derived class of :class:`RawConfigParser` that implements the magical
|
|
|
|
interpolation feature and adds optional arguments to the :meth:`get` and
|
|
|
|
:meth:`items` methods. The values in *defaults* must be appropriate for the
|
|
|
|
``%()s`` string interpolation. Note that *__name__* is an intrinsic default;
|
|
|
|
its value is the section name, and will override any value provided in
|
|
|
|
*defaults*.
|
|
|
|
|
|
|
|
All option names used in interpolation will be passed through the
|
|
|
|
:meth:`optionxform` method just like any other option name reference. For
|
|
|
|
example, using the default implementation of :meth:`optionxform` (which converts
|
|
|
|
option names to lower case), the values ``foo %(bar)s`` and ``foo %(BAR)s`` are
|
|
|
|
equivalent.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: SafeConfigParser([defaults])
|
|
|
|
|
|
|
|
Derived class of :class:`ConfigParser` that implements a more-sane variant of
|
|
|
|
the magical interpolation feature. This implementation is more predictable as
|
|
|
|
well. New applications should prefer this version if they don't need to be
|
|
|
|
compatible with older versions of Python.
|
|
|
|
|
Merged revisions 59605-59624 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59606 | georg.brandl | 2007-12-29 11:57:00 +0100 (Sat, 29 Dec 2007) | 2 lines
Some cleanup in the docs.
........
r59611 | martin.v.loewis | 2007-12-29 19:49:21 +0100 (Sat, 29 Dec 2007) | 2 lines
Bug #1699: Define _BSD_SOURCE only on OpenBSD.
........
r59612 | raymond.hettinger | 2007-12-29 23:09:34 +0100 (Sat, 29 Dec 2007) | 1 line
Simpler documentation for itertools.tee(). Should be backported.
........
r59613 | raymond.hettinger | 2007-12-29 23:16:24 +0100 (Sat, 29 Dec 2007) | 1 line
Improve docs for itertools.groupby(). The use of xrange(0) to create a unique object is less obvious than object().
........
r59620 | christian.heimes | 2007-12-31 15:47:07 +0100 (Mon, 31 Dec 2007) | 3 lines
Added wininst-9.0.exe executable for VS 2008
Integrated bdist_wininst into PCBuild9 directory
........
r59621 | christian.heimes | 2007-12-31 15:51:18 +0100 (Mon, 31 Dec 2007) | 1 line
Moved PCbuild directory to PC/VS7.1
........
r59622 | christian.heimes | 2007-12-31 15:59:26 +0100 (Mon, 31 Dec 2007) | 1 line
Fix paths for build bot
........
r59623 | christian.heimes | 2007-12-31 16:02:41 +0100 (Mon, 31 Dec 2007) | 1 line
Fix paths for build bot, part 2
........
r59624 | christian.heimes | 2007-12-31 16:18:55 +0100 (Mon, 31 Dec 2007) | 1 line
Renamed PCBuild9 directory to PCBuild
........
2007-12-31 12:14:33 -04:00
|
|
|
.. XXX Need to explain what's safer/more predictable about it.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. exception:: NoSectionError
|
|
|
|
|
|
|
|
Exception raised when a specified section is not found.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: DuplicateSectionError
|
|
|
|
|
|
|
|
Exception raised if :meth:`add_section` is called with the name of a section
|
|
|
|
that is already present.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: NoOptionError
|
|
|
|
|
|
|
|
Exception raised when a specified option is not found in the specified section.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: InterpolationError
|
|
|
|
|
|
|
|
Base class for exceptions raised when problems occur performing string
|
|
|
|
interpolation.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: InterpolationDepthError
|
|
|
|
|
|
|
|
Exception raised when string interpolation cannot be completed because the
|
|
|
|
number of iterations exceeds :const:`MAX_INTERPOLATION_DEPTH`. Subclass of
|
|
|
|
:exc:`InterpolationError`.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: InterpolationMissingOptionError
|
|
|
|
|
|
|
|
Exception raised when an option referenced from a value does not exist. Subclass
|
|
|
|
of :exc:`InterpolationError`.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: InterpolationSyntaxError
|
|
|
|
|
|
|
|
Exception raised when the source text into which substitutions are made does not
|
|
|
|
conform to the required syntax. Subclass of :exc:`InterpolationError`.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: MissingSectionHeaderError
|
|
|
|
|
|
|
|
Exception raised when attempting to parse a file which has no section headers.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: ParsingError
|
|
|
|
|
|
|
|
Exception raised when errors occur attempting to parse a file.
|
|
|
|
|
|
|
|
|
|
|
|
.. data:: MAX_INTERPOLATION_DEPTH
|
|
|
|
|
|
|
|
The maximum depth for recursive interpolation for :meth:`get` when the *raw*
|
|
|
|
parameter is false. This is relevant only for the :class:`ConfigParser` class.
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
Module :mod:`shlex`
|
|
|
|
Support for a creating Unix shell-like mini-languages which can be used as an
|
|
|
|
alternate format for application configuration files.
|
|
|
|
|
|
|
|
|
|
|
|
.. _rawconfigparser-objects:
|
|
|
|
|
|
|
|
RawConfigParser Objects
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
:class:`RawConfigParser` instances have the following methods:
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.defaults()
|
|
|
|
|
|
|
|
Return a dictionary containing the instance-wide defaults.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.sections()
|
|
|
|
|
|
|
|
Return a list of the sections available; ``DEFAULT`` is not included in the
|
|
|
|
list.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.add_section(section)
|
|
|
|
|
|
|
|
Add a section named *section* to the instance. If a section by the given name
|
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60969,60971-60976 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60965 | eric.smith | 2008-02-22 18:43:17 +0100 (Fri, 22 Feb 2008) | 1 line
Tests for bin() builtin. These need to get merged into py3k, which has no tests for bin.
........
r60968 | raymond.hettinger | 2008-02-22 20:50:06 +0100 (Fri, 22 Feb 2008) | 1 line
Document itertools.product().
........
r60969 | raymond.hettinger | 2008-02-23 03:20:41 +0100 (Sat, 23 Feb 2008) | 9 lines
Improve the implementation of itertools.product()
* Fix-up issues pointed-out by Neal Norwitz.
* Add extensive comments.
* The lz->result variable is now a tuple instead of a list.
* Use fast macro getitem/setitem calls so most code is in-line.
* Re-use the result tuple if available (modify in-place instead of copy).
........
r60972 | raymond.hettinger | 2008-02-23 05:03:50 +0100 (Sat, 23 Feb 2008) | 1 line
Add more comments
........
r60973 | raymond.hettinger | 2008-02-23 11:04:15 +0100 (Sat, 23 Feb 2008) | 1 line
Add recipe using itertools.product().
........
r60974 | facundo.batista | 2008-02-23 13:01:13 +0100 (Sat, 23 Feb 2008) | 6 lines
Issue 1881. Increased the stack limit from 500 to 1500. Also added
a test for this (and because of this test you'll see in stderr a
message that parser.c sends before raising MemoryError).
Thanks Ralf Schmitt.
........
r60975 | facundo.batista | 2008-02-23 13:27:17 +0100 (Sat, 23 Feb 2008) | 4 lines
Issue 1776581. Minor corrections to smtplib, and two small tests.
Thanks Alan McIntyre.
........
r60976 | facundo.batista | 2008-02-23 13:46:10 +0100 (Sat, 23 Feb 2008) | 5 lines
Issue 1781. Now ConfigParser.add_section does not let you add a
DEFAULT section any more, because it duplicated sections with
the rest of the machinery. Thanks Tim Lesher and Manuel Kaufmann.
........
2008-02-23 09:18:03 -04:00
|
|
|
already exists, :exc:`DuplicateSectionError` is raised. If the name
|
|
|
|
``DEFAULT`` (or any of it's case-insensitive variants) is passed,
|
|
|
|
:exc:`ValueError` is raised.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. method:: RawConfigParser.has_section(section)
|
|
|
|
|
|
|
|
Indicates whether the named section is present in the configuration. The
|
|
|
|
``DEFAULT`` section is not acknowledged.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.options(section)
|
|
|
|
|
|
|
|
Returns a list of options available in the specified *section*.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.has_option(section, option)
|
|
|
|
|
|
|
|
If the given section exists, and contains the given option, return
|
|
|
|
:const:`True`; otherwise return :const:`False`.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.read(filenames)
|
|
|
|
|
|
|
|
Attempt to read and parse a list of filenames, returning a list of filenames
|
2008-02-01 07:56:49 -04:00
|
|
|
which were successfully parsed. If *filenames* is a string,
|
2007-08-15 11:28:22 -03:00
|
|
|
it is treated as a single filename. If a file named in *filenames* cannot be
|
|
|
|
opened, that file will be ignored. This is designed so that you can specify a
|
|
|
|
list of potential configuration file locations (for example, the current
|
|
|
|
directory, the user's home directory, and some system-wide directory), and all
|
|
|
|
existing configuration files in the list will be read. If none of the named
|
|
|
|
files exist, the :class:`ConfigParser` instance will contain an empty dataset.
|
|
|
|
An application which requires initial values to be loaded from a file should
|
|
|
|
load the required file or files using :meth:`readfp` before calling :meth:`read`
|
|
|
|
for any optional files::
|
|
|
|
|
|
|
|
import ConfigParser, os
|
|
|
|
|
|
|
|
config = ConfigParser.ConfigParser()
|
|
|
|
config.readfp(open('defaults.cfg'))
|
|
|
|
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.readfp(fp[, filename])
|
|
|
|
|
|
|
|
Read and parse configuration data from the file or file-like object in *fp*
|
|
|
|
(only the :meth:`readline` method is used). If *filename* is omitted and *fp*
|
|
|
|
has a :attr:`name` attribute, that is used for *filename*; the default is
|
|
|
|
``<???>``.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.get(section, option)
|
|
|
|
|
|
|
|
Get an *option* value for the named *section*.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.getint(section, option)
|
|
|
|
|
|
|
|
A convenience method which coerces the *option* in the specified *section* to an
|
|
|
|
integer.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.getfloat(section, option)
|
|
|
|
|
|
|
|
A convenience method which coerces the *option* in the specified *section* to a
|
|
|
|
floating point number.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.getboolean(section, option)
|
|
|
|
|
|
|
|
A convenience method which coerces the *option* in the specified *section* to a
|
|
|
|
Boolean value. Note that the accepted values for the option are ``"1"``,
|
|
|
|
``"yes"``, ``"true"``, and ``"on"``, which cause this method to return ``True``,
|
|
|
|
and ``"0"``, ``"no"``, ``"false"``, and ``"off"``, which cause it to return
|
|
|
|
``False``. These string values are checked in a case-insensitive manner. Any
|
|
|
|
other value will cause it to raise :exc:`ValueError`.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.items(section)
|
|
|
|
|
|
|
|
Return a list of ``(name, value)`` pairs for each option in the given *section*.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.set(section, option, value)
|
|
|
|
|
|
|
|
If the given section exists, set the given option to the specified value;
|
|
|
|
otherwise raise :exc:`NoSectionError`. While it is possible to use
|
|
|
|
:class:`RawConfigParser` (or :class:`ConfigParser` with *raw* parameters set to
|
|
|
|
true) for *internal* storage of non-string values, full functionality (including
|
|
|
|
interpolation and output to files) can only be achieved using string values.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.write(fileobject)
|
|
|
|
|
|
|
|
Write a representation of the configuration to the specified file object. This
|
|
|
|
representation can be parsed by a future :meth:`read` call.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.remove_option(section, option)
|
|
|
|
|
|
|
|
Remove the specified *option* from the specified *section*. If the section does
|
|
|
|
not exist, raise :exc:`NoSectionError`. If the option existed to be removed,
|
|
|
|
return :const:`True`; otherwise return :const:`False`.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.remove_section(section)
|
|
|
|
|
|
|
|
Remove the specified *section* from the configuration. If the section in fact
|
|
|
|
existed, return ``True``. Otherwise return ``False``.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: RawConfigParser.optionxform(option)
|
|
|
|
|
|
|
|
Transforms the option name *option* as found in an input file or as passed in by
|
|
|
|
client code to the form that should be used in the internal structures. The
|
|
|
|
default implementation returns a lower-case version of *option*; subclasses may
|
|
|
|
override this or client code can set an attribute of this name on instances to
|
|
|
|
affect this behavior. Setting this to :func:`str`, for example, would make
|
|
|
|
option names case sensitive.
|
|
|
|
|
|
|
|
|
|
|
|
.. _configparser-objects:
|
|
|
|
|
|
|
|
ConfigParser Objects
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
The :class:`ConfigParser` class extends some methods of the
|
|
|
|
:class:`RawConfigParser` interface, adding some optional arguments.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: ConfigParser.get(section, option[, raw[, vars]])
|
|
|
|
|
|
|
|
Get an *option* value for the named *section*. All the ``'%'`` interpolations
|
|
|
|
are expanded in the return values, based on the defaults passed into the
|
|
|
|
constructor, as well as the options *vars* provided, unless the *raw* argument
|
|
|
|
is true.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: ConfigParser.items(section[, raw[, vars]])
|
|
|
|
|
|
|
|
Return a list of ``(name, value)`` pairs for each option in the given *section*.
|
|
|
|
Optional arguments have the same meaning as for the :meth:`get` method.
|
|
|
|
|
|
|
|
|
|
|
|
.. _safeconfigparser-objects:
|
|
|
|
|
|
|
|
SafeConfigParser Objects
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
The :class:`SafeConfigParser` class implements the same extended interface as
|
|
|
|
:class:`ConfigParser`, with the following addition:
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SafeConfigParser.set(section, option, value)
|
|
|
|
|
|
|
|
If the given section exists, set the given option to the specified value;
|
2008-02-01 07:56:49 -04:00
|
|
|
otherwise raise :exc:`NoSectionError`. *value* must be a string; if it is
|
|
|
|
not, :exc:`TypeError` is raised.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
|
|
|
|
An example of writing to a configuration file::
|
|
|
|
|
|
|
|
import ConfigParser
|
|
|
|
|
|
|
|
config = ConfigParser.RawConfigParser()
|
|
|
|
|
|
|
|
# When adding sections or items, add them in the reverse order of
|
|
|
|
# how you want them to be displayed in the actual file.
|
|
|
|
# In addition, please note that using RawConfigParser's and the raw
|
|
|
|
# mode of ConfigParser's respective set functions, you can assign
|
|
|
|
# non-string values to keys internally, but will receive an error
|
|
|
|
# when attempting to write to a file or when you get it in non-raw
|
|
|
|
# mode. SafeConfigParser does not allow such assignments to take place.
|
|
|
|
config.add_section('Section1')
|
|
|
|
config.set('Section1', 'int', '15')
|
|
|
|
config.set('Section1', 'bool', 'true')
|
|
|
|
config.set('Section1', 'float', '3.1415')
|
|
|
|
config.set('Section1', 'baz', 'fun')
|
|
|
|
config.set('Section1', 'bar', 'Python')
|
|
|
|
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')
|
|
|
|
|
|
|
|
# Writing our configuration file to 'example.cfg'
|
|
|
|
with open('example.cfg', 'wb') as configfile:
|
|
|
|
config.write(configfile)
|
|
|
|
|
|
|
|
An example of reading the configuration file again::
|
|
|
|
|
|
|
|
import ConfigParser
|
|
|
|
|
|
|
|
config = ConfigParser.RawConfigParser()
|
|
|
|
config.read('example.cfg')
|
|
|
|
|
|
|
|
# getfloat() raises an exception if the value is not a float
|
|
|
|
# getint() and getboolean() also do this for their respective types
|
|
|
|
float = config.getfloat('Section1', 'float')
|
|
|
|
int = config.getint('Section1', 'int')
|
2008-02-01 07:56:49 -04:00
|
|
|
print(float + int)
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
# Notice that the next output does not interpolate '%(bar)s' or '%(baz)s'.
|
|
|
|
# This is because we are using a RawConfigParser().
|
|
|
|
if config.getboolean('Section1', 'bool'):
|
2008-02-01 07:56:49 -04:00
|
|
|
print(config.get('Section1', 'foo'))
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
To get interpolation, you will need to use a :class:`ConfigParser` or
|
|
|
|
:class:`SafeConfigParser`::
|
|
|
|
|
|
|
|
import ConfigParser
|
|
|
|
|
|
|
|
config = ConfigParser.ConfigParser()
|
|
|
|
config.read('example.cfg')
|
|
|
|
|
|
|
|
# Set the third, optional argument of get to 1 if you wish to use raw mode.
|
2008-02-01 07:56:49 -04:00
|
|
|
print(config.get('Section1', 'foo', 0)) # -> "Python is fun!"
|
|
|
|
print(config.get('Section1', 'foo', 1)) # -> "%(bar)s is %(baz)s!"
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
# The optional fourth argument is a dict with members that will take
|
|
|
|
# precedence in interpolation.
|
2008-02-01 07:56:49 -04:00
|
|
|
print(config.get('Section1', 'foo', 0, {'bar': 'Documentation',
|
|
|
|
'baz': 'evil'}))
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
Defaults are available in all three types of ConfigParsers. They are used in
|
|
|
|
interpolation if an option used is not defined elsewhere. ::
|
|
|
|
|
|
|
|
import ConfigParser
|
|
|
|
|
|
|
|
# New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each
|
|
|
|
config = ConfigParser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
|
|
|
|
config.read('example.cfg')
|
|
|
|
|
2008-02-01 07:56:49 -04:00
|
|
|
print(config.get('Section1', 'foo')) # -> "Python is fun!"
|
2007-11-29 14:43:05 -04:00
|
|
|
config.remove_option('Section1', 'bar')
|
|
|
|
config.remove_option('Section1', 'baz')
|
2008-02-01 07:56:49 -04:00
|
|
|
print(config.get('Section1', 'foo')) # -> "Life is hard!"
|
2007-11-29 14:43:05 -04:00
|
|
|
|
|
|
|
The function ``opt_move`` below can be used to move options between sections::
|
|
|
|
|
|
|
|
def opt_move(config, section1, section2, option):
|
|
|
|
try:
|
|
|
|
config.set(section2, option, config.get(section1, option, 1))
|
|
|
|
except ConfigParser.NoSectionError:
|
|
|
|
# Create non-existent section
|
|
|
|
config.add_section(section2)
|
|
|
|
opt_move(config, section1, section2, option)
|
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60151 | christian.heimes | 2008-01-21 14:11:15 +0100 (Mon, 21 Jan 2008) | 1 line
A bunch of header files were not listed as dependencies for object files. Changes to files like Parser/parser.h weren't picked up by make.
........
r60152 | georg.brandl | 2008-01-21 15:16:46 +0100 (Mon, 21 Jan 2008) | 3 lines
#1087741: make mmap.mmap the type of mmap objects, not a
factory function. Allow it to be subclassed.
........
r60153 | georg.brandl | 2008-01-21 15:18:14 +0100 (Mon, 21 Jan 2008) | 2 lines
mmap is an extension module.
........
r60154 | georg.brandl | 2008-01-21 17:28:13 +0100 (Mon, 21 Jan 2008) | 2 lines
Fix example.
........
r60155 | georg.brandl | 2008-01-21 17:34:07 +0100 (Mon, 21 Jan 2008) | 2 lines
#1555501: document plistlib and move it to the general library.
........
r60156 | georg.brandl | 2008-01-21 17:36:00 +0100 (Mon, 21 Jan 2008) | 2 lines
Add a stub for bundlebuilder documentation.
........
r60157 | georg.brandl | 2008-01-21 17:46:58 +0100 (Mon, 21 Jan 2008) | 2 lines
Removing bundlebuilder docs again -- it's not to be used anymore (see #779825).
........
r60158 | georg.brandl | 2008-01-21 17:51:51 +0100 (Mon, 21 Jan 2008) | 2 lines
#997912: acknowledge nested scopes in tutorial.
........
r60159 | vinay.sajip | 2008-01-21 18:02:26 +0100 (Mon, 21 Jan 2008) | 1 line
Fix: #1836: Off-by-one bug in TimedRotatingFileHandler rollover calculation. Patch thanks to Kathryn M. Kowalski.
........
r60161 | georg.brandl | 2008-01-21 18:13:03 +0100 (Mon, 21 Jan 2008) | 2 lines
Adapt pydoc to new doc URLs.
........
r60162 | georg.brandl | 2008-01-21 18:17:00 +0100 (Mon, 21 Jan 2008) | 2 lines
Fix old link.
........
r60163 | georg.brandl | 2008-01-21 18:22:06 +0100 (Mon, 21 Jan 2008) | 2 lines
#1726198: replace while 1: fp.readline() with file iteration.
........
r60164 | georg.brandl | 2008-01-21 18:29:23 +0100 (Mon, 21 Jan 2008) | 2 lines
Clarify $ behavior in re docstring. #1631394.
........
r60165 | vinay.sajip | 2008-01-21 18:39:22 +0100 (Mon, 21 Jan 2008) | 1 line
Minor documentation change - hyperlink tidied up.
........
r60166 | georg.brandl | 2008-01-21 18:42:40 +0100 (Mon, 21 Jan 2008) | 2 lines
#1530959: change distutils build dir for --with-pydebug python builds.
........
r60167 | vinay.sajip | 2008-01-21 19:16:05 +0100 (Mon, 21 Jan 2008) | 1 line
Updated to include news on recent logging fixes and documentation changes.
........
r60168 | georg.brandl | 2008-01-21 19:35:49 +0100 (Mon, 21 Jan 2008) | 3 lines
Issue #1882: when compiling code from a string, encoding cookies in the
second line of code were not always recognized correctly.
........
r60170 | georg.brandl | 2008-01-21 19:36:51 +0100 (Mon, 21 Jan 2008) | 2 lines
Add NEWS entry for #1882.
........
r60172 | georg.brandl | 2008-01-21 19:41:24 +0100 (Mon, 21 Jan 2008) | 2 lines
Use original location of document, which has translations.
........
r60173 | walter.doerwald | 2008-01-21 21:18:04 +0100 (Mon, 21 Jan 2008) | 2 lines
Follow PEP 8 in module docstring.
........
r60175 | georg.brandl | 2008-01-21 21:20:53 +0100 (Mon, 21 Jan 2008) | 2 lines
Adapt to latest doctools refactoring.
........
2008-01-21 16:36:10 -04:00
|
|
|
else:
|
|
|
|
config.remove_option(section1, option)
|