Mercurial > libervia-web
diff src/browser/sat_browser/contact_list.py @ 733:66beef5b943d
browser_side: add functions JIDSet and JIDDict
author | souliane <souliane@mailoo.org> |
---|---|
date | Wed, 11 Nov 2015 11:49:32 +0100 |
parents | 3b91225b457a |
children | 0d5889b9313c |
line wrap: on
line diff
--- a/src/browser/sat_browser/contact_list.py Mon Nov 09 18:26:05 2015 +0100 +++ b/src/browser/sat_browser/contact_list.py Wed Nov 11 11:49:32 2015 +0100 @@ -30,6 +30,7 @@ from pyjamas import DOM from constants import Const as C +from sat_frontends.tools import jid import libervia_widget import contact_panel import blog @@ -275,3 +276,42 @@ if other == item: return True return False + + def index(self, item): + i = 0 + for other in self: + if other == item: + return i + i += 1 + raise ValueError("JIDList.index(%(item)s): %(item)s not in list" % {"item": item}) + +class JIDSet(set): + """JID set implementation for Pyjamas""" + + def __contains__(self, item): + return __containsJID(self, item) + + +class JIDDict(dict): + """JID dict implementation for Pyjamas (a dict with JID keys)""" + + def __contains__(self, item): + return __containsJID(self, item) + + def keys(self): + return JIDSet(dict.keys(self)) + + +def __containsJID(iterable, item): + """Tells if the given item is in the iterable, works with JID. + + @param iterable(object): list, set or another iterable object + @param item (object): element + @return: bool + """ + # Pyjamas JID-friendly implementation of the "in" operator. Since our JID + # doesn't inherit from str, without this method the test would return True + # only when the objects references are the same. + if isinstance(item, jid.JID): + return hash(item) in [hash(other) for other in iterable if isinstance(other, jid.JID)] + return super(type(iterable), iterable).__contains__(iterable, item)