Commit 392c6fc0 authored by Georg Brandl's avatar Georg Brandl

ConfigParser renaming reversal part 3: move module into place and adapt imports.

parent 995ee9da
:mod:`configparser` --- Configuration file parser
:mod:`ConfigParser` --- Configuration file parser
=================================================
.. module:: ConfigParser
:synopsis: Old name for the configparser module.
.. module:: configparser
:synopsis: Configuration file parser.
.. moduleauthor:: Ken Manheimer <klm@zope.com>
......@@ -13,9 +10,10 @@
.. sectionauthor:: Christopher G. Petrilli <petrilli@amber.org>
.. note::
The :mod:`ConfigParser` module has been renamed to :mod:`configparser` in
Python 3.0. It is importable under both names in Python 2.6 and the rest of
the 2.x series.
The :mod:`ConfigParser` module has been renamed to `configparser` in Python
3.0. The :term:`2to3` tool will automatically adapt imports when converting
your sources to 3.0.
.. index::
pair: .ini; file
......@@ -233,9 +231,9 @@ RawConfigParser Objects
load the required file or files using :meth:`readfp` before calling :meth:`read`
for any optional files::
import configparser, os
import ConfigParser, os
config = configparser.ConfigParser()
config = ConfigParser.ConfigParser()
config.readfp(open('defaults.cfg'))
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])
......@@ -375,10 +373,10 @@ Examples
An example of writing to a configuration file::
import configparser
import ConfigParser
config = ConfigParser.RawConfigParser()
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
......@@ -393,16 +391,16 @@ An example of writing to a configuration file::
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
import ConfigParser
config = configparser.RawConfigParser()
config = ConfigParser.RawConfigParser()
config.read('example.cfg')
# getfloat() raises an exception if the value is not a float
......@@ -419,9 +417,9 @@ An example of reading the configuration file again::
To get interpolation, you will need to use a :class:`ConfigParser` or
:class:`SafeConfigParser`::
import configparser
import ConfigParser
config = configparser.ConfigParser()
config = ConfigParser.ConfigParser()
config.read('example.cfg')
# Set the third, optional argument of get to 1 if you wish to use raw mode.
......@@ -433,15 +431,15 @@ To get interpolation, you will need to use a :class:`ConfigParser` or
print config.get('Section1', 'foo', 0, {'bar': 'Documentation',
'baz': 'evil'})
Defaults are available in all three types of ConfigParsers. They are used in
Defaults are available in all three types of ConfigParsers. They are used in
interpolation if an option used is not defined elsewhere. ::
import configparser
import ConfigParser
# New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each
config = configparser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
config = ConfigParser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
config.read('example.cfg')
print config.get('Section1', 'foo') # -> "Python is fun!"
config.remove_option('Section1', 'bar')
config.remove_option('Section1', 'baz')
......@@ -452,7 +450,7 @@ 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:
except ConfigParser.NoSectionError:
# Create non-existent section
config.add_section(section2)
opt_move(config, section1, section2, option)
......
......@@ -2240,12 +2240,12 @@ in :mod:`logging` itself) and defining handlers which are declared either in
.. function:: fileConfig(fname[, defaults])
Reads the logging configuration from a :mod:`configparser`\-format file named
*fname*. This function can be called several times from an application,
allowing an end user the ability to select from various pre-canned
configurations (if the developer provides a mechanism to present the choices
and load the chosen configuration). Defaults to be passed to the ConfigParser
can be specified in the *defaults* argument.
Reads the logging configuration from a ConfigParser-format file named *fname*.
This function can be called several times from an application, allowing an end
user the ability to select from various pre-canned configurations (if the
developer provides a mechanism to present the choices and load the chosen
configuration). Defaults to be passed to ConfigParser can be specified in the
*defaults* argument.
.. function:: listen([port])
......@@ -2275,20 +2275,18 @@ in :mod:`logging` itself) and defining handlers which are declared either in
Configuration file format
^^^^^^^^^^^^^^^^^^^^^^^^^
The configuration file format understood by :func:`fileConfig` is
based on :mod:`configparser` functionality. The file must contain
sections called ``[loggers]``, ``[handlers]`` and ``[formatters]``
which identify by name the entities of each type which are defined in
the file. For each such entity, there is a separate section which
identified how that entity is configured. Thus, for a logger named
``log01`` in the ``[loggers]`` section, the relevant configuration
details are held in a section ``[logger_log01]``. Similarly, a handler
called ``hand01`` in the ``[handlers]`` section will have its
configuration held in a section called ``[handler_hand01]``, while a
formatter called ``form01`` in the ``[formatters]`` section will have
its configuration specified in a section called
``[formatter_form01]``. The root logger configuration must be
specified in a section called ``[logger_root]``.
The configuration file format understood by :func:`fileConfig` is based on
ConfigParser functionality. The file must contain sections called ``[loggers]``,
``[handlers]`` and ``[formatters]`` which identify by name the entities of each
type which are defined in the file. For each such entity, there is a separate
section which identified how that entity is configured. Thus, for a logger named
``log01`` in the ``[loggers]`` section, the relevant configuration details are
held in a section ``[logger_log01]``. Similarly, a handler called ``hand01`` in
the ``[handlers]`` section will have its configuration held in a section called
``[handler_hand01]``, while a formatter called ``form01`` in the
``[formatters]`` section will have its configuration specified in a section
called ``[formatter_form01]``. The root logger configuration must be specified
in a section called ``[logger_root]``.
Examples of these sections in the file are given below. ::
......
......@@ -63,7 +63,7 @@ The :mod:`shlex` module defines the following class:
.. seealso::
Module :mod:`configparser`
Module :mod:`ConfigParser`
Parser for configuration files similar to the Windows :file:`.ini` files.
......
......@@ -14,11 +14,7 @@ import httplib
import base64
import urlparse
import cStringIO as StringIO
try:
from configparser import ConfigParser
except ImportError:
# For backward-compatibility with Python versions < 2.6.
from ConfigParser import ConfigParser
from ConfigParser import ConfigParser
class upload(PyPIRCCommand):
......
......@@ -5,11 +5,7 @@ that uses .pypirc in the distutils.command package.
"""
import os
import sys
try:
from configparser import ConfigParser
except ImportError:
# For backward-compatibility with Python versions < 2.6.
from ConfigParser import ConfigParser
from ConfigParser import ConfigParser
from distutils.cmd import Command
......
......@@ -358,11 +358,7 @@ Common commands: (see '--help-commands' for more)
def parse_config_files (self, filenames=None):
try:
from configparser import ConfigParser
except ImportError:
# For backward-compatibility with Python versions < 2.6.
from ConfigParser import ConfigParser
from ConfigParser import ConfigParser
if filenames is None:
filenames = self.find_config_files()
......
......@@ -21,7 +21,7 @@ import os
import sys
import string
import macosxSupport
from configparser import ConfigParser, NoOptionError, NoSectionError
from ConfigParser import ConfigParser, NoOptionError, NoSectionError
class InvalidConfigType(Exception): pass
class InvalidConfigSet(Exception): pass
......
......@@ -65,9 +65,9 @@ def fileConfig(fname, defaults=None):
rather than a filename, in which case the file-like object will be read
using readfp.
"""
import configparser
import ConfigParser
cp = configparser.ConfigParser(defaults)
cp = ConfigParser.ConfigParser(defaults)
if hasattr(cp, 'readfp') and hasattr(fname, 'readline'):
cp.readfp(fname)
else:
......
......@@ -37,7 +37,7 @@ class AllTest(unittest.TestCase):
self.check_all("BaseHTTPServer")
self.check_all("Bastion")
self.check_all("CGIHTTPServer")
self.check_all("configparser")
self.check_all("ConfigParser")
self.check_all("Cookie")
self.check_all("MimeWriter")
self.check_all("Queue")
......
import configparser
import ConfigParser
import StringIO
import unittest
import UserDict
......@@ -94,7 +94,7 @@ class TestCaseBase(unittest.TestCase):
"remove_option() failed to report non-existance of option"
" that was removed")
self.assertRaises(configparser.NoSectionError,
self.assertRaises(ConfigParser.NoSectionError,
cf.remove_option, 'No Such Section', 'foo')
eq(cf.get('Long Line', 'foo'),
......@@ -147,17 +147,17 @@ class TestCaseBase(unittest.TestCase):
def test_parse_errors(self):
self.newconfig()
self.parse_error(configparser.ParsingError,
self.parse_error(ConfigParser.ParsingError,
"[Foo]\n extra-spaces: splat\n")
self.parse_error(configparser.ParsingError,
self.parse_error(ConfigParser.ParsingError,
"[Foo]\n extra-spaces= splat\n")
self.parse_error(configparser.ParsingError,
self.parse_error(ConfigParser.ParsingError,
"[Foo]\noption-without-value\n")
self.parse_error(configparser.ParsingError,
self.parse_error(ConfigParser.ParsingError,
"[Foo]\n:value-without-option-name\n")
self.parse_error(configparser.ParsingError,
self.parse_error(ConfigParser.ParsingError,
"[Foo]\n=value-without-option-name\n")
self.parse_error(configparser.MissingSectionHeaderError,
self.parse_error(ConfigParser.MissingSectionHeaderError,
"No Section!\n")
def parse_error(self, exc, src):
......@@ -170,13 +170,13 @@ class TestCaseBase(unittest.TestCase):
"new ConfigParser should have no defined sections")
self.failIf(cf.has_section("Foo"),
"new ConfigParser should have no acknowledged sections")
self.assertRaises(configparser.NoSectionError,
self.assertRaises(ConfigParser.NoSectionError,
cf.options, "Foo")
self.assertRaises(configparser.NoSectionError,
self.assertRaises(ConfigParser.NoSectionError,
cf.set, "foo", "bar", "value")
self.get_error(configparser.NoSectionError, "foo", "bar")
self.get_error(ConfigParser.NoSectionError, "foo", "bar")
cf.add_section("foo")
self.get_error(configparser.NoOptionError, "foo", "bar")
self.get_error(ConfigParser.NoOptionError, "foo", "bar")
def get_error(self, exc, section, option):
try:
......@@ -215,7 +215,7 @@ class TestCaseBase(unittest.TestCase):
def test_weird_errors(self):
cf = self.newconfig()
cf.add_section("Foo")
self.assertRaises(configparser.DuplicateSectionError,
self.assertRaises(ConfigParser.DuplicateSectionError,
cf.add_section, "Foo")
def test_write(self):
......@@ -324,7 +324,7 @@ class TestCaseBase(unittest.TestCase):
class ConfigParserTestCase(TestCaseBase):
config_class = configparser.ConfigParser
config_class = ConfigParser.ConfigParser
def test_interpolation(self):
cf = self.get_interpolation_config()
......@@ -335,11 +335,11 @@ class ConfigParserTestCase(TestCaseBase):
"something with lots of interpolation (9 steps)")
eq(cf.get("Foo", "bar10"),
"something with lots of interpolation (10 steps)")
self.get_error(configparser.InterpolationDepthError, "Foo", "bar11")
self.get_error(ConfigParser.InterpolationDepthError, "Foo", "bar11")
def test_interpolation_missing_value(self):
cf = self.get_interpolation_config()
e = self.get_error(configparser.InterpolationError,
e = self.get_error(ConfigParser.InterpolationError,
"Interpolation Error", "name")
self.assertEqual(e.reference, "reference")
self.assertEqual(e.section, "Interpolation Error")
......@@ -375,7 +375,7 @@ class ConfigParserTestCase(TestCaseBase):
class RawConfigParserTestCase(TestCaseBase):
config_class = configparser.RawConfigParser
config_class = ConfigParser.RawConfigParser
def test_interpolation(self):
cf = self.get_interpolation_config()
......@@ -410,7 +410,7 @@ class RawConfigParserTestCase(TestCaseBase):
class SafeConfigParserTestCase(ConfigParserTestCase):
config_class = configparser.SafeConfigParser
config_class = ConfigParser.SafeConfigParser
def test_safe_interpolation(self):
# See http://www.python.org/sf/511737
......
......@@ -213,48 +213,9 @@ class TestStdlibRemovals(unittest.TestCase):
self.assertEquals(str(w.message), msg)
class TestStdlibRenames(unittest.TestCase):
renames = {'ConfigParser': 'configparser'}
def check_rename(self, module_name, new_module_name):
"""Make sure that:
- A DeprecationWarning is raised when importing using the
old 2.x module name.
- The module can be imported using the new 3.x name.
- The warning message specify both names.
"""
with CleanImport(module_name):
with catch_warning(record=False) as w:
warnings.filterwarnings("error", ".+ renamed to",
DeprecationWarning)
try:
__import__(module_name, level=0)
except DeprecationWarning as exc:
self.assert_(module_name in exc.args[0])
self.assert_(new_module_name in exc.args[0])
else:
self.fail("DeprecationWarning not raised for %s" %
module_name)
with CleanImport(new_module_name):
try:
__import__(new_module_name, level=0)
except ImportError:
self.fail("cannot import %s with its 3.x name, %s" %
module_name, new_module_name)
except DeprecationWarning:
self.fail("unexpected DeprecationWarning raised for %s" %
module_name)
def test_module_renames(self):
for module_name, new_module_name in self.renames.items():
self.check_rename(module_name, new_module_name)
def test_main():
run_unittest(TestPy3KWarnings,
TestStdlibRemovals,
TestStdlibRenames)
TestStdlibRemovals)
if __name__ == '__main__':
test_main()
......@@ -135,9 +135,6 @@ Library
- The DEVICE, GL, gl, and cgen modules (which indirectly includes
cgensupport) have been deprecated for removal in Python 3.0.
- The ConfigParser module has been renamed 'configparser'. The old
name is now deprecated.
- The CL, CL_old, and cl modules for IRIX have been deprecated for
removal in Python 3.0.
......@@ -1904,13 +1901,13 @@ Library
Extension Modules
-----------------
- Patch #1657: added select.epoll and select.kqueue
- Patch #1657: added select.epoll and select.kqueue.
- Patch #1506171: added operator.methodcaller().
- Patch #1826: operator.attrgetter() now supports dotted attribute paths.
- Patch #1957: syslogmodule: Release GIL when calling syslog(3)
- Patch #1957: syslogmodule: Release GIL when calling syslog(3).
- Bug #2112: mmap.error is now a subclass of EnvironmentError and not
a direct EnvironmentError.
......
......@@ -1862,7 +1862,7 @@ codecs Lookup existing Unicode encodings and register new ones.
colorsys Conversion functions between RGB and other color systems.
commands Tools for executing UNIX commands .
compileall Force "compilation" of all .py files in a directory.
configparser Configuration file parser (much like windows .ini files)
ConfigParser Configuration file parser (much like windows .ini files)
copy Generic shallow and deep copying operations.
copy_reg Helper to provide extensibility for pickle/cPickle.
csv Read and write files with comma separated values.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment