commit 0efbdf80f94574805b0fa080965bb509d535a4db Author: Damian Johnson atagar@torproject.org Date: Sun May 26 21:27:43 2013 -0700
Allowing ControlMessage.from_str() to include conversion
For txtorcon or anything else using our ControlMessage.from_str() function the following is very, very common...
msg = stem.response.ControlMessage.from_str(getinfo_content) stem.response.convert("GETINFO", msg)
Adding a 'msg_type' argument to from_str() so the two calls can be combined. This addresses...
https://trac.torproject.org/8605 --- stem/response/__init__.py | 11 +++++++++-- test/output.py | 2 +- test/unit/response/control_message.py | 12 ++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/stem/response/__init__.py b/stem/response/__init__.py index 01af23e..5e0d077 100644 --- a/stem/response/__init__.py +++ b/stem/response/__init__.py @@ -136,16 +136,23 @@ class ControlMessage(object): """
@staticmethod - def from_str(content): + def from_str(content, msg_type = None, **kwargs): """ Provides a ControlMessage for the given content.
:param str content: message to construct the message from + :param str msg_type: type of tor reply to parse the content as + :param kwargs: optional keyword arguments to be passed to the parser method
:returns: stem.response.ControlMessage instance """
- return stem.socket.recv_message(StringIO.StringIO(content)) + msg = stem.socket.recv_message(StringIO.StringIO(content)) + + if msg_type is not None: + convert(msg_type, msg, **kwargs) + + return msg
def __init__(self, parsed_content, raw_content): if not parsed_content: diff --git a/test/output.py b/test/output.py index 7cd00b7..3f5efee 100644 --- a/test/output.py +++ b/test/output.py @@ -133,7 +133,7 @@ def strip_module(line_type, line_content): repetitive, and redundant with the headers. """
- m = re.match(".*( (.*?)).*", line_content) + m = re.match(".*( (test..*?)).*", line_content)
if m: line_content = line_content.replace(m.groups()[0], "", 1) diff --git a/test/unit/response/control_message.py b/test/unit/response/control_message.py index 75a5f6e..33b2008 100644 --- a/test/unit/response/control_message.py +++ b/test/unit/response/control_message.py @@ -7,6 +7,8 @@ import StringIO import unittest
import stem.socket +import stem.response +import stem.response.getinfo
OK_REPLY = "250 OK\r\n"
@@ -32,6 +34,16 @@ version -- The current version of Tor.
class TestControlMessage(unittest.TestCase): + def test_from_str(self): + msg = stem.response.ControlMessage.from_str(GETINFO_VERSION) + + self.assertTrue(isinstance(msg, stem.response.ControlMessage)) + self.assertEqual('version=0.2.2.23-alpha (git-b85eb949b528f4d7)\nOK', str(msg)) + + msg = stem.response.ControlMessage.from_str(GETINFO_VERSION, "GETINFO") + self.assertTrue(isinstance(msg, stem.response.getinfo.GetInfoResponse)) + self.assertEqual({'version': '0.2.2.23-alpha (git-b85eb949b528f4d7)'}, msg.entries) + def test_ok_response(self): """ Checks the basic 'OK' response that we get for most commands.
tor-commits@lists.torproject.org