Matt Anthony created THRIFT-4623:
------------------------------------

             Summary: Python compiler generates inoperable definitions for 
default-valued classes in same thrift file
                 Key: THRIFT-4623
                 URL: https://issues.apache.org/jira/browse/THRIFT-4623
             Project: Thrift
          Issue Type: Bug
          Components: Python - Compiler
    Affects Versions: 0.11.0
            Reporter: Matt Anthony


Consider a thrift file as

 

<code>

struct A {

    i32 value;

}

 

struct B {

    A itm = {}

}

</code>

 

The thrift compiler will generate class definitions for A and B, without 
`self.thrift_spec` defined, and at the end of the ttypes.py file will go back 
and populate the thrift_spec objects. However, in the __init__ method of B, the 
default value for `itm` would attempt to be set as `A(**{})`, which will crash 
with error `AttributeError: 'ObservationInfo' object has no attribute 
'thrift_spec'`. This makes sense since at the time the default object is being 
established, there is no thrift_spec object.

Removing the default value removes the error, but this is not correct behavior. 
The most obvious fix is that the `thrift_spec` object of each class needs to be 
defined within the class as the class is written, not at the end of the file 
after all the class objects are established. Moreover, that is generally good 
practice and is actually part of the PEP prescriptions for python (referencing 
objects before initialization in a class is a highlighted warning, for this 
very reason).



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to