[tor-commits] [stem/master] Add set_conf wrapper method

atagar at torproject.org atagar at torproject.org
Sun Jul 8 20:14:44 UTC 2012


commit 4ed9a1fba65257ccd0caba41da79ac6b879737f2
Author: Ravi Chandra Padmala <neenaoffline at gmail.com>
Date:   Thu Jun 21 13:58:23 2012 +0530

    Add set_conf wrapper method
---
 stem/control.py |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index 5e88ef5..e5ed132 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -661,6 +661,45 @@ class Controller(BaseController):
     except stem.socket.ControllerError, exc:
       if default != UNDEFINED: return default
       else: raise exc
+  
+  def set_conf(self, *args):
+    """
+    Changes the configuration of one or more configuration variables using the
+    control socket.
+
+    :param dict options: a dictionary containing a mapping of configuration keys (string)
+      to the corresponding values (string or list of strings)
+
+    Or
+
+    :param str key: configuration key
+    :param str value: configuration value
+
+    :returns: True on successfully setting the values
+
+    :raises:
+      :class:`stem.socket.ControllerError` if the call fails
+      :class:`stem.socket.InvalidArguments` if configuration options requested was invalid
+      :class:`stem.socket.InvalidRequest` if the configuration setting is
+        impossible or if there's a syntax error in the configuration values
+    """
+
+    if len(args) == 2:
+      options = {args[0]: args[1]}
+    elif len(args) == 1:
+      options = args[0]
+    else:
+      raise TypeError("set_conf expected 1 or 2 arguments, got %d", len(args))
+
+    response = self.msg("SETCONF %s" % " ".join(["=".join(opts) for opts in args.items()]))
+    stem.response.convert("SINGLELINE", response)
+
+    if response.is_ok():
+      return True
+    elif response.code in ("513", "552", "553"):
+      raise InvalidRequest(response.code, response.message)
+    else:
+      raise ProtocolError("SETCONF returned unexpected status code")
 
 def _case_insensitive_lookup(entries, key):
   """





More information about the tor-commits mailing list