瀏覽代碼

Also try to expand the default value in saneget()

Mike Naberezny 10 年之前
父節點
當前提交
5bf10bf066
共有 2 個文件被更改,包括 30 次插入10 次删除
  1. 10 8
      supervisor/options.py
  2. 20 2
      supervisor/tests/test_options.py

+ 10 - 8
supervisor/options.py

@@ -1650,20 +1650,22 @@ class UnhosedConfigParser(ConfigParser.RawConfigParser):
 
     def saneget(self, section, option, default=_marker, do_expand=True,
                 expansions={}):
-        combined_expansions = dict(
-            list(self.expansions.items()) + list(expansions.items()))
         try:
             optval = self.get(section, option)
-            if isinstance(optval, basestring) and do_expand:
-                return expand(optval,
-                              combined_expansions,
-                              "%s.%s" % (section, option))
-            return optval
         except ConfigParser.NoOptionError:
             if default is _marker:
                 raise
             else:
-                return default
+                optval = default
+
+        if do_expand and isinstance(optval, basestring):
+            combined_expansions = dict(
+                list(self.expansions.items()) + list(expansions.items()))
+
+            optval = expand(optval, combined_expansions,
+                           "%s.%s" % (section, option))
+
+        return optval
 
     def getdefault(self, option, default=_marker, expansions={}, **kwargs):
         return self.saneget(self.mysection, option, default=default,

+ 20 - 2
supervisor/tests/test_options.py

@@ -2357,13 +2357,31 @@ class UnhosedConfigParserTests(unittest.TestCase):
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
+    def test_saneget_no_default(self):
+        parser = self._makeOne()
+        parser.read_string("[supervisord]\n")
+        from supervisor.compat import ConfigParser
+        self.assertRaises(ConfigParser.NoOptionError,
+            parser.saneget, "supervisord", "missing")
+
+    def test_saneget_with_default(self):
+        parser = self._makeOne()
+        parser.read_string("[supervisord]\n")
+        result = parser.saneget("supervisord", "missing", default="abc")
+        self.assertEqual(result, "abc")
+
+    def test_getdefault_does_saneget_with_mysection(self):
+        parser = self._makeOne()
+        parser.read_string("[%s]\nfoo=bar\n" % parser.mysection)
+        self.assertEqual(parser.getdefault("foo"), "bar")
+
     def test_read_filenames_as_string(self):
         f = tempfile.NamedTemporaryFile(mode="w+")
-        config = self._makeOne()
+        parser = self._makeOne()
         try:
             f.write("[foo]\n")
             f.flush()
-            ok_filenames = config.read(f.name)
+            ok_filenames = parser.read(f.name)
         finally:
             f.close()
         self.assertEqual(ok_filenames, [f.name])