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:
Lance Stout
2012-03-07 11:44:07 -08:00
parent d41ada6b66
commit a71823dc04
8 changed files with 145 additions and 4 deletions
+11 -1
View File
@@ -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: