summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst3
-rw-r--r--sleekxmpp/basexmpp.py60
-rw-r--r--sleekxmpp/componentxmpp.py8
-rw-r--r--sleekxmpp/features/feature_bind/bind.py2
-rw-r--r--sleekxmpp/plugins/__init__.py2
-rw-r--r--sleekxmpp/plugins/xep_0191/blocking.py2
-rw-r--r--sleekxmpp/roster/multi.py14
-rw-r--r--sleekxmpp/roster/single.py14
-rw-r--r--sleekxmpp/version.py4
-rw-r--r--sleekxmpp/xmlstream/jid.py3
10 files changed, 55 insertions, 57 deletions
diff --git a/README.rst b/README.rst
index c7c4a35e..a12f441d 100644
--- a/README.rst
+++ b/README.rst
@@ -45,7 +45,7 @@ The latest source code for SleekXMPP may be found on `Github
``develop`` branch.
**Latest Release**
- - `1.1.8 <http://github.com/fritzy/SleekXMPP/zipball/1.1.8>`_
+ - `1.1.9 <http://github.com/fritzy/SleekXMPP/zipball/1.1.9>`_
**Develop Releases**
- `Latest Develop Version <http://github.com/fritzy/SleekXMPP/zipball/develop>`_
@@ -74,6 +74,7 @@ help with SleekXMPP.
**Chat**
`sleek@conference.jabber.org <xmpp:sleek@conference.jabber.org?join>`_
+
Documentation and Testing
-------------------------
Documentation can be found both inline in the code, and as a Sphinx project in ``/docs``.
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py
index da5b3e41..d81be016 100644
--- a/sleekxmpp/basexmpp.py
+++ b/sleekxmpp/basexmpp.py
@@ -91,13 +91,13 @@ class BaseXMPP(XMLStream):
#: owner JIDs, as in the case for components. For clients
#: which only have a single JID, see :attr:`client_roster`.
self.roster = roster.Roster(self)
- self.roster.add(self.boundjid.bare)
+ self.roster.add(self.boundjid)
#: The single roster for the bound JID. This is the
#: equivalent of::
#:
#: self.roster[self.boundjid.bare]
- self.client_roster = self.roster[self.boundjid.bare]
+ self.client_roster = self.roster[self.boundjid]
#: The distinction between clients and components can be
#: important, primarily for choosing how to handle the
@@ -691,17 +691,13 @@ class BaseXMPP(XMLStream):
msg['to'] = self.boundjid
self.event('message', msg)
- def _handle_available(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_available(presence)
+ def _handle_available(self, pres):
+ self.roster[pres['to']][pres['from']].handle_available(pres)
- def _handle_unavailable(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_unavailable(presence)
+ def _handle_unavailable(self, pres):
+ self.roster[pres['to']][pres['from']].handle_unavailable(pres)
- def _handle_new_subscription(self, stanza):
+ def _handle_new_subscription(self, pres):
"""Attempt to automatically handle subscription requests.
Subscriptions will be approved if the request is from
@@ -713,8 +709,8 @@ class BaseXMPP(XMLStream):
If a subscription is accepted, a request for a mutual
subscription will be sent if :attr:`auto_subscribe` is ``True``.
"""
- roster = self.roster[stanza['to'].bare]
- item = self.roster[stanza['to'].bare][stanza['from'].bare]
+ roster = self.roster[pres['to']]
+ item = self.roster[pres['to']][pres['from']]
if item['whitelisted']:
item.authorize()
elif roster.auto_authorize:
@@ -724,30 +720,20 @@ class BaseXMPP(XMLStream):
elif roster.auto_authorize == False:
item.unauthorize()
- def _handle_removed_subscription(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].unauthorize()
-
- def _handle_subscribe(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_subscribe(presence)
-
- def _handle_subscribed(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_subscribed(presence)
-
- def _handle_unsubscribe(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_unsubscribe(presence)
-
- def _handle_unsubscribed(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_unsubscribed(presence)
+ def _handle_removed_subscription(self, pres):
+ self.roster[pres['to']][pres['from']].handle_unauthorize(pres)
+
+ def _handle_subscribe(self, pres):
+ self.roster[pres['to']][pres['from']].handle_subscribe(pres)
+
+ def _handle_subscribed(self, pres):
+ self.roster[pres['to']][pres['from']].handle_subscribed(pres)
+
+ def _handle_unsubscribe(self, pres):
+ self.roster[pres['to']][pres['from']].handle_unsubscribe(pres)
+
+ def _handle_unsubscribed(self, pres):
+ self.roster[pres['to']][pres['from']].handle_unsubscribed(pres)
def _handle_presence(self, presence):
"""Process incoming presence stanzas.
diff --git a/sleekxmpp/componentxmpp.py b/sleekxmpp/componentxmpp.py
index 20748b69..265ecd42 100644
--- a/sleekxmpp/componentxmpp.py
+++ b/sleekxmpp/componentxmpp.py
@@ -158,10 +158,8 @@ class ComponentXMPP(BaseXMPP):
"""
self.session_bind_event.set()
self.session_started_event.set()
- self.event("session_bind", self.xmpp.boundjid.full, direct=True)
+ self.event("session_bind", self.xmpp.boundjid, direct=True)
self.event("session_start")
- def _handle_probe(self, presence):
- pto = presence['to'].bare
- pfrom = presence['from'].bare
- self.roster[pto][pfrom].handle_probe(presence)
+ 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 2253d5ae..0584b308 100644
--- a/sleekxmpp/features/feature_bind/bind.py
+++ b/sleekxmpp/features/feature_bind/bind.py
@@ -50,7 +50,7 @@ class FeatureBind(BasePlugin):
self.xmpp.set_jid(response['bind']['jid'])
self.xmpp.bound = True
- self.xmpp.event('session_bind', self.xmpp.boundjid.full, direct=True)
+ self.xmpp.event('session_bind', self.xmpp.boundjid, direct=True)
self.xmpp.session_bind_event.set()
self.xmpp.features.add('bind')
diff --git a/sleekxmpp/plugins/__init__.py b/sleekxmpp/plugins/__init__.py
index 1613ac4d..04db0d6e 100644
--- a/sleekxmpp/plugins/__init__.py
+++ b/sleekxmpp/plugins/__init__.py
@@ -47,7 +47,7 @@ __all__ = [
'xep_0172', # User Nickname
'xep_0184', # Message Receipts
'xep_0186', # Invisible Command
- 'xep_0191', # Simple Communications Blocking
+ 'xep_0191', # Blocking Command
'xep_0198', # Stream Management
'xep_0199', # Ping
'xep_0202', # Entity Time
diff --git a/sleekxmpp/plugins/xep_0191/blocking.py b/sleekxmpp/plugins/xep_0191/blocking.py
index 0d903acc..4a87479a 100644
--- a/sleekxmpp/plugins/xep_0191/blocking.py
+++ b/sleekxmpp/plugins/xep_0191/blocking.py
@@ -22,7 +22,7 @@ log = logging.getLogger(__name__)
class XEP_0191(BasePlugin):
name = 'xep_0191'
- description = 'XEP-0191: Simple Communications Blocking'
+ description = 'XEP-0191: Blocking Command'
dependencies = set(['xep_0030'])
stanza = stanza
diff --git a/sleekxmpp/roster/multi.py b/sleekxmpp/roster/multi.py
index 9a04aebb..5d070ec8 100644
--- a/sleekxmpp/roster/multi.py
+++ b/sleekxmpp/roster/multi.py
@@ -94,10 +94,12 @@ class Roster(object):
Arguments:
key -- Return the roster for this JID.
"""
- if isinstance(key, JID):
- key = key.bare
if key is None:
- key = self.xmpp.boundjid.bare
+ key = self.xmpp.boundjid
+ if not isinstance(key, JID):
+ key = JID(key)
+ key = key.bare
+
if key not in self._rosters:
self.add(key)
self._rosters[key].auto_authorize = self.auto_authorize
@@ -119,8 +121,10 @@ class Roster(object):
Arguments:
node -- The JID for the new roster node.
"""
- if isinstance(node, JID):
- node = node.bare
+ if not isinstance(node, JID):
+ node = JID(node)
+
+ node = node.bare
if node not in self._rosters:
self._rosters[node] = RosterNode(self.xmpp, node, self.db)
diff --git a/sleekxmpp/roster/single.py b/sleekxmpp/roster/single.py
index f8c9c781..f080ae8a 100644
--- a/sleekxmpp/roster/single.py
+++ b/sleekxmpp/roster/single.py
@@ -89,8 +89,11 @@ class RosterNode(object):
A new item entry will be created if one does not already exist.
"""
- if isinstance(key, JID):
- key = key.bare
+ if key is None:
+ key = JID('')
+ if not isinstance(key, JID):
+ key = JID(key)
+ key = key.bare
if key not in self._jids:
self.add(key, save=True)
return self._jids[key]
@@ -101,8 +104,11 @@ class RosterNode(object):
To remove an item from the server, use the remove() method.
"""
- if isinstance(key, JID):
- key = key.bare
+ if key is None:
+ key = JID('')
+ if not isinstance(key, JID):
+ key = JID(key)
+ key = key.bare
if key in self._jids:
del self._jids[key]
diff --git a/sleekxmpp/version.py b/sleekxmpp/version.py
index eb39fd68..f03e5c1f 100644
--- a/sleekxmpp/version.py
+++ b/sleekxmpp/version.py
@@ -9,5 +9,5 @@
# We don't want to have to import the entire library
# just to get the version info for setup.py
-__version__ = '1.1.8'
-__version_info__ = (1, 1, 8, '', 0)
+__version__ = '1.1.9'
+__version_info__ = (1, 1, 9, '', 0)
diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py
index 281bf4ee..1582164a 100644
--- a/sleekxmpp/xmlstream/jid.py
+++ b/sleekxmpp/xmlstream/jid.py
@@ -143,3 +143,6 @@ class JID(object):
def __hash__(self):
"""Hash a JID based on the string version of its full JID."""
return hash(self.full)
+
+ def __copy__(self):
+ return JID(self.jid)