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

View File

@@ -36,7 +36,30 @@ class Roster(ElementBase):
namespace = 'jabber:iq:roster'
name = 'query'
plugin_attrib = 'roster'
interfaces = set(('items',))
interfaces = set(('items', 'ver'))
def get_ver(self):
"""
Ensure handling an empty ver attribute propery.
The ver attribute is special in that the presence of the
attribute with an empty value is important for boostrapping
roster versioning.
"""
return self.xml.attrib.get('ver', None)
def set_ver(self, ver):
"""
Ensure handling an empty ver attribute propery.
The ver attribute is special in that the presence of the
attribute with an empty value is important for boostrapping
roster versioning.
"""
if ver is not None:
self.xml.attrib['ver'] = ver
else:
del self.xml.attrib['ver']
def set_items(self, items):
"""