summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2010-11-17 15:13:09 -0500
committerLance Stout <lancestout@gmail.com>2010-11-17 15:13:09 -0500
commit6ee8a2980c2a7c9a8c65453b1d2c551717069ce5 (patch)
tree2721ea1d493ecb9d1d8ab40098403b60b3f02f7f
parentb8114b25ed28437248322aad50209f737faa392c (diff)
downloadslixmpp-6ee8a2980c2a7c9a8c65453b1d2c551717069ce5.tar.gz
slixmpp-6ee8a2980c2a7c9a8c65453b1d2c551717069ce5.tar.bz2
slixmpp-6ee8a2980c2a7c9a8c65453b1d2c551717069ce5.tar.xz
slixmpp-6ee8a2980c2a7c9a8c65453b1d2c551717069ce5.zip
Fix RESPONSE_TIMEOUT dependency loops.
-rw-r--r--sleekxmpp/stanza/iq.py6
-rw-r--r--sleekxmpp/xmlstream/handler/waiter.py7
-rw-r--r--sleekxmpp/xmlstream/xmlstream.py15
3 files changed, 20 insertions, 8 deletions
diff --git a/sleekxmpp/stanza/iq.py b/sleekxmpp/stanza/iq.py
index 614d14f5..150baa00 100644
--- a/sleekxmpp/stanza/iq.py
+++ b/sleekxmpp/stanza/iq.py
@@ -8,7 +8,7 @@
from sleekxmpp.stanza import Error
from sleekxmpp.stanza.rootstanza import RootStanza
-from sleekxmpp.xmlstream import RESPONSE_TIMEOUT, StanzaBase, ET
+from sleekxmpp.xmlstream import StanzaBase, ET
from sleekxmpp.xmlstream.handler import Waiter
from sleekxmpp.xmlstream.matcher import MatcherId
@@ -157,7 +157,7 @@ class Iq(RootStanza):
StanzaBase.reply(self)
return self
- def send(self, block=True, timeout=RESPONSE_TIMEOUT):
+ def send(self, block=True, timeout=None):
"""
Send an <iq> stanza over the XML stream.
@@ -174,6 +174,8 @@ class Iq(RootStanza):
before exiting the send call if blocking is used.
Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
"""
+ if timeout is None:
+ timeout = self.stream.response_timeout
if block and self['type'] in ('get', 'set'):
waitfor = Waiter('IqWait_%s' % self['id'], MatcherId(self['id']))
self.stream.registerHandler(waitfor)
diff --git a/sleekxmpp/xmlstream/handler/waiter.py b/sleekxmpp/xmlstream/handler/waiter.py
index a4bc3545..341c01fe 100644
--- a/sleekxmpp/xmlstream/handler/waiter.py
+++ b/sleekxmpp/xmlstream/handler/waiter.py
@@ -12,7 +12,7 @@ try:
except ImportError:
import Queue as queue
-from sleekxmpp.xmlstream import StanzaBase, RESPONSE_TIMEOUT
+from sleekxmpp.xmlstream import StanzaBase
from sleekxmpp.xmlstream.handler.base import BaseHandler
@@ -69,7 +69,7 @@ class Waiter(BaseHandler):
"""
pass
- def wait(self, timeout=RESPONSE_TIMEOUT):
+ def wait(self, timeout=None):
"""
Block an event handler while waiting for a stanza to arrive.
@@ -84,6 +84,9 @@ class Waiter(BaseHandler):
arrive. Defaults to the global default timeout
value sleekxmpp.xmlstream.RESPONSE_TIMEOUT.
"""
+ if timeout is None:
+ timeout = self.stream.response_timeout
+
try:
stanza = self._payload.get(True, timeout)
except queue.Empty:
diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py
index 30b76ce7..9ae31a20 100644
--- a/sleekxmpp/xmlstream/xmlstream.py
+++ b/sleekxmpp/xmlstream/xmlstream.py
@@ -25,6 +25,8 @@ except ImportError:
from sleekxmpp.thirdparty.statemachine import StateMachine
from sleekxmpp.xmlstream import Scheduler, tostring
from sleekxmpp.xmlstream.stanzabase import StanzaBase, ET
+from sleekxmpp.xmlstream.handler import Waiter, XMLCallback
+from sleekxmpp.xmlstream.matcher import MatchXMLMask
# In Python 2.x, file socket objects are broken. A patched socket
# wrapper is provided for this case in filesocket.py.
@@ -162,6 +164,8 @@ class XMLStream(object):
self.ssl_support = SSL_SUPPORT
self.ssl_version = ssl.PROTOCOL_TLSv1
+ self.response_timeout = RESPONSE_TIMEOUT
+
self.state = StateMachine(('disconnected', 'connected'))
self.state._set_state('disconnected')
@@ -458,8 +462,6 @@ class XMLStream(object):
"""
# To prevent circular dependencies, we must load the matcher
# and handler classes here.
- from sleekxmpp.xmlstream.matcher import MatchXMLMask
- from sleekxmpp.xmlstream.handler import XMLCallback
if name is None:
name = 'add_handler_%s' % self.getNewId()
@@ -606,7 +608,7 @@ class XMLStream(object):
"""
return xml
- def send(self, data, mask=None, timeout=RESPONSE_TIMEOUT):
+ def send(self, data, mask=None, timeout=None):
"""
A wrapper for send_raw for sending stanza objects.
@@ -621,6 +623,9 @@ class XMLStream(object):
timeout -- Time in seconds to wait for a response before
continuing. Defaults to RESPONSE_TIMEOUT.
"""
+ if timeout is None:
+ timeout = self.response_timeout
+
if hasattr(mask, 'xml'):
mask = mask.xml
data = str(data)
@@ -643,7 +648,7 @@ class XMLStream(object):
self.send_queue.put(data)
return True
- def send_xml(self, data, mask=None, timeout=RESPONSE_TIMEOUT):
+ def send_xml(self, data, mask=None, timeout=None):
"""
Send an XML object on the stream, and optionally wait
for a response.
@@ -657,6 +662,8 @@ class XMLStream(object):
timeout -- Time in seconds to wait for a response before
continuing. Defaults to RESPONSE_TIMEOUT.
"""
+ if timeout is None:
+ timeout = self.response_timeout
return self.send(tostring(data), mask, timeout)
def process(self, threaded=True):