Add support for roster versioning.
This was XEP-0237, but is now part of RFC 6121.
Roster backends should now expose two additional methods:
version(jid):
Return the version of the given JID's roster.
set_version(jid, version):
Update the version of the given JID's roster.
A new state field will be passed to the backend if an item
has been marked for removal. This is 'removed' which will
be set to True.
This commit is contained in:
@@ -134,6 +134,7 @@ class RosterItem(object):
|
||||
'subscription': 'none',
|
||||
'name': '',
|
||||
'groups': []}
|
||||
|
||||
self._db_state = {}
|
||||
self.load()
|
||||
|
||||
@@ -171,16 +172,25 @@ class RosterItem(object):
|
||||
return self._state
|
||||
return None
|
||||
|
||||
def save(self):
|
||||
def save(self, remove=False):
|
||||
"""
|
||||
Save the item's state information to an external datastore,
|
||||
if one has been provided.
|
||||
|
||||
Arguments:
|
||||
remove -- If True, expunge the item from the datastore.
|
||||
"""
|
||||
self['subscription'] = self._subscription()
|
||||
if remove:
|
||||
self._state['removed'] = True
|
||||
if self.db:
|
||||
self.db.save(self.owner, self.jid,
|
||||
self._state, self._db_state)
|
||||
|
||||
# Finally, remove the in-memory copy if needed.
|
||||
if remove:
|
||||
del self.xmpp.roster[self.owner][self.jid]
|
||||
|
||||
def __getitem__(self, key):
|
||||
"""Return a state field's value."""
|
||||
if key in self._state:
|
||||
|
||||
Reference in New Issue
Block a user