summaryrefslogtreecommitdiff
path: root/sleekxmpp/roster/item.py
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/roster/item.py')
-rw-r--r--sleekxmpp/roster/item.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/sleekxmpp/roster/item.py b/sleekxmpp/roster/item.py
index 6f956b31..9cb278a4 100644
--- a/sleekxmpp/roster/item.py
+++ b/sleekxmpp/roster/item.py
@@ -134,17 +134,22 @@ class RosterItem(object):
'subscription': 'none',
'name': '',
'groups': []}
+
self._db_state = {}
self.load()
- def set_backend(self, db=None):
+ def set_backend(self, db=None, save=True):
"""
Set the datastore interface object for the roster item.
Arguments:
- db -- The new datastore interface.
+ db -- The new datastore interface.
+ save -- If True, save the existing state to the new
+ backend datastore. Defaults to True.
"""
self.db = db
+ if save:
+ self.save()
self.load()
def load(self):
@@ -167,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:
@@ -482,3 +496,6 @@ class RosterItem(object):
a roster reset request.
"""
self.resources = {}
+
+ def __repr__(self):
+ return repr(self._state)