From ec3a14e6d91e61c76147d8415f7246086fd9d435 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Sun, 3 Jul 2011 15:30:06 -0700 Subject: Updated XEP-0202 plugin to new format and use XEP-0082. --- sleekxmpp/plugins/xep_0202/time.py | 90 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 sleekxmpp/plugins/xep_0202/time.py (limited to 'sleekxmpp/plugins/xep_0202/time.py') diff --git a/sleekxmpp/plugins/xep_0202/time.py b/sleekxmpp/plugins/xep_0202/time.py new file mode 100644 index 00000000..f944bcb3 --- /dev/null +++ b/sleekxmpp/plugins/xep_0202/time.py @@ -0,0 +1,90 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2010 Nathanael C. Fritz + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +import logging + +from sleekxmpp.stanza.iq import Iq +from sleekxmpp.xmlstream import register_stanza_plugin +from sleekxmpp.xmlstream.handler import Callback +from sleekxmpp.xmlstream.matcher import StanzaPath +from sleekxmpp.plugins.base import base_plugin +from sleekxmpp.plugins import xep_0082 +from sleekxmpp.plugins.xep_0202 import stanza + + +log = logging.getLogger(__name__) + + +class xep_0202(base_plugin): + + """ + XEP-0202: Entity Time + """ + + def plugin_init(self): + """Start the XEP-0203 plugin.""" + self.xep = '0202' + self.description = 'Entity Time' + self.stanza = stanza + + # As a default, respond to time requests with the + # local time returned by XEP-0082. However, a + # custom function can be supplied which accepts + # the JID of the entity to query for the time. + self.local_time = self.config.get('local_time', None) + if not self.local_time: + self.local_time = lambda x: xep_0082.datetime() + + self.xmpp.registerHandler( + Callback('Entity Time', + StanzaPath('iq/entity_time'), + self._handle_time_request)) + register_stanza_plugin(Iq, stanza.EntityTime) + + def post_init(self): + """Handle cross-plugin interactions.""" + base_plugin.post_init(self) + self.xmpp['xep_0030'].add_feature('urn:xmpp:time') + + + def _handle_time_request(self, iq): + """ + Respond to a request for the local time. + + The time is taken from self.local_time(), which may be replaced + during plugin configuration with a function that maps JIDs to + times. + + Arguments: + iq -- The Iq time request stanza. + """ + iq.reply() + iq['entity_time']['time'] = self.local_time(iq['to']) + iq.send() + + def get_entity_time(self, to, ifrom=None, **iqargs): + """ + Request the time from another entity. + + Arguments: + to -- JID of the entity to query. + ifrom -- Specifiy the sender's JID. + block -- If true, block and wait for the stanzas' reply. + timeout -- The time in seconds to block while waiting for + a reply. If None, then wait indefinitely. + callback -- Optional callback to execute when a reply is + received instead of blocking and waiting for + the reply. + """ + iq = self.xmpp.Iq() + iq['type'] = 'get' + iq['to'] = 'to' + if ifrom: + iq['from'] = 'ifrom' + iq.enable('entity_time') + return iq.send(**iqargs) -- cgit v1.2.3