1+ {% import ' module_utilities.tpl' as modutil with context -%}
12"""Definition of meta model '{ { element.name } }'."""
23from functools import partial
34import pyecore.ecore as Ecore
45from pyecore.ecore import *
56{% for c in imported_classifiers -%}
67 from { { c.ePackage | pyfqn } } import { { c.name } }
78{% endfor %}
9+ {% if user_module -%}
10+ import { { user_module } } as _user_module
11+ {% endif %}
812
913name = '{ { element.name } }'
1014nsURI = '{ { element.nsURI | default (boolean= True) } }'
@@ -15,137 +19,13 @@ eClass = EPackage(name=name, nsURI=nsURI, nsPrefix=nsPrefix)
1519eClassifiers = { }
1620getEClassifier = partial(Ecore.getEClassifier, searchspace=eClassifiers)
1721
18- { #- -------------------------------------------------------------------------------------------- -#}
19-
20- {% - macro generate_enum(e) %}
21- { { e.name } } = EEnum('{ { e.name } }', literals=[{ { e.eLiterals | map(attribute= ' name' ) | map(' pyquotesingle' ) | join(' , ' ) } }])
22- {% endmacro %}
23-
24- { #- -------------------------------------------------------------------------------------------- -#}
25-
26- {% - macro generate_edatatype(e) %}
27- { { e.name } } = EDataType('{ { e.name } }', instanceClassName='{ { e.instanceClassName } }')
28- {% endmacro %}
29-
30- { #- -------------------------------------------------------------------------------------------- -#}
31-
32- {% - macro generate_class_header(c) -%}
33- class { { c.name } }({ { c | supertypes } }):
34- { { c | docstringline -} }
35- {% endmacro -%}
36-
37- { #- -------------------------------------------------------------------------------------------- -#}
38-
39- {% - macro generate_attribute(a) -%}
40- {% if a.derived %} _{% endif -%}
41- { { a.name } } = EAttribute({ { a | attrqualifiers } })
42- {% - endmacro %}
43-
44- { #- -------------------------------------------------------------------------------------------- -#}
45-
46- {% - macro generate_reference(r) -%}
47- { { r.name } } = EReference({ { r | refqualifiers } })
48- {% - endmacro %}
49-
50- { #- -------------------------------------------------------------------------------------------- -#}
51-
52- {% - macro generate_derived_attribute(d) -%}
53- @property
54- def { { d.name } }(self):
55- return self._{ { d.name } }
56-
57- {% - if d.changeable %}
58-
59- @{ { d.name } }.setter
60- def { { d.name } }(self, value):
61- self._{ { d.name } } = value
62- {% endif %}
63- {% - endmacro %}
64-
65- { #- -------------------------------------------------------------------------------------------- -#}
66-
67- {% - macro generate_class_init_args(c) -%}
68- {% if c.eStructuralFeatures %} , *, {% endif -%}
69- { { c.eStructuralFeatures | map(attribute= ' name' ) | map(' re_sub' , ' $' , ' =None' ) | join(' , ' ) } }
70- {% - endmacro %}
71-
72- { #- -------------------------------------------------------------------------------------------- -#}
73-
74- {% - macro generate_feature_init(feature) %}
75- {% - if feature.upperBound == 1 %}
76- if { { feature.name } } is not None:
77- self.{ { feature.name } } = { { feature.name } }
78- {% - else %}
79- if { { feature.name } }:
80- self.{ { feature.name } }.extend({ { feature.name } })
81- {% - endif %}
82- {% - endmacro %}
83-
84- { #- -------------------------------------------------------------------------------------------- -#}
85-
86- {% - macro generate_class_init(c) %}
87- def __init__(self{ { generate_class_init_args(c) } }, **kwargs):
88- {% - if not c.eSuperTypes %}
89- if kwargs:
90- raise AttributeError('unexpected arguments: { } '.format(kwargs))
91- {% - endif %}
92-
93- super().__init__({% if c.eSuperTypes %} **kwargs{% endif %} )
94- {% - for feature in c.eStructuralFeatures | reject(' type' , ecore.EReference) %}
95- { { generate_feature_init(feature) } }
96- {% - endfor %}
97- {% - for feature in c.eStructuralFeatures | select(' type' , ecore.EReference) %}
98- { { generate_feature_init(feature) } }
99- {% - endfor %}
100- {% - endmacro %}
101-
102- { #- -------------------------------------------------------------------------------------------- -#}
103-
104- {% - macro generate_operation_args(o) -%}
105- {% for p in o.eParameters -%}
106- , { { p.name } }{% if not p.required %} =None{% endif -%}
107- {% endfor -%}
108- {% - endmacro %}
109-
110- { #- -------------------------------------------------------------------------------------------- -#}
111-
112- {% - macro generate_operation(o) %}
113- def { { o.name } }(self{ { generate_operation_args(o) } }):
114- { { o | docstringline } }
115- raise NotImplementedError('operation { { o.name } }(...) not yet implemented')
116- {% - endmacro %}
117-
118- { #- -------------------------------------------------------------------------------------------- -#}
119-
120- {% - macro generate_class(c) %}
121-
122- {% if c.abstract %} @abstract
123- {% endif -%}
124- { { generate_class_header(c) } }
125- {% - for a in c.eAttributes %}
126- { { generate_attribute(a) -} }
127- {% endfor %}
128- {% - for r in c.eReferences %}
129- { { generate_reference(r) -} }
130- {% endfor %}
131- {% for d in c.eAttributes | selectattr(' derived' ) %}
132- { { generate_derived_attribute(d) } }
133- {% endfor %}
134- { {- generate_class_init(c) } }
135- {% for o in c.eOperations %}
136- { { generate_operation(o) } }
137- {% endfor %}
138- {% - endmacro %}
139-
140- { #- -------------------------------------------------------------------------------------------- -#}
141-
14222{% - for c in element.eClassifiers if c is type(ecore.EEnum) -%}
143- { { generate_enum(c) } }
23+ { { modutil. generate_enum(c) } }
14424{% - endfor %}
14525{% for c in element.eClassifiers if c is type(ecore.EDataType) -%}
146- { { generate_edatatype(c) } }
26+ { { modutil. generate_edatatype(c) } }
14727{% - endfor %}
14828
14929{% - for c in classes -%}
150- { { generate_class(c) } }
30+ { { modutil. generate_class(c) } }
15131{% - endfor %}
0 commit comments