thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brian Forbis (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (THRIFT-4623) Python compiler generates inoperable definitions for default-valued classes in same thrift file
Date Sat, 25 Aug 2018 19:15:00 GMT

    [ https://issues.apache.org/jira/browse/THRIFT-4623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16592694#comment-16592694
] 

Brian Forbis commented on THRIFT-4623:
--------------------------------------

Maybe the original author [~econner724] could take a look at this?

> 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: Major
>
> 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)

Mime
View raw message