Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
0.9.3
-
None
-
ubuntu 14.04 python 2.6.9
Description
THRIFT-2621 added hash function to thrift generated classes, but certain types like set or list cannot be hashed. One solution is to convert them to immutable types (fronzenset, tuple) before calling hash() on them.
$ thrift -version Thrift version 0.9.3 $ cat test.thrift struct Test { 1: required set<string> test } $ thrift --gen py -out . test.thrift $ cat test.py from test.ttypes import Test from thrift.protocol import TBinaryProtocol from thrift.transport import TTransport # serialize t = Test(test=set(["a"])) tout = TTransport.TMemoryBuffer() pout = TBinaryProtocol.TBinaryProtocol(tout) t.write(pout) # deserialize tin = TTransport.TMemoryBuffer(tout.getvalue()) pin = TBinaryProtocol.TBinaryProtocol(tin) t2 = Test() t2.read(pin) # put the deserialized object to a set a = set([t2]) $ python test.py Traceback (most recent call last): File "test.py", line 18, in <module> a = set([t2]) File "/tmp/test/test/ttypes.py", line 81, in __hash__ value = (value * 31) ^ hash(self.test) TypeError: unhashable type: 'set'
Attachments
Attachments
Issue Links
- is broken by
-
THRIFT-2621 Add basic default hash code method to python
- Closed
- is related to
-
THRIFT-162 Thrift structures are unhashable, preventing them from being used as set elements
- Closed
-
THRIFT-2621 Add basic default hash code method to python
- Closed
-
AURORA-1083 Upgrade to thrift 0.9.2
- Resolved