Просмотр исходного кода

Merge pull request #515 from msabramo/pinpoint_unexpected_end_of_key_value_pairs_error

More info in "Unexpected end of key/value pairs" error
Conflicts:
	supervisor/datatypes.py

Conflicts:
	CHANGES.txt
	supervisor/datatypes.py
Mike Naberezny 10 лет назад
Родитель
Сommit
086e19db18
4 измененных файлов с 34 добавлено и 1 удалено
  1. 3 0
      CHANGES.txt
  2. 2 1
      supervisor/datatypes.py
  3. 8 0
      supervisor/options.py
  4. 21 0
      supervisor/tests/test_options.py

+ 3 - 0
CHANGES.txt

@@ -8,6 +8,9 @@
 - Environment variables are now expanded for all config file options.
   Patch by Dexter Tad-y.
 
+- Errors caused by bad values in a config file now show the config section
+  to make debugging easier.  Patch by Marc Abramowitz.
+
 3.1.3 (2014-10-28)
 ------------------
 

+ 2 - 1
supervisor/datatypes.py

@@ -82,7 +82,8 @@ def dict_of_key_value_pairs(arg):
     while i < tokens_len:
         k_eq_v = tokens[i:i+3]
         if len(k_eq_v) != 3 or k_eq_v[1] != '=':
-            raise ValueError("Unexpected end of key/value pairs")
+            raise ValueError(
+                "Unexpected end of key/value pairs in value '%s'" % arg)
         D[k_eq_v[0]] = k_eq_v[2].strip('\'"')
         i += 4
     return D

+ 8 - 0
supervisor/options.py

@@ -800,6 +800,14 @@ class ServerOptions(Options):
 
     def processes_from_section(self, parser, section, group_name,
                                klass=None):
+        try:
+            return self._processes_from_section(
+                parser, section, group_name, klass)
+        except ValueError, e:
+            raise ValueError('%s in section %r' % (e, section))
+
+    def _processes_from_section(self, parser, section, group_name,
+                                klass=None):
         if klass is None:
             klass = ProcessConfig
         programs = []

+ 21 - 0
supervisor/tests/test_options.py

@@ -1181,6 +1181,27 @@ class ServerOptionsTests(unittest.TestCase):
         self.assertRaises(ValueError, instance.processes_from_section,
                           config, 'program:foo', None)
 
+    def test_processes_from_section_unexpected_end_of_key_value_pairs(self):
+        instance = self._makeOne()
+        text = lstrip("""\
+        [program:foo]
+        command = /bin/cat
+        environment = KEY1=val1,KEY2=val2,KEY3
+        """)
+        from supervisor.options import UnhosedConfigParser
+        config = UnhosedConfigParser()
+        config.read_string(text)
+        try:
+            instance.processes_from_section(config, 'program:foo', None)
+        except ValueError, e:
+            self.assertEqual(
+                str(e),
+                "Unexpected end of key/value pairs in value "
+                "'KEY1=val1,KEY2=val2,KEY3' in section 'program:foo'")
+        else:
+            self.fail('instance.processes_from_section should '
+                      'raise a ValueError')
+
     def test_processes_from_autolog_without_rollover(self):
         instance = self._makeOne()
         text = lstrip("""\