Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generator not working on ecore model #22

Closed
ewoudwerkman opened this issue Oct 3, 2018 · 2 comments
Closed

Generator not working on ecore model #22

ewoudwerkman opened this issue Oct 3, 2018 · 2 comments

Comments

@ewoudwerkman
Copy link

I'm trying to use pyecoregen on an ecore model (which can be found here: https://github.com/EnergyTransition/ESDL/blob/master/esdl/model/esdl.ecore). The model is developed in Eclipse Photon.

I'm getting the following error when trying to generate the classes:

$ pyecoregen -vv -e C:\\Data\\git\\esdl.next\\model\\esdl.ecore -o gen
2018-10-03 15:20:56,926 INFO [multigen.generator] Generating code to 'gen'.
2018-10-03 15:20:56,926 DEBUG [multigen.generator] <pyecore.ecore.EPackage object at 0x6fffe7aa6d8> --> 'gen/esdl/__init__.py'
2018-10-03 15:20:57,566 DEBUG [multigen.generator] <pyecore.ecore.EPackage object at 0x6fffe7aa6d8> --> 'gen/esdl/esdl.py'
Traceback (most recent call last):
  File "/usr/bin/pyecoregen", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python3.6/site-packages/pyecoregen/cli.py", line 15, in main
    generate_from_cli(sys.argv[1:])  # nocover
  File "/usr/lib/python3.6/site-packages/pyecoregen/cli.py", line 62, in generate_from_cli
    ).generate(model, parsed_args.out_folder)
  File "/usr/lib/python3.6/site-packages/pyecoregen/ecore.py", line 330, in generate
    super().generate(model, outfolder)
  File "/usr/lib/python3.6/site-packages/multigen/generator.py", line 39, in generate
    task.run(element, outfolder)
  File "/usr/lib/python3.6/site-packages/multigen/generator.py", line 65, in run
    self.generate_file(element, filepath)
  File "/usr/lib/python3.6/site-packages/multigen/jinja.py", line 43, in generate_file
    context = self.create_template_context(element=element)
  File "/usr/lib/python3.6/site-packages/pyecoregen/ecore.py", line 118, in create_template_context
    imported_classifiers=self.imported_classifiers(element)
  File "/usr/lib/python3.6/site-packages/pyecoregen/ecore.py", line 96, in imported_classifiers
    imported |= {t for t in attributes_types if t.ePackage not in {p, ecore.eClass, None}}
  File "/usr/lib/python3.6/site-packages/pyecoregen/ecore.py", line 96, in <setcomp>
    imported |= {t for t in attributes_types if t.ePackage not in {p, ecore.eClass, None}}
  File "/usr/lib/python3.6/site-packages/pyecore/ecore.py", line 895, in __getattribute__
    self._wrapped = decoded.eClass
AttributeError: 'NoneType' object has no attribute 'eClass'

Any idea what goes wrong here?

@aranega
Copy link
Member

aranega commented Oct 3, 2018

Hi @ewoudwerkman

The issue here comes from PyEcore, I forgot to register an Ecore datatype as classifier in the core (the ELong type...). I'm really sorry about that...

There is a way of patching the code and launching the generation by code. I made the test and everything works fine. Here is the code I used:

from pyecore.resources import ResourceSet
import pyecore.ecore as ecore
from pyecoregen.ecore import EcoreGenerator


def register_missing_type():
    ecore.Core.register_classifier(ecore.ELong)  # here is the missing type registration


def generate_code(folder='.', ecore_path=None):
    rset = ResourceSet()
    uml_root = rset.get_resource(ecore_path).contents[0]
    generator = EcoreGenerator()
    generator.generate(uml_root, folder)


if __name__ == '__main__':
    register_missing_type()
    generate_code(ecore_path='esdl.ecore', folder='gen')  # change the path to your .ecore metamodel here

I will patch this on PyEcore asap. Again, sorry about that... Tell me if this snippet works for you!

@ewoudwerkman
Copy link
Author

Hi @aranega,

That is a fast reply! And it works, it generates the classes.
Thanks for your help!

Kind regards,
Ewoud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants