[Python-checkins] r86573 - in python/branches/py3k/Lib: configparser.py test/test_cfgparser.py

lukasz.langa python-checkins at python.org
Sat Nov 20 17:15:37 CET 2010


Author: lukasz.langa
Date: Sat Nov 20 17:15:37 2010
New Revision: 86573
Log:
configparser: the name of the DEFAULT section is now customizable
Modified:
 python/branches/py3k/Lib/configparser.py
 python/branches/py3k/Lib/test/test_cfgparser.py
Modified: python/branches/py3k/Lib/configparser.py
==============================================================================
--- python/branches/py3k/Lib/configparser.py	(original)
+++ python/branches/py3k/Lib/configparser.py	Sat Nov 20 17:15:37 2010
@@ -406,12 +406,13 @@
 def __init__(self, defaults=None, dict_type=_default_dict,
 allow_no_value=False, *, delimiters=('=', ':'),
 comment_prefixes=_COMPATIBLE, strict=False,
- empty_lines_in_values=True):
+ empty_lines_in_values=True,
+ default_section=DEFAULTSECT):
 self._dict = dict_type
 self._sections = self._dict()
 self._defaults = self._dict()
 self._proxies = self._dict()
- self._proxies[DEFAULTSECT] = SectionProxy(self, DEFAULTSECT)
+ self._proxies[default_section] = SectionProxy(self, default_section)
 if defaults:
 for key, value in defaults.items():
 self._defaults[self.optionxform(key)] = value
@@ -435,6 +436,7 @@
 self._strict = strict
 self._allow_no_value = allow_no_value
 self._empty_lines_in_values = empty_lines_in_values
+ self._default_section=default_section
 
 def defaults(self):
 return self._defaults
@@ -448,10 +450,9 @@
 """Create a new section in the configuration.
 
 Raise DuplicateSectionError if a section by the specified name
- already exists. Raise ValueError if name is DEFAULT or any of it's
- case-insensitive variants.
+ already exists. Raise ValueError if name is DEFAULT.
 """
- if section.upper() == DEFAULTSECT:
+ if section == self._default_section:
 raise ValueError('Invalid section name: %s' % section)
 
 if section in self._sections:
@@ -587,7 +588,7 @@
 try:
 d2 = self._sections[section]
 except KeyError:
- if section != DEFAULTSECT:
+ if section != self._default_section:
 raise NoSectionError(section)
 d2 = self._dict()
 d = self._defaults.copy()
@@ -632,7 +633,7 @@
 
 def has_option(self, section, option):
 """Check for the existence of a given option in a given section."""
- if not section or section == DEFAULTSECT:
+ if not section or section == self._default_section:
 option = self.optionxform(option)
 return option in self._defaults
 elif section not in self._sections:
@@ -644,7 +645,7 @@
 
 def set(self, section, option, value=None):
 """Set an option."""
- if not section or section == DEFAULTSECT:
+ if not section or section == self._default_section:
 sectdict = self._defaults
 else:
 try:
@@ -664,7 +665,8 @@
 else:
 d = self._delimiters[0]
 if self._defaults:
- self._write_section(fp, DEFAULTSECT, self._defaults.items(), d)
+ self._write_section(fp, self._default_section,
+ self._defaults.items(), d)
 for section in self._sections:
 self._write_section(fp, section,
 self._sections[section].items(), d)
@@ -684,7 +686,7 @@
 
 def remove_option(self, section, option):
 """Remove an option."""
- if not section or section == DEFAULTSECT:
+ if not section or section == self._default_section:
 sectdict = self._defaults
 else:
 try:
@@ -706,7 +708,7 @@
 return existed
 
 def __getitem__(self, key):
- if key != DEFAULTSECT and not self.has_section(key):
+ if key != self._default_section and not self.has_section(key):
 raise KeyError(key)
 return self._proxies[key]
 
@@ -720,21 +722,21 @@
 self.read_dict({key: value})
 
 def __delitem__(self, key):
- if key == DEFAULTSECT:
+ if key == self._default_section:
 raise ValueError("Cannot remove the default section.")
 if not self.has_section(key):
 raise KeyError(key)
 self.remove_section(key)
 
 def __contains__(self, key):
- return key == DEFAULTSECT or self.has_section(key)
+ return key == self._default_section or self.has_section(key)
 
 def __len__(self):
 return len(self._sections) + 1 # the default section
 
 def __iter__(self):
 # XXX does it break when underlying container state changed?
- return itertools.chain((DEFAULTSECT,), self._sections.keys())
+ return itertools.chain((self._default_section,), self._sections.keys())
 
 def _read(self, fp, fpname):
 """Parse a sectioned configuration file.
@@ -806,7 +808,7 @@
 lineno)
 cursect = self._sections[sectname]
 elements_added.add(sectname)
- elif sectname == DEFAULTSECT:
+ elif sectname == self._default_section:
 cursect = self._defaults
 else:
 cursect = self._dict()
@@ -877,7 +879,7 @@
 try:
 d.update(self._sections[section])
 except KeyError:
- if section != DEFAULTSECT:
+ if section != self._default_section:
 raise NoSectionError(section)
 # Update with the entry specific variables
 if vars:
@@ -999,7 +1001,7 @@
 try:
 d.update(self._sections[section])
 except KeyError:
- if section != DEFAULTSECT:
+ if section != self._default_section:
 raise NoSectionError(section)
 # Update with the entry specific variables
 if vars:
Modified: python/branches/py3k/Lib/test/test_cfgparser.py
==============================================================================
--- python/branches/py3k/Lib/test/test_cfgparser.py	(original)
+++ python/branches/py3k/Lib/test/test_cfgparser.py	Sat Nov 20 17:15:37 2010
@@ -31,6 +31,7 @@
 empty_lines_in_values = True
 dict_type = configparser._default_dict
 strict = False
+ default_section = configparser.DEFAULTSECT
 
 def newconfig(self, defaults=None):
 arguments = dict(
@@ -41,6 +42,7 @@
 empty_lines_in_values=self.empty_lines_in_values,
 dict_type=self.dict_type,
 strict=self.strict,
+ default_section=self.default_section,
 )
 return self.config_class(**arguments)
 
@@ -76,7 +78,7 @@
 # mapping access
 L = [section for section in cf]
 L.sort()
- E.append(configparser.DEFAULTSECT)
+ E.append(self.default_section)
 E.sort()
 eq(L, E)
 
@@ -365,7 +367,7 @@
 L.sort()
 eq = self.assertEqual
 elem_eq = self.assertItemsEqual
- eq(L, ["A", "B", configparser.DEFAULTSECT, "a"])
+ eq(L, sorted(["A", "B", self.default_section, "a"]))
 eq(cf["a"].keys(), {"b"})
 eq(cf["a"]["b"], "value",
 "could not locate option, expecting case-insensitive option names")
@@ -399,11 +401,11 @@
 def test_default_case_sensitivity(self):
 cf = self.newconfig({"foo": "Bar"})
 self.assertEqual(
- cf.get("DEFAULT", "Foo"), "Bar",
+ cf.get(self.default_section, "Foo"), "Bar",
 "could not locate option, expecting case-insensitive option names")
 cf = self.newconfig({"Foo": "Bar"})
 self.assertEqual(
- cf.get("DEFAULT", "Foo"), "Bar",
+ cf.get(self.default_section, "Foo"), "Bar",
 "could not locate option, expecting case-insensitive defaults")
 
 def test_parse_errors(self):
@@ -530,7 +532,7 @@
 "[Long Line]\n"
 "foo{0[0]} this line is much, much longer than my editor\n"
 " likes it.\n"
- "[DEFAULT]\n"
+ "[{default_section}]\n"
 "foo{0[1]} another very\n"
 " long line\n"
 "[Long Line - With Comments!]\n"
@@ -538,7 +540,8 @@
 " also {comment} place\n"
 " comments {comment} in\n"
 " multiline {comment} values"
- "\n".format(self.delimiters, comment=self.comment_prefixes[0])
+ "\n".format(self.delimiters, comment=self.comment_prefixes[0],
+ default_section=self.default_section)
 )
 if self.allow_no_value:
 config_string += (
@@ -550,7 +553,7 @@
 output = io.StringIO()
 cf.write(output)
 expect_string = (
- "[DEFAULT]\n"
+ "[{default_section}]\n"
 "foo {equals} another very\n"
 "\tlong line\n"
 "\n"
@@ -563,7 +566,8 @@
 "\talso\n"
 "\tcomments\n"
 "\tmultiline\n"
- "\n".format(equals=self.delimiters[0])
+ "\n".format(equals=self.delimiters[0],
+ default_section=self.default_section)
 )
 if self.allow_no_value:
 expect_string += (
@@ -724,6 +728,9 @@
 delimiters = (':=', '$')
 comment_prefixes = ('//', '"')
 
+class ConfigParserTestCaseNonStandardDefaultSection(ConfigParserTestCase):
+ default_section = 'general'
+
 class MultilineValuesTestCase(BasicTestCase):
 config_class = configparser.ConfigParser
 wonderful_spam = ("I'm having spam spam spam spam "
@@ -851,13 +858,9 @@
 self.assertRaises(TypeError, cf.set, "sect", "option2", 1.0)
 self.assertRaises(TypeError, cf.set, "sect", "option2", object())
 
- def test_add_section_default_1(self):
- cf = self.newconfig()
- self.assertRaises(ValueError, cf.add_section, "default")
-
- def test_add_section_default_2(self):
+ def test_add_section_default(self):
 cf = self.newconfig()
- self.assertRaises(ValueError, cf.add_section, "DEFAULT")
+ self.assertRaises(ValueError, cf.add_section, self.default_section)
 
 class SafeConfigParserTestCaseNonStandardDelimiters(SafeConfigParserTestCase):
 delimiters = (':=', '$')
@@ -884,11 +887,12 @@
 'no values here',
 'tricky interpolation',
 'more interpolation'])
- self.assertEqual(cf.getint('DEFAULT', 'go',
+ self.assertEqual(cf.getint(self.default_section, 'go',
 vars={'interpolate': '-1'}), -1)
 with self.assertRaises(ValueError):
 # no interpolation will happen
- cf.getint('DEFAULT', 'go', raw=True, vars={'interpolate': '-1'})
+ cf.getint(self.default_section, 'go', raw=True,
+ vars={'interpolate': '-1'})
 self.assertEqual(len(cf.get('strange', 'other').split('\n')), 4)
 self.assertEqual(len(cf.get('corruption', 'value').split('\n')), 10)
 longname = 'yeah, sections can be indented as well'
@@ -997,6 +1001,7 @@
 Issue7005TestCase,
 StrictTestCase,
 CompatibleTestCase,
+ ConfigParserTestCaseNonStandardDefaultSection,
 )
 
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /