[ 
https://issues.apache.org/jira/browse/THRIFT-4623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James E. King III updated THRIFT-4623:
--------------------------------------
    Priority: Critical  (was: Major)

> 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
>            Priority: Critical
>
> 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