diff options
Diffstat (limited to 'sleekxmpp/plugins/xep_0202')
-rw-r--r-- | sleekxmpp/plugins/xep_0202/__init__.py | 20 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0202/stanza.py | 127 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0202/time.py | 99 |
3 files changed, 0 insertions, 246 deletions
diff --git a/sleekxmpp/plugins/xep_0202/__init__.py b/sleekxmpp/plugins/xep_0202/__init__.py deleted file mode 100644 index cdab3665..00000000 --- a/sleekxmpp/plugins/xep_0202/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.plugins.base import register_plugin - -from sleekxmpp.plugins.xep_0202 import stanza -from sleekxmpp.plugins.xep_0202.stanza import EntityTime -from sleekxmpp.plugins.xep_0202.time import XEP_0202 - - -register_plugin(XEP_0202) - - -# Retain some backwards compatibility -xep_0202 = XEP_0202 diff --git a/sleekxmpp/plugins/xep_0202/stanza.py b/sleekxmpp/plugins/xep_0202/stanza.py deleted file mode 100644 index b6ccc960..00000000 --- a/sleekxmpp/plugins/xep_0202/stanza.py +++ /dev/null @@ -1,127 +0,0 @@ -""" - 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 -import datetime as dt - -from sleekxmpp.xmlstream import ElementBase -from sleekxmpp.plugins import xep_0082 -from sleekxmpp.thirdparty import tzutc, tzoffset - - -class EntityTime(ElementBase): - - """ - The <time> element represents the local time for an XMPP agent. - The time is expressed in UTC to make synchronization easier - between entities, but the offset for the local timezone is also - included. - - Example <time> stanzas: - <iq type="result"> - <time xmlns="urn:xmpp:time"> - <utc>2011-07-03T11:37:12.234569</utc> - <tzo>-07:00</tzo> - </time> - </iq> - - Stanza Interface: - time -- The local time for the entity (updates utc and tzo). - utc -- The UTC equivalent to local time. - tzo -- The local timezone offset from UTC. - - Methods: - get_time -- Return local time datetime object. - set_time -- Set UTC and TZO fields. - del_time -- Remove both UTC and TZO fields. - get_utc -- Return datetime object of UTC time. - set_utc -- Set the UTC time. - get_tzo -- Return tzinfo object. - set_tzo -- Set the local timezone offset. - """ - - name = 'time' - namespace = 'urn:xmpp:time' - plugin_attrib = 'entity_time' - interfaces = set(('tzo', 'utc', 'time')) - sub_interfaces = interfaces - - def set_time(self, value): - """ - Set both the UTC and TZO fields given a time object. - - Arguments: - value -- A datetime object or properly formatted - string equivalent. - """ - date = value - if not isinstance(value, dt.datetime): - date = xep_0082.parse(value) - self['utc'] = date - self['tzo'] = date.tzinfo - - def get_time(self): - """ - Return the entity's local time based on the UTC and TZO data. - """ - date = self['utc'] - tz = self['tzo'] - return date.astimezone(tz) - - def del_time(self): - """Remove both the UTC and TZO fields.""" - del self['utc'] - del self['tzo'] - - def get_tzo(self): - """ - Return the timezone offset from UTC as a tzinfo object. - """ - tzo = self._get_sub_text('tzo') - if tzo == '': - tzo = 'Z' - time = xep_0082.parse('00:00:00%s' % tzo) - return time.tzinfo - - def set_tzo(self, value): - """ - Set the timezone offset from UTC. - - Arguments: - value -- Either a tzinfo object or the number of - seconds (positive or negative) to offset. - """ - time = xep_0082.time(offset=value) - if xep_0082.parse(time).tzinfo == tzutc(): - self._set_sub_text('tzo', 'Z') - else: - self._set_sub_text('tzo', time[-6:]) - - def get_utc(self): - """ - Return the time in UTC as a datetime object. - """ - value = self._get_sub_text('utc') - if value == '': - return xep_0082.parse(xep_0082.datetime()) - return xep_0082.parse('%sZ' % value) - - def set_utc(self, value): - """ - Set the time in UTC. - - Arguments: - value -- A datetime object or properly formatted - string equivalent. - """ - date = value - if not isinstance(value, dt.datetime): - date = xep_0082.parse(value) - date = date.astimezone(tzutc()) - value = xep_0082.format_datetime(date)[:-1] - self._set_sub_text('utc', value) diff --git a/sleekxmpp/plugins/xep_0202/time.py b/sleekxmpp/plugins/xep_0202/time.py deleted file mode 100644 index 4e48eae8..00000000 --- a/sleekxmpp/plugins/xep_0202/time.py +++ /dev/null @@ -1,99 +0,0 @@ -"""
- 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 import BasePlugin
-from sleekxmpp.plugins import xep_0082
-from sleekxmpp.plugins.xep_0202 import stanza
-
-
-log = logging.getLogger(__name__)
-
-
-class XEP_0202(BasePlugin):
-
- """
- XEP-0202: Entity Time
- """
-
- name = 'xep_0202'
- description = 'XEP-0202: Entity Time'
- dependencies = set(['xep_0030', 'xep_0082'])
- stanza = stanza
- default_config = {
- #: 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.
- 'local_time': None,
- 'tz_offset': 0
- }
-
- def plugin_init(self):
- """Start the XEP-0203 plugin."""
-
- if not self.local_time:
- def default_local_time(jid):
- return xep_0082.datetime(offset=self.tz_offset)
-
- self.local_time = default_local_time
-
- self.xmpp.register_handler(
- Callback('Entity Time',
- StanzaPath('iq/entity_time'),
- self._handle_time_request))
- register_stanza_plugin(Iq, stanza.EntityTime)
-
- def plugin_end(self):
- self.xmpp['xep_0030'].del_feature(feature='urn:xmpp:time')
- self.xmpp.remove_handler('Entity Time')
-
- def session_bind(self, jid):
- 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.
- """
- if iq['type'] == 'get':
- 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
- iq['from'] = ifrom
- iq.enable('entity_time')
- return iq.send(**iqargs)
|