Reputation:
I have problem with thrift code generator or python.
Code sample (generated by thrift):
class SomeClass:
spec = (
(1, (SomeClass, SomeClass.spec)),
)
Error message:
NameError: name 'SomeClass' is not defined
So I found bug in thrift jira (still opened since 2014). Suggested solution pretty bad.
Can I avoid this problem somehow?
In best case solution in *.thrift or *.py files, that can be changed before or after generation manually.
Upvotes: 0
Views: 421
Reputation:
Seems, thats python's genered code contains useless field
SomeClass.spec
So i just delete it.
I compared this with java generated code.
If someone will use my solution dont forget to change generated methods, thats check, when your spec!=None
Upvotes: 0
Reputation: 6298
Try to replace the code with the following code snippet, Note: it is using lists instead of tuples since tuples are immutable.
class SomeClass:
spec = None
@classmethod
def init(cls):
cls.spec = []
cls.spec.append( [ 1 , (cls, cls.spec) ] )
SomeClass.init()
print( SomeClass.spec ) # [[1, (<class SomeClass>, [...])]]
Another solution without class methods
class SomeClass:
spec = None
SomeClass.spec = []
SomeClass.spec.append( [ 1 , (SomeClass, SomeClass.spec) ] )
print( SomeClass.spec ) # [[1, (<class SomeClass>, [...])]]
Upvotes: 1