summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-08-04 00:07:30 -0700
committerLance Stout <lancestout@gmail.com>2011-08-04 00:07:30 -0700
commita0767f6af61bc9c54b2526cd51aef7af4e383e90 (patch)
tree9004b290fc7870ba062032d4fa2cafe425b49d7b
parent9ffdba8643ca8e52a30ce227331cd772a5fea6d1 (diff)
downloadslixmpp-a0767f6af61bc9c54b2526cd51aef7af4e383e90.tar.gz
slixmpp-a0767f6af61bc9c54b2526cd51aef7af4e383e90.tar.bz2
slixmpp-a0767f6af61bc9c54b2526cd51aef7af4e383e90.tar.xz
slixmpp-a0767f6af61bc9c54b2526cd51aef7af4e383e90.zip
Sadly, dateutil is not actually part of the standard lib.
Thus, using the XEP-0082 and XEP-0202 introduces a dependency on the dateutil package (installable using pip install python-dateutil). Maybe we'll be able to rework how these plugins work to avoid needing dateutil, but for now this will have to do.
-rw-r--r--README3
-rw-r--r--setup.py6
-rw-r--r--sleekxmpp/plugins/__init__.py20
-rw-r--r--sleekxmpp/plugins/xep_0082.py11
-rw-r--r--sleekxmpp/plugins/xep_0202/__init__.py23
-rw-r--r--sleekxmpp/plugins/xep_0202/stanza.py8
6 files changed, 61 insertions, 10 deletions
diff --git a/README b/README
index 8a85365c..aab5ae8c 100644
--- a/README
+++ b/README
@@ -9,6 +9,9 @@ We try to keep requirements to a minimum, but we suggest that you install http:/
If you do not install this library, you may need to specify the server/port for services that use SRV records (like GTalk).
"sudo pip install dnspython" on a *nix system with pip installed.
+Two time related plugins (XEP-0082 and XEP-0202) also require the dateutil package, but that is not a hard requirement if you
+don't need those plugins.
+
SleekXMPP has several design goals/philosophies:
- Low number of dependencies.
- Every XEP as a plugin.
diff --git a/setup.py b/setup.py
index 572dd1f0..48d88690 100644
--- a/setup.py
+++ b/setup.py
@@ -54,11 +54,15 @@ packages = [ 'sleekxmpp',
'sleekxmpp/plugins/xep_0059',
'sleekxmpp/plugins/xep_0060',
'sleekxmpp/plugins/xep_0060/stanza',
+ 'sleekxmpp/plugins/xep_0066',
'sleekxmpp/plugins/xep_0085',
'sleekxmpp/plugins/xep_0086',
'sleekxmpp/plugins/xep_0092',
'sleekxmpp/plugins/xep_0128',
- 'sleekxmpp/plugins/xep_0199',
+ 'sleekxmpp/plugins/xep_0202',
+ 'sleekxmpp/plugins/xep_0203',
+ 'sleekxmpp/plugins/xep_0224',
+ 'sleekxmpp/plugins/xep_0249',
'sleekxmpp/features',
'sleekxmpp/features/feature_mechanisms',
'sleekxmpp/features/feature_mechanisms/stanza',
diff --git a/sleekxmpp/plugins/__init__.py b/sleekxmpp/plugins/__init__.py
index b48a4c03..21a05fe0 100644
--- a/sleekxmpp/plugins/__init__.py
+++ b/sleekxmpp/plugins/__init__.py
@@ -6,6 +6,20 @@
See the file LICENSE for copying permission.
"""
__all__ = ['xep_0004', 'xep_0009', 'xep_0012', 'xep_0030', 'xep_0033',
- 'xep_0045', 'xep_0050', 'xep_0060', 'xep_0066', 'xep_0082',
- 'xep_0085', 'xep_0086', 'xep_0092', 'xep_0128', 'xep_0199',
- 'xep_0202', 'xep_0203', 'xep_0224', 'xep_0249', 'gmail_notify']
+ 'xep_0045', 'xep_0050', 'xep_0060', 'xep_0066', 'xep_0085',
+ 'xep_0086', 'xep_0092', 'xep_0128', 'xep_0199', 'xep_0203',
+ 'xep_0224', 'xep_0249', 'gmail_notify']
+
+# Some plugins may require external dependencies beyond what the
+# core SleekXMPP installation requires. Thus they should only by
+# imported automatically if those dependecies are met.
+
+HAVE_DATEUTIL = True
+try:
+ import dateutil
+except:
+ HAVE_DATEUTIL = False
+
+if HAVE_DATEUTIL:
+ __all__.append('xep_0082')
+ __all__.append('xep_0202')
diff --git a/sleekxmpp/plugins/xep_0082.py b/sleekxmpp/plugins/xep_0082.py
index 785ba36b..e78a50ad 100644
--- a/sleekxmpp/plugins/xep_0082.py
+++ b/sleekxmpp/plugins/xep_0082.py
@@ -6,11 +6,18 @@
See the file LICENSE for copying permission.
"""
+import logging
import datetime as dt
-from dateutil import parser
-from dateutil.tz import tzoffset, tzutc
+
from sleekxmpp.plugins.base import base_plugin
+try:
+ from dateutil import parser
+ from dateutil.tz import tzoffset, tzutc
+except e:
+ log = logging.getLogger(__name__)
+ log.warning("XEP-0082 plugin requires dateutil")
+
# =====================================================================
# To make it easier for stanzas without direct access to plugin objects
diff --git a/sleekxmpp/plugins/xep_0202/__init__.py b/sleekxmpp/plugins/xep_0202/__init__.py
index 82338d3a..3fb4744d 100644
--- a/sleekxmpp/plugins/xep_0202/__init__.py
+++ b/sleekxmpp/plugins/xep_0202/__init__.py
@@ -6,6 +6,23 @@
See the file LICENSE for copying permission.
"""
-from sleekxmpp.plugins.xep_0202 import stanza
-from sleekxmpp.plugins.xep_0202.stanza import EntityTime
-from sleekxmpp.plugins.xep_0202.time import xep_0202
+import logging
+import sleekxmpp
+
+
+log = logging.getLogger(__name__)
+
+
+HAVE_DATEUTIL = True
+try:
+ import dateutil
+except:
+ HAVE_DATEUTIL = False
+
+
+if HAVE_DATEUTIL:
+ from sleekxmpp.plugins.xep_0202 import stanza
+ from sleekxmpp.plugins.xep_0202.stanza import EntityTime
+ from sleekxmpp.plugins.xep_0202.time import xep_0202
+else:
+ log.warning("XEP-0202 requires the dateutil package")
diff --git a/sleekxmpp/plugins/xep_0202/stanza.py b/sleekxmpp/plugins/xep_0202/stanza.py
index bb27692a..72ab403d 100644
--- a/sleekxmpp/plugins/xep_0202/stanza.py
+++ b/sleekxmpp/plugins/xep_0202/stanza.py
@@ -6,12 +6,18 @@
See the file LICENSE for copying permission.
"""
+import logging
import datetime as dt
-from dateutil.tz import tzoffset, tzutc
from sleekxmpp.xmlstream import ElementBase
from sleekxmpp.plugins import xep_0082
+try:
+ from dateutil.tz import tzutc
+except:
+ log = logging.getLogger(__name__)
+ log.warning("XEP-0202 plugin requies dateutil package")
+
class EntityTime(ElementBase):