From e89b8e98327da833f92299e1876d2903b6e585ca Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 3 Mar 2009 05:00:37 +0000 Subject: [PATCH] Backport 70111: Let configparser use ordered dicts by default. --- Doc/library/configparser.rst | 17 +++++++++++++++++ Lib/ConfigParser.py | 8 +++++++- Misc/NEWS | 2 ++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index bab44d45145..0c5bb15ba49 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -75,6 +75,9 @@ write-back, as will be the keys within each section. .. versionchanged:: 2.6 *dict_type* was added. + .. versionchanged:: 2.7 + The default *dict_type* is :class:`collections.OrderedDict`. + .. class:: ConfigParser([defaults[, dict_type]]) @@ -91,6 +94,14 @@ write-back, as will be the keys within each section. option names to lower case), the values ``foo %(bar)s`` and ``foo %(BAR)s`` are equivalent. + .. versionadded:: 2.3 + + .. versionchanged:: 2.6 + *dict_type* was added. + + .. versionchanged:: 2.7 + The default *dict_type* is :class:`collections.OrderedDict`. + .. class:: SafeConfigParser([defaults[, dict_type]]) @@ -103,6 +114,12 @@ write-back, as will be the keys within each section. .. versionadded:: 2.3 + .. versionchanged:: 2.6 + *dict_type* was added. + + .. versionchanged:: 2.7 + The default *dict_type* is :class:`collections.OrderedDict`. + .. exception:: NoSectionError diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index b6af6f9bab9..1861b5aff91 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -87,6 +87,12 @@ ConfigParser -- responsible for parsing a list of write the configuration state in .ini format """ +try: + from collections import OrderedDict as _default_dict +except ImportError: + # fallback for setup.py which hasn't yet built _collections + _default_dict = dict + import re __all__ = ["NoSectionError", "DuplicateSectionError", "NoOptionError", @@ -215,7 +221,7 @@ class MissingSectionHeaderError(ParsingError): class RawConfigParser: - def __init__(self, defaults=None, dict_type=dict): + def __init__(self, defaults=None, dict_type=_default_dict): self._dict = dict_type self._sections = self._dict() self._defaults = self._dict() diff --git a/Misc/NEWS b/Misc/NEWS index 70160bb43e0..d91164f4c51 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -172,6 +172,8 @@ Library - The _asdict() for method for namedtuples now returns an OrderedDict(). +- The configparser module now defaults to using an ordered dictionary. + - Issue #4308: httplib.IncompleteRead's repr doesn't include all of the data all ready received.