فهرست منبع

Clean up parsing extras in get_plugins() and add a test

Mike Naberezny 10 سال پیش
والد
کامیت
ca868ceeda
2فایلهای تغییر یافته به همراه29 افزوده شده و 11 حذف شده
  1. 7 10
      supervisor/options.py
  2. 22 1
      supervisor/tests/test_options.py

+ 7 - 10
supervisor/options.py

@@ -360,6 +360,7 @@ class Options:
         for section in parser.sections():
             if not section.startswith(section_prefix):
                 continue
+
             name = section.split(':', 1)[1]
             factory_spec = parser.saneget(section, factory_key, None)
             if factory_spec is None:
@@ -370,16 +371,12 @@ class Options:
             except ImportError:
                 raise ValueError('%s cannot be resolved within [%s]' % (
                     factory_spec, section))
-            items_tmp = parser.items(section)
-            items = []
-            for ikv in items_tmp:
-                ik, iv_tmp = ikv
-                iexpansions = {}
-                iexpansions.update(environ_expansions())
-                iv = expand(iv_tmp, iexpansions, ik)
-                items.append((ik, iv))
-            items.remove((factory_key, factory_spec))
-            factories.append((name, factory, dict(items)))
+
+            extras = {}
+            for k in parser.options(section):
+                if k != factory_key:
+                    extras[k] = parser.saneget(section, k)
+            factories.append((name, factory, extras))
 
         return factories
 

+ 22 - 1
supervisor/tests/test_options.py

@@ -1971,6 +1971,7 @@ class ServerOptionsTests(unittest.TestCase):
         [rpcinterface:dummy]
         supervisor.rpcinterface_factory = %s
         foo = bar
+        baz = qux
         """ % __name__)
         from supervisor.options import UnhosedConfigParser
         config = UnhosedConfigParser()
@@ -1983,7 +1984,27 @@ class ServerOptionsTests(unittest.TestCase):
         factory = factories[0]
         self.assertEqual(factory[0], 'dummy')
         self.assertEqual(factory[1], sys.modules[__name__])
-        self.assertEqual(factory[2], {'foo':'bar'})
+        self.assertEqual(factory[2], {'foo':'bar', 'baz':'qux'})
+
+    def test_rpcinterfaces_from_parser_factory_expansions(self):
+        text = lstrip("""\
+        [rpcinterface:dummy]
+        supervisor.rpcinterface_factory = %(factory)s
+        foo = %(pet)s
+        """)
+        from supervisor.options import UnhosedConfigParser
+        instance = self._makeOne()
+        config = UnhosedConfigParser()
+        config.expansions = {'factory': __name__, 'pet': 'cat'}
+        config.read_string(text)
+        factories = instance.get_plugins(config,
+                                         'supervisor.rpcinterface_factory',
+                                         'rpcinterface:')
+        self.assertEqual(len(factories), 1)
+        factory = factories[0]
+        self.assertEqual(factory[0], 'dummy')
+        self.assertEqual(factory[1], sys.modules[__name__])
+        self.assertEqual(factory[2], {'foo': 'cat'})
 
     def test_clear_autochildlogdir(self):
         dn = tempfile.mkdtemp()