You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Estevan Aguayo (JIRA)" <ji...@apache.org> on 2016/01/28 00:21:39 UTC
[jira] [Commented] (THRIFT-1697) Generate *explicit* relative
imports in Python, rather than implicit ones
[ https://issues.apache.org/jira/browse/THRIFT-1697?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15120386#comment-15120386 ]
Estevan Aguayo commented on THRIFT-1697:
----------------------------------------
This is very problematic if your thrift files are not in the root of your project and you are using an include:
For example:
idl1.thrift
idl2.thrift (include "idl1.thrift")
This results in the following packages being created:
idl1/__init__.py
idl1/ttpyes.py
idl2/__init__.py
idl2/ttypes.py
in the file idl2/ttypes.py the import happens using relative notion and looks like so:
from thrift.Thrift import TType, TMessageType, TException, TApplicationException
import idl1.ttypes
This works all well in good if your project is set up like so:
proj/
proj/main.py
proj/idl1/
proj/idl2/
Because python finds the idl1 package at the root of the project it works fine.
If you restructure like so however:
proj/
proj/main.py
proj/subpackage/
proj/subpackage/idl1/
proj/subpackage/idl2/
The import fails because it cannot find idl1 packge. To correct this the import in idl2 should be changed to
from ..idl1 import ttypes
This becomes a major pain point you need to version your classes (in a package).
The idea that all thrift generated code needs to live in the same package (or at the root of the project structure) is fine however anything that extends a base IDL using "include" will run into this issue.
> Generate *explicit* relative imports in Python, rather than implicit ones
> -------------------------------------------------------------------------
>
> Key: THRIFT-1697
> URL: https://issues.apache.org/jira/browse/THRIFT-1697
> Project: Thrift
> Issue Type: Improvement
> Components: Python - Compiler
> Reporter: Alex Gaynor
> Attachments: thrift-1697-python-relative-imports.2.patch, thrift-1697-python-relative-imports.patch
>
>
> Currently the compiler generates code that looks like:
> import ttypes
> Which relies on the implicit import machinery to load the module in the same directory.
> It would be much better to use
> from . import ttypes
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)