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)