Merge pull request #228 from anton-ryzhov/events
Some events refactoring
This commit is contained in:
commit
0a2737dc77
@ -6,14 +6,20 @@ Event Index
|
||||
|
||||
connected
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`~sleekxmpp.clientxmpp.ClientXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection has been made with the XMPP server, but a session
|
||||
has not yet been established.
|
||||
|
||||
connection_failed
|
||||
- **Data:** ``{}`` or ``Failure Stanza`` if available
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection can not be established after number of attempts.
|
||||
|
||||
changed_status
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
Triggered when a presence stanza is received from a JID with a show type
|
||||
different than the last presence stanza from the same JID.
|
||||
@ -65,7 +71,7 @@ Event Index
|
||||
|
||||
disconnected
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`~sleekxmpp.ClientXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that the connection with the XMPP server has been lost.
|
||||
|
||||
@ -93,7 +99,7 @@ Event Index
|
||||
|
||||
got_online
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
If a presence stanza is received from a JID which was previously marked as
|
||||
offline, and the presence has a show type of '``chat``', '``dnd``', '``away``',
|
||||
@ -101,7 +107,7 @@ Event Index
|
||||
|
||||
got_offline
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
Signal that an unavailable presence stanza has been received from a JID.
|
||||
|
||||
@ -158,7 +164,7 @@ Event Index
|
||||
|
||||
Triggered whenever a data form is received inside a message.
|
||||
|
||||
mucc::[room]::got_offline
|
||||
muc::[room]::got_offline
|
||||
- **Data:**
|
||||
- **Source:**
|
||||
|
||||
@ -236,15 +242,13 @@ Event Index
|
||||
|
||||
sent_presence
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`BaseXMPP <sleekxmpp.BaseXMPP>`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.multi.Roster`
|
||||
|
||||
Signal that an initial presence stanza has been written to the XML stream.
|
||||
|
||||
session_end
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`ClientXMPP <sleekxmpp.ClientXMPP>`,
|
||||
:py:class:`ComponentXMPP <sleekxmpp.ComponentXMPP>`
|
||||
:py:class:`XEP-0078 <sleekxmpp.plugins.xep_0078>`
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection to the XMPP server has been lost and the current
|
||||
stream session has ended. Currently equivalent to :term:`disconnected`, but
|
||||
|
@ -248,7 +248,6 @@ class ClientXMPP(BaseXMPP):
|
||||
callback = lambda resp: self._handle_roster(resp)
|
||||
|
||||
response = iq.send(block, timeout, callback)
|
||||
self.event('roster_received', response)
|
||||
|
||||
if block:
|
||||
self._handle_roster(response)
|
||||
|
@ -158,8 +158,8 @@ class ComponentXMPP(BaseXMPP):
|
||||
"""
|
||||
self.session_bind_event.set()
|
||||
self.session_started_event.set()
|
||||
self.event("session_bind", self.boundjid, direct=True)
|
||||
self.event("session_start")
|
||||
self.event('session_bind', self.boundjid, direct=True)
|
||||
self.event('session_start')
|
||||
|
||||
def _handle_probe(self, pres):
|
||||
self.roster[pres['to']][pres['from']].handle_probe(pres)
|
||||
|
@ -62,4 +62,4 @@ class FeatureBind(BasePlugin):
|
||||
log.debug("Established Session")
|
||||
self.xmpp.sessionstarted = True
|
||||
self.xmpp.session_started_event.set()
|
||||
self.xmpp.event("session_start")
|
||||
self.xmpp.event('session_start')
|
||||
|
@ -171,6 +171,7 @@ class FeatureMechanisms(BasePlugin):
|
||||
except sasl.SASLNoAppropriateMechanism:
|
||||
log.error("No appropriate login method.")
|
||||
self.xmpp.event("no_auth", direct=True)
|
||||
self.xmpp.event("failed_auth", direct=True)
|
||||
self.attempted_mechs = set()
|
||||
return self.xmpp.disconnect()
|
||||
except StringPrepError:
|
||||
|
@ -51,4 +51,4 @@ class FeatureSession(BasePlugin):
|
||||
log.debug("Established Session")
|
||||
self.xmpp.sessionstarted = True
|
||||
self.xmpp.session_started_event.set()
|
||||
self.xmpp.event("session_start")
|
||||
self.xmpp.event('session_start')
|
||||
|
@ -559,7 +559,7 @@ class XMLStream(object):
|
||||
|
||||
self.set_socket(self.socket, ignore=True)
|
||||
#this event is where you should set your application state
|
||||
self.event("connected", direct=True)
|
||||
self.event('connected', direct=True)
|
||||
return True
|
||||
except (Socket.error, ssl.SSLError) as serr:
|
||||
error_msg = "Could not connect to %s:%s. Socket Error #%s: %s"
|
||||
@ -610,6 +610,7 @@ class XMLStream(object):
|
||||
lines = resp.split('\r\n')
|
||||
if '200' not in lines[0]:
|
||||
self.event('proxy_error', resp)
|
||||
self.event('connection_failed', direct=True)
|
||||
log.error('Proxy Error: %s', lines[0])
|
||||
return False
|
||||
|
||||
@ -717,7 +718,7 @@ class XMLStream(object):
|
||||
self.event('socket_error', serr, direct=True)
|
||||
finally:
|
||||
#clear your application state
|
||||
self.event("disconnected", direct=True)
|
||||
self.event('disconnected', direct=True)
|
||||
return True
|
||||
|
||||
def abort(self):
|
||||
@ -1130,6 +1131,8 @@ class XMLStream(object):
|
||||
event queue. All event handlers will run in the
|
||||
same thread.
|
||||
"""
|
||||
log.debug("Event triggered: " + name)
|
||||
|
||||
handlers = self.__event_handlers.get(name, [])
|
||||
for handler in handlers:
|
||||
#TODO: Data should not be copied, but should be read only,
|
||||
|
@ -19,16 +19,9 @@ class TestStreamRoster(SleekTest):
|
||||
"""Test handling roster requests."""
|
||||
self.stream_start(mode='client', jid='tester@localhost')
|
||||
|
||||
events = []
|
||||
roster_updates = []
|
||||
|
||||
def roster_received(iq):
|
||||
events.append('roster_received')
|
||||
|
||||
def roster_update(iq):
|
||||
events.append('roster_update')
|
||||
|
||||
self.xmpp.add_event_handler('roster_received', roster_received)
|
||||
self.xmpp.add_event_handler('roster_update', roster_update)
|
||||
self.xmpp.add_event_handler('roster_update', roster_updates.append)
|
||||
|
||||
# Since get_roster blocks, we need to run it in a thread.
|
||||
t = threading.Thread(name='get_roster', target=self.xmpp.get_roster)
|
||||
@ -66,8 +59,8 @@ class TestStreamRoster(SleekTest):
|
||||
# Give the event queue time to process.
|
||||
time.sleep(.1)
|
||||
|
||||
self.failUnless(events == ['roster_received', 'roster_update'],
|
||||
"Wrong roster events fired: %s" % events)
|
||||
self.failUnless(len(roster_updates) == 1,
|
||||
"Wrong number of roster_update events fired: %s (should be 1)" % len(roster_updates))
|
||||
|
||||
def testRosterSet(self):
|
||||
"""Test handling pushed roster updates."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user