Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-3388

hash doesn't work on set/list

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.9.3
    • Fix Version/s: 0.10.0
    • Component/s: Python - Compiler
    • Labels:
      None
    • Environment:

      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

          Issue Links

            Activity

              People

              • Assignee:
                jensg Jens Geyer
                Reporter:
                michim Michi Mutsuzaki
              • Votes:
                1 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: