Skip to content

Commit

Permalink
make Identifier.__hash__ stable wrt. multi processes, fixes #500
Browse files Browse the repository at this point in the history
  • Loading branch information
joernhees committed Jul 21, 2015
1 parent 4e257e4 commit ec93eed
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions rdflib/term.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,9 @@ def __ge__(self, other):
return self == other

def __hash__(self):
return hash(type(self)) ^ hash(unicode(self))
t = type(self)
fqn = t.__module__ + '.' + t.__name__
return hash(fqn) ^ hash(unicode(self))


class URIRef(Identifier):
Expand Down Expand Up @@ -930,8 +932,12 @@ def __hash__(self):
-- 6.5.1 Literal Equality (RDF: Concepts and Abstract Syntax)
"""

return unicode.__hash__(self) ^ hash(self.language.lower() if self.language else None) ^ hash(self.datatype)
res = super(Literal, self).__hash__()
if self.language:
res ^= hash(self.language.lower())
if self.datatype:
res ^= hash(self.datatype)
return res

@py3compat.format_doctest_out
def __eq__(self, other):
Expand Down

0 comments on commit ec93eed

Please sign in to comment.