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):
tor-commits@lists.torproject.org