summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2010-10-01 11:15:51 -0400
committerLance Stout <lancestout@gmail.com>2010-10-01 11:15:51 -0400
commitfcdd57ce543b4797114868c1af8209e8cc92d0dd (patch)
treeadf2b169d400034e69085fddc41d7879e5037b8b
parent5522443e0e122093080032037a783ab3d2718d3f (diff)
downloadslixmpp-fcdd57ce543b4797114868c1af8209e8cc92d0dd.tar.gz
slixmpp-fcdd57ce543b4797114868c1af8209e8cc92d0dd.tar.bz2
slixmpp-fcdd57ce543b4797114868c1af8209e8cc92d0dd.tar.xz
slixmpp-fcdd57ce543b4797114868c1af8209e8cc92d0dd.zip
Moved add_handler, send, and sendXML to XMLStream.
-rw-r--r--sleekxmpp/basexmpp.py24
-rw-r--r--sleekxmpp/xmlstream/xmlstream.py68
2 files changed, 68 insertions, 24 deletions
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py
index a522f822..51607d78 100644
--- a/sleekxmpp/basexmpp.py
+++ b/sleekxmpp/basexmpp.py
@@ -114,30 +114,6 @@ class basexmpp(object):
for plugin in self.plugin:
self.plugin[plugin].post_init()
- def add_handler(self, mask, pointer, name=None, disposable=False, threaded=False, filter=False, instream=False):
- # threaded is no longer needed, but leaving it for backwards compatibility for now
- if name is None:
- name = 'add_handler_%s' % self.getNewId()
- self.registerHandler(XMLCallback(name, MatchXMLMask(mask), pointer, once=disposable, instream=instream))
-
- def sendXML(self, data, mask=None, timeout=10):
- return self.send(tostring(data), mask, timeout)
-
- def send(self, data, mask=None, timeout=10):
- #logging.warning("Deprecated send used for \"%s\"" % (data,))
- #if not type(data) == type(''):
- # data = self.tostring(data)
- if hasattr(mask, 'xml'):
- mask = mask.xml
- data = str(data)
- if mask is not None:
- logging.warning("Use of send mask waiters is deprecated")
- waitfor = Waiter('SendWait_%s' % self.getNewId(), MatchXMLMask(mask))
- self.registerHandler(waitfor)
- self.sendRaw(data)
- if mask is not None:
- return waitfor.wait(timeout)
-
def makeIq(self, id=0, ifrom=None):
return self.Iq().setStanzaValues({'id': str(id), 'from': ifrom})
diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py
index 5531b1d2..fc6a374c 100644
--- a/sleekxmpp/xmlstream/xmlstream.py
+++ b/sleekxmpp/xmlstream/xmlstream.py
@@ -148,6 +148,7 @@ class XMLStream(object):
self.sendRaw = self.send_raw
self.getId = self.get_id
self.getNewId = self.new_id
+ self.sendXML = self.send_xml
self.ssl_support = SSL_SUPPORT
@@ -376,6 +377,30 @@ class XMLStream(object):
"""
del self.__root_stanza[stanza_class]
+ def add_handler(self, mask, pointer, name=None, disposable=False,
+ threaded=False, filter=False, instream=False):
+ """
+ A shortcut method for registering a handler using XML masks.
+
+ Arguments:
+ mask -- An XML snippet matching the structure of the
+ stanzas that will be passed to this handler.
+ pointer -- The handler function itself.
+ name -- A unique name for the handler. A name will
+ be generated if one is not provided.
+ disposable -- Indicates if the handler should be discarded
+ after one use.
+ threaded -- Deprecated. Remains for backwards compatibility.
+ filter -- Deprecated. Remains for backwards compatibility.
+ instream -- Indicates if the handler should execute during
+ stream processing and not during normal event
+ processing.
+ """
+ if name is None:
+ name = 'add_handler_%s' % self.getNewId()
+ self.registerHandler(XMLCallback(name, MatchXMLMask(mask), pointer,
+ once=disposable, instream=instream))
+
def register_handler(self, handler, before=None, after=None):
"""
Add a stream event handler that will be executed when a matching
@@ -432,6 +457,33 @@ class XMLStream(object):
"""
return xml
+ def send(self, data, mask, timeout=RESPONSE_TIMEOUT):
+ """
+ A wrapper for send_raw for sending stanza objects.
+
+ May optionally block until an expected response is received.
+
+ Arguments:
+ data -- The stanza object to send on the stream.
+ mask -- Deprecated. An XML snippet matching the structure
+ of the expected response. Execution will block
+ in this thread until the response is received
+ or a timeout occurs.
+ timeout -- Time in seconds to wait for a response before
+ continuing. Defaults to RESPONSE_TIMEOUT.
+ """
+ if hasattr(mask, 'xml'):
+ mask = mask.xml
+ data = str(data)
+ if mask is not None:
+ logging.warning("Use of send mask waiters is deprecated.")
+ wait_for = Waiter("SendWait_%s" % self.new_id(),
+ MatchXMLMask(mask))
+ self.register_handler(wait_for)
+ self.send_raw(data)
+ if mask is not None:
+ return wait_for.wait(timeout)
+
def send_raw(self, data):
"""
Send raw data across the stream.
@@ -442,6 +494,22 @@ class XMLStream(object):
self.send_queue.put(data)
return True
+ def send_xml(self, data, mask=None, timeout=RESPONSE_TIMEOUT):
+ """
+ Send an XML object on the stream, and optionally wait
+ for a response.
+
+ Arguments:
+ data -- The XML object to send on the stream.
+ mask -- Deprecated. An XML snippet matching the structure
+ of the expected response. Execution will block
+ in this thread until the response is received
+ or a timeout occurs.
+ timeout -- Time in seconds to wait for a response before
+ continuing. Defaults to RESPONSE_TIMEOUT.
+ """
+ return self.send(tostring(data), mask, timeout)
+
def process(self, threaded=True):
"""
Initialize the XML streams and begin processing events.