From 5b0a210faba561319423969d0a2e9c6a7a5ae633 Mon Sep 17 00:00:00 2001 From: souliane Date: Sat, 7 Feb 2015 14:47:23 +0100 Subject: [PATCH] frontends (tools): Pyjamas's JID implementation can be compared to an object of a different type: - always return False if the other object is not a JID - to not fake list membership's test, hash(jid) now differs from hash(unicode(jid)) --- frontends/src/tools/jid.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontends/src/tools/jid.py b/frontends/src/tools/jid.py index 40facee7..c7b4cd86 100644 --- a/frontends/src/tools/jid.py +++ b/frontends/src/tools/jid.py @@ -58,12 +58,14 @@ except (TypeError, AttributeError): # Error raised is not the same depending on return getattr(self.__internal_str, name) def __eq__(self, other): + if not isinstance(other, JID): + return False return (self.node == other.node and self.domain == other.domain and self.resource == other.resource) def __hash__(self): - return hash(self.__internal_str) + return hash('JID<{}>'.format(self.__internal_str)) def find(self, *args): return self.__internal_str.find(*args) @@ -75,7 +77,7 @@ except (TypeError, AttributeError): # Error raised is not the same depending on node_end = 0 domain_end = self.__internal_str.find('/') if domain_end == 0: - raise ValueError("a jid can't start with '/'") + raise ValueError("a jid can't start with '/'") if domain_end == -1: domain_end = len(self.__internal_str) self.node = self.__internal_str[:node_end] or None