
commit 1ed6e2b7e553414736913b3cd440843d66ccea94 Author: Damian Johnson <atagar@torproject.org> Date: Sun Oct 13 12:40:46 2013 -0700 Hash functions for descriptor classes Ok, finally found out what this python 2 vs 3 hashing oddity is. If you define an __eq__() method in python3 then it doesn't inherit its parent's __hash__(). This makes some sense, though it's unintuitive as hell. Oh well... http://stackoverflow.com/a/1608882/1067192 --- stem/descriptor/microdescriptor.py | 3 +++ stem/descriptor/networkstatus.py | 3 +++ stem/descriptor/server_descriptor.py | 6 ++++++ stem/exit_policy.py | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py index 1f9e8cb..61dce83 100644 --- a/stem/descriptor/microdescriptor.py +++ b/stem/descriptor/microdescriptor.py @@ -296,6 +296,9 @@ class Microdescriptor(Descriptor): return method(str(self).strip(), str(other).strip()) + def __hash__(self): + return hash(str(self).strip()) + def __eq__(self, other): return self._compare(other, lambda s, o: s == o) diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index a2b07fb..b5eb5b7 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -566,6 +566,9 @@ class NetworkStatusDocumentV3(NetworkStatusDocument): return method(str(self).strip(), str(other).strip()) + def __hash__(self): + return hash(str(self).strip()) + def __eq__(self, other): return self._compare(other, lambda s, o: s == o) diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py index 160dab7..c84e8b8 100644 --- a/stem/descriptor/server_descriptor.py +++ b/stem/descriptor/server_descriptor.py @@ -820,6 +820,9 @@ class RelayDescriptor(ServerDescriptor): return method(str(self).strip(), str(other).strip()) + def __hash__(self): + return hash(str(self).strip()) + def __eq__(self, other): return self._compare(other, lambda s, o: s == o) @@ -951,6 +954,9 @@ class BridgeDescriptor(ServerDescriptor): return method(str(self).strip(), str(other).strip()) + def __hash__(self): + return hash(str(self).strip()) + def __eq__(self, other): return self._compare(other, lambda s, o: s == o) diff --git a/stem/exit_policy.py b/stem/exit_policy.py index 163f58b..0f033de 100644 --- a/stem/exit_policy.py +++ b/stem/exit_policy.py @@ -441,7 +441,7 @@ class MicroExitPolicy(ExitPolicy): return self._policy def __hash__(self): - return id(self) + return hash(str(self)) def __eq__(self, other): if isinstance(other, MicroExitPolicy):