[tor-commits] [stem/master] Better exception when calling set_conf() with the wrong type

atagar at torproject.org atagar at torproject.org
Sat Mar 24 00:59:33 UTC 2018


commit 9b4a7fe6b720665eae7fdf5e378b9dbcab5ebc4a
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Mar 23 13:37:05 2018 -0700

    Better exception when calling set_conf() with the wrong type
    
    When calling set_conf() with other types, say an integer value, we failed
    internally with...
    
      ======================================================================
      ERROR: test_transition_to_relay
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/integ/control/controller.py", line 1411, in test_transition_to_relay
          controller.set_conf('OrPort', test.runner.ORPORT)
        File "/home/atagar/Desktop/stem/stem/control.py", line 2332, in set_conf
          self.set_options({param: value}, False)
        File "/home/atagar/Desktop/stem/stem/control.py", line 2395, in set_options
          query_comp.extend(['%s="%s"' % (param, val.strip()) for val in value])
      TypeError: 'int' object is not iterable
    
    This is porbably a reasonably common mistake so providing a better response...
    
      ======================================================================
      ERROR: test_transition_to_relay
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/integ/control/controller.py", line 1411, in test_transition_to_relay
          controller.set_conf('OrPort', test.runner.ORPORT)
        File "/home/atagar/Desktop/stem/stem/control.py", line 2332, in set_conf
          self.set_options({param: value}, False)
        File "/home/atagar/Desktop/stem/stem/control.py", line 2399, in set_options
          raise ValueError("Cannot set %s to %s since the value was a %s but we only accept strings" % (param, value, type(value).__name__))
      ValueError: Cannot set OrPort to 1113 since the value was a int but we only accept strings
---
 stem/control.py                  | 6 ++++--
 test/integ/control/controller.py | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index 5ccc318f..8d25064b 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -2391,10 +2391,12 @@ class Controller(BaseController):
     for param, value in params:
       if isinstance(value, str):
         query_comp.append('%s="%s"' % (param, value.strip()))
-      elif value:
+      elif isinstance(value, collections.Iterable):
         query_comp.extend(['%s="%s"' % (param, val.strip()) for val in value])
-      else:
+      elif not value:
         query_comp.append(param)
+      else:
+        raise ValueError('Cannot set %s to %s since the value was a %s but we only accept strings' % (param, value, type(value).__name__))
 
     query = ' '.join(query_comp)
     response = self.msg(query)
diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index 8042e858..5f823eea 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -1408,7 +1408,7 @@ class TestController(unittest.TestCase):
         controller.reset_conf('OrPort', 'DisableNetwork')
         self.assertEqual(None, controller.get_conf('OrPort'))
       finally:
-        controller.set_conf('OrPort', test.runner.ORPORT)
+        controller.set_conf('OrPort', str(test.runner.ORPORT))
 
   def _get_router_status_entry(self, controller):
     """





More information about the tor-commits mailing list