Permalink
Browse files

Adjust get_roster to always return, even with invalid JIDs

Issue #245
  • Loading branch information...
legastero committed Jun 30, 2013
1 parent 669e708 commit cedc9dd175afba02e7beba21dc9eb4de1e63623d
Showing with 17 additions and 8 deletions.
  1. +14 −5 sleekxmpp/clientxmpp.py
  2. +3 −3 tests/test_stream_roster.py
View
@@ -96,6 +96,7 @@ def __init__(self, jid, password, plugin_config={}, plugin_whitelist=[],
self.add_event_handler('connected', self._reset_connection_state)
self.add_event_handler('session_bind', self._handle_session_bind)
self.add_event_handler('roster_update', self._handle_roster)
self.register_stanza(StreamFeatures)
@@ -106,7 +107,7 @@ def __init__(self, jid, password, plugin_config={}, plugin_whitelist=[],
self.register_handler(
Callback('Roster Update',
StanzaPath('iq@type=set/roster'),
self._handle_roster))
lambda iq: self.event('roster_update', iq)))
# Setup default stream features
self.register_plugin('feature_starttls')
@@ -244,13 +245,22 @@ def get_roster(self, block=True, timeout=None, callback=None):
if 'rosterver' in self.features:
iq['roster']['ver'] = self.client_roster.version
if not block and callback is None:
callback = lambda resp: self._handle_roster(resp)
if not block or callback is not None:
block = False
if callback is None:
callback = lambda resp: self.event('roster_update', resp)
else:
orig_cb = callback
def wrapped(resp):
self.event('roster_update', resp)
orig_cb(resp)
callback = wrapped
response = iq.send(block, timeout, callback)
if block:
self._handle_roster(response)
self.event('roster_update', response)
return response
def _reset_connection_state(self, event=None):
@@ -301,7 +311,6 @@ def _handle_roster(self, iq):
roster[jid].save(remove=(item['subscription'] == 'remove'))
self.event("roster_update", iq)
if iq['type'] == 'set':
resp = self.Iq(stype='result',
sto=iq['from'],
@@ -49,16 +49,16 @@ def testGetRoster(self):
# Wait for get_roster to return.
t.join()
# Give the event queue time to process.
time.sleep(.1)
self.check_roster('tester@localhost', 'user@localhost',
name='User',
subscription='from',
afrom=True,
pending_out=True,
groups=['Friends', 'Examples'])
# Give the event queue time to process.
time.sleep(.1)
self.failUnless(len(roster_updates) == 1,
"Wrong number of roster_update events fired: %s (should be 1)" % len(roster_updates))

0 comments on commit cedc9dd

Please sign in to comment.