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

lukasz.langa python-checkins at python.org
Sat Dec 4 18:48:19 CET 2010


Author: lukasz.langa
Date: Sat Dec  4 18:48:18 2010
New Revision: 87057

Log:
configparser: mapping protocol access get() handles configparser-specific arguments as well


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 Dec  4 18:48:18 2010
@@ -1195,12 +1195,6 @@
         """Creates a view on a section of the specified `name` in `parser`."""
         self._parser = parser
         self._name = name
-        self.getint = functools.partial(self._parser.getint,
-                                        self._name)
-        self.getfloat = functools.partial(self._parser.getfloat,
-                                          self._name)
-        self.getboolean = functools.partial(self._parser.getboolean,
-                                            self._name)
 
     def __repr__(self):
         return '<Section: {}>'.format(self._name)
@@ -1231,6 +1225,22 @@
         # XXX does not break when underlying container state changed
         return self._parser.options(self._name).__iter__()
 
+    def get(self, option, fallback=None, *, raw=False, vars=None):
+        return self._parser.get(self._name, option, raw=raw, vars=vars,
+                                fallback=fallback)
+
+    def getint(self, option, fallback=None, *, raw=False, vars=None):
+        return self._parser.getint(self._name, option, raw=raw, vars=vars,
+                                   fallback=fallback)
+
+    def getfloat(self, option, fallback=None, *, raw=False, vars=None):
+        return self._parser.getfloat(self._name, option, raw=raw, vars=vars,
+                                     fallback=fallback)
+
+    def getboolean(self, option, fallback=None, *, raw=False, vars=None):
+        return self._parser.getboolean(self._name, option, raw=raw, vars=vars,
+                                       fallback=fallback)
+
     @property
     def parser(self):
         # The parser object of the proxy is read-only.

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 Dec  4 18:48:18 2010
@@ -160,6 +160,49 @@
            'this line is much, much longer than my editor\nlikes it.')
         if self.allow_no_value:
             eq(cf['NoValue']['option-without-value'], None)
+        # test vars= and fallback=
+        eq(cf['Foo Bar'].get('foo', 'baz'), 'bar1')
+        eq(cf['Foo Bar'].get('foo', fallback='baz'), 'bar1')
+        eq(cf['Foo Bar'].get('foo', vars={'foo': 'baz'}), 'baz')
+        with self.assertRaises(KeyError):
+            cf['No Such Foo Bar']['foo']
+        with self.assertRaises(KeyError):
+            cf['Foo Bar']['no-such-foo']
+        with self.assertRaises(KeyError):
+            cf['No Such Foo Bar'].get('foo', fallback='baz')
+        eq(cf['Foo Bar'].get('no-such-foo', 'baz'), 'baz')
+        eq(cf['Foo Bar'].get('no-such-foo', fallback='baz'), 'baz')
+        eq(cf['Spacey Bar'].get('foo', None), 'bar2')
+        eq(cf['Spacey Bar'].get('foo', fallback=None), 'bar2')
+        with self.assertRaises(KeyError):
+            cf['No Such Spacey Bar'].get('foo', None)
+        eq(cf['Types'].getint('int', 18), 42)
+        eq(cf['Types'].getint('int', fallback=18), 42)
+        eq(cf['Types'].getint('no-such-int', 18), 18)
+        eq(cf['Types'].getint('no-such-int', fallback=18), 18)
+        eq(cf['Types'].getint('no-such-int', "18"), "18") # sic!
+        eq(cf['Types'].getint('no-such-int', fallback="18"), "18") # sic!
+        self.assertAlmostEqual(cf['Types'].getfloat('float', 0.0), 0.44)
+        self.assertAlmostEqual(cf['Types'].getfloat('float',
+                                                    fallback=0.0), 0.44)
+        self.assertAlmostEqual(cf['Types'].getfloat('no-such-float', 0.0), 0.0)
+        self.assertAlmostEqual(cf['Types'].getfloat('no-such-float',
+                                                    fallback=0.0), 0.0)
+        eq(cf['Types'].getfloat('no-such-float', "0.0"), "0.0") # sic!
+        eq(cf['Types'].getfloat('no-such-float', fallback="0.0"), "0.0") # sic!
+        eq(cf['Types'].getboolean('boolean', True), False)
+        eq(cf['Types'].getboolean('boolean', fallback=True), False)
+        eq(cf['Types'].getboolean('no-such-boolean', "yes"), "yes") # sic!
+        eq(cf['Types'].getboolean('no-such-boolean', fallback="yes"),
+           "yes") # sic!
+        eq(cf['Types'].getboolean('no-such-boolean', True), True)
+        eq(cf['Types'].getboolean('no-such-boolean', fallback=True), True)
+        if self.allow_no_value:
+            eq(cf['NoValue'].get('option-without-value', False), None)
+            eq(cf['NoValue'].get('option-without-value', fallback=False), None)
+            eq(cf['NoValue'].get('no-such-option-without-value', False), False)
+            eq(cf['NoValue'].get('no-such-option-without-value',
+                      fallback=False), False)
 
         # Make sure the right things happen for remove_option();
         # added to include check for SourceForge bug #123324:


More information about the Python-checkins mailing list