Thrift structures are unhashable, preventing them from being used as set
elements
---------------------------------------------------------------------------------
Key: THRIFT-162
URL: https://issues.apache.org/jira/browse/THRIFT-162
Project: Thrift
Issue Type: Bug
Components: Compiler (Python), Library (Python)
Reporter: Esteve Fernandez
Priority: Minor
Let Foo be a Thrift structure:
struct Foo {
1: i32 bar
}
If you want to use it properly as a set element or a as a dictionary key, the
autoegenerated Python code will complain about not being hashable:
>>> f1 = Foo()
>>> f1.bar = 1
>>> f2 = Foo()
>>> f2.bar = 1
>>> f1 == f2
True
>>> set([f1]) & set([f2])
set([])
>>> d = {}
>>> d[f1] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable instance
Since Thrift structures already implement __eq__ and __ne__, they should
implement __hash__ as well. The attached patch tries to mimic the behaviour of
the Java compiler, including a HashCodeBuilder class written in Python.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.