pyecoregen icon indicating copy to clipboard operation
pyecoregen copied to clipboard

from x import y vs. import x

Open AnNeub opened this issue 2 years ago • 1 comments

Hi @aranega

I try to create static code from complex ecore models like capella. I always run into the problem of circular includes. But I think this could be avoided if other modules are loaded by using import x instead of from x import y. So if you have a module like this

module examlple
__init__.py
from .one import Foo
from .one import helper

one.py
from example import two 

class Foo(two.Bar):
    def __init__(self):
        super().__init__()
        print('Init Foo')

def helper():
    print('Help')

def main():
    foo = Foo()

if __name__ == '__main__':
    main()

two.py
from example import helper

class Bar:
    def __init__(self):
        print('Init Bar')
        helper()
    

As far as I understood, by using from x import y y is loaded into the local namespace. Therefore example above will not work. but changing two.py to

two.py
import example

class Bar:
    def __init__(self):
        print('Init Bar')
        example.helper()
    

And it can be resolved. So instead loading single classifiers from different ecore files importing the whole package can maybe solve this issue. Maybe I find some time to dive deeper and can prepare a patch and some example. Hope you have a rough idea of the problem.

Maybe you can give me a hint how I easily get the containing package from the classifier in the code gen template.

Best regards, Andreas

AnNeub avatar Mar 07 '22 21:03 AnNeub