From 01356d23e5468ca8cc6f3edf37f847f04f35a70d Mon Sep 17 00:00:00 2001 From: Anton Ryzhov Date: Thu, 28 Mar 2013 20:44:37 +0400 Subject: Log events triggering --- sleekxmpp/xmlstream/xmlstream.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 289e3a21..e55e78e7 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -1130,6 +1130,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, -- cgit v1.2.3 From c0d02d99354780dfd0ca1cfa96222c626eb3be48 Mon Sep 17 00:00:00 2001 From: Anton Ryzhov Date: Thu, 28 Mar 2013 21:05:37 +0400 Subject: Remove `roster_received` event --- sleekxmpp/clientxmpp.py | 1 - tests/test_stream_roster.py | 17 +++++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/sleekxmpp/clientxmpp.py b/sleekxmpp/clientxmpp.py index ae3803ef..905e1944 100644 --- a/sleekxmpp/clientxmpp.py +++ b/sleekxmpp/clientxmpp.py @@ -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) diff --git a/tests/test_stream_roster.py b/tests/test_stream_roster.py index 652ea1ce..3d1447a3 100644 --- a/tests/test_stream_roster.py +++ b/tests/test_stream_roster.py @@ -19,16 +19,9 @@ class TestStreamRoster(SleekTest): """Test handling roster requests.""" self.stream_start(mode='client', jid='tester@localhost') - events = [] - - def roster_received(iq): - events.append('roster_received') + roster_updates = [] - 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.""" @@ -156,7 +149,7 @@ class TestStreamRoster(SleekTest): """Test rejecting a roster push from an unauthorized source.""" self.stream_start() self.recv(""" - Date: Thu, 28 Mar 2013 21:42:37 +0400 Subject: Changed `failed_auth` event according to manual --- sleekxmpp/features/feature_mechanisms/mechanisms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sleekxmpp/features/feature_mechanisms/mechanisms.py b/sleekxmpp/features/feature_mechanisms/mechanisms.py index 81b997eb..eb161be8 100644 --- a/sleekxmpp/features/feature_mechanisms/mechanisms.py +++ b/sleekxmpp/features/feature_mechanisms/mechanisms.py @@ -234,6 +234,6 @@ class FeatureMechanisms(BasePlugin): """SASL authentication failed. Disconnect and shutdown.""" self.attempted_mechs.add(self.mech.name) log.info("Authentication failed: %s", stanza['condition']) - self.xmpp.event("failed_auth", stanza, direct=True) + self.xmpp.event("failed_auth", direct=True) self._send_auth() return True -- cgit v1.2.3 From a0c77c04a5d7185fe01729961d05eccdba4d37e7 Mon Sep 17 00:00:00 2001 From: Anton Ryzhov Date: Thu, 28 Mar 2013 21:52:18 +0400 Subject: XMLStream `proxy_error` event duplicated with `connection_failed` SASL `no_auth` event duplicated with `failed_auth` --- sleekxmpp/features/feature_mechanisms/mechanisms.py | 1 + sleekxmpp/xmlstream/xmlstream.py | 1 + 2 files changed, 2 insertions(+) diff --git a/sleekxmpp/features/feature_mechanisms/mechanisms.py b/sleekxmpp/features/feature_mechanisms/mechanisms.py index eb161be8..2ed3e00b 100644 --- a/sleekxmpp/features/feature_mechanisms/mechanisms.py +++ b/sleekxmpp/features/feature_mechanisms/mechanisms.py @@ -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: diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index e55e78e7..f9a9c5a5 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -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 -- cgit v1.2.3 From 020197718f81937a755f1ca1f1126fc1e15dbd72 Mon Sep 17 00:00:00 2001 From: Anton Ryzhov Date: Thu, 28 Mar 2013 22:09:02 +0400 Subject: Event index documentation updated --- docs/event_index.rst | 56 ++++++++++++++------------- sleekxmpp/componentxmpp.py | 4 +- sleekxmpp/features/feature_bind/bind.py | 2 +- sleekxmpp/features/feature_session/session.py | 2 +- sleekxmpp/xmlstream/xmlstream.py | 4 +- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/docs/event_index.rst b/docs/event_index.rst index 2c5dfd39..1257fcd1 100644 --- a/docs/event_index.rst +++ b/docs/event_index.rst @@ -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:** ``{}`` + - **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,8 +71,8 @@ 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. entity_time @@ -93,16 +99,16 @@ 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``', or '``xa``', then this event is triggered as well. 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. groupchat_invite @@ -110,7 +116,7 @@ Event Index - **Source:** groupchat_direct_invite - - **Data:** :py:class:`~sleekxmpp.Message` + - **Data:** :py:class:`~sleekxmpp.Message` - **Source:** :py:class:`~sleekxmpp.plugins.xep_0249.direct` groupchat_message @@ -147,18 +153,18 @@ Event Index sure to check the message type in order to handle error messages. message_form - - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` - - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` - + - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` + - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` + Currently the same as :term:`message_xform`. message_xform - - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` - - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` - + - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` + - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` + Triggered whenever a data form is received inside a message. - mucc::[room]::got_offline + muc::[room]::got_offline - **Data:** - **Source:** @@ -187,8 +193,8 @@ Event Index A presence stanza with a type of '``error``' is received. presence_form - - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` - - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` + - **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form` + - **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004` This event is present in the XEP-0004 plugin code, but is currently not used. @@ -229,22 +235,20 @@ Event Index A presence stanza with a type of '``unsubscribed``' is received. roster_update - - **Data:** :py:class:`~sleekxmpp.stanza.Roster` - - **Source:** :py:class:`~sleekxmpp.ClientXMPP` + - **Data:** :py:class:`~sleekxmpp.stanza.Roster` + - **Source:** :py:class:`~sleekxmpp.ClientXMPP` An IQ result containing roster entries is received. sent_presence - **Data:** ``{}`` - - **Source:** :py:class:`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 `, - :py:class:`ComponentXMPP ` - :py:class:`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 @@ -256,14 +260,14 @@ Event Index session_start - **Data:** ``{}`` - - **Source:** :py:class:`ClientXMPP `, + - **Source:** :py:class:`ClientXMPP `, :py:class:`ComponentXMPP ` :py:class:`XEP-0078 ` Signal that a connection to the XMPP server has been made and a session has been established. socket_error - - **Data:** ``Socket`` exception object + - **Data:** ``Socket`` exception object - **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream` stream_error diff --git a/sleekxmpp/componentxmpp.py b/sleekxmpp/componentxmpp.py index 44f82e96..5284f9d4 100644 --- a/sleekxmpp/componentxmpp.py +++ b/sleekxmpp/componentxmpp.py @@ -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) diff --git a/sleekxmpp/features/feature_bind/bind.py b/sleekxmpp/features/feature_bind/bind.py index d2adc27b..bc145620 100644 --- a/sleekxmpp/features/feature_bind/bind.py +++ b/sleekxmpp/features/feature_bind/bind.py @@ -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') diff --git a/sleekxmpp/features/feature_session/session.py b/sleekxmpp/features/feature_session/session.py index c799a763..ceadd5f3 100644 --- a/sleekxmpp/features/feature_session/session.py +++ b/sleekxmpp/features/feature_session/session.py @@ -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') diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index f9a9c5a5..1c0b84b9 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -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" @@ -718,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): -- cgit v1.2.3 From 481971928c972a96a114b6dcf6480e48b530d95b Mon Sep 17 00:00:00 2001 From: Anton Ryzhov Date: Thu, 28 Mar 2013 22:41:00 +0400 Subject: `failed_auth` data returned Manual updated --- docs/event_index.rst | 2 +- sleekxmpp/features/feature_mechanisms/mechanisms.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/event_index.rst b/docs/event_index.rst index 1257fcd1..ee8f5a95 100644 --- a/docs/event_index.rst +++ b/docs/event_index.rst @@ -12,7 +12,7 @@ Event Index has not yet been established. connection_failed - - **Data:** ``{}`` + - **Data:** ``{}`` or ``Failure Stanza`` if available - **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream` Signal that a connection can not be established after number of attempts. diff --git a/sleekxmpp/features/feature_mechanisms/mechanisms.py b/sleekxmpp/features/feature_mechanisms/mechanisms.py index 2ed3e00b..58ed9b91 100644 --- a/sleekxmpp/features/feature_mechanisms/mechanisms.py +++ b/sleekxmpp/features/feature_mechanisms/mechanisms.py @@ -235,6 +235,6 @@ class FeatureMechanisms(BasePlugin): """SASL authentication failed. Disconnect and shutdown.""" self.attempted_mechs.add(self.mech.name) log.info("Authentication failed: %s", stanza['condition']) - self.xmpp.event("failed_auth", direct=True) + self.xmpp.event("failed_auth", stanza, direct=True) self._send_auth() return True -- cgit v1.2.3