@@ -86,6 +86,16 @@ def main(dependencies, lionweb_language, output):
86
86
names = [ast .alias (name = 'dataclass' , asname = None )],
87
87
level = 0
88
88
)
89
+ import_enum = ast .ImportFrom (
90
+ module = "enum" ,
91
+ names = [ast .alias (name = "Enum" , asname = None )],
92
+ level = 0
93
+ )
94
+ import_typing = ast .ImportFrom (
95
+ module = 'typing' ,
96
+ names = [ast .alias (name = 'Optional' , asname = None )],
97
+ level = 0
98
+ )
89
99
import_starlasu = ast .ImportFrom (
90
100
module = 'pylasu.model.metamodel' ,
91
101
names = [ast .alias (name = 'Expression' , asname = 'StarLasuExpression' ),
@@ -104,7 +114,7 @@ def main(dependencies, lionweb_language, output):
104
114
names = [ast .alias (name = 'Node' , asname = None )],
105
115
level = 0
106
116
)
107
- module = ast .Module (body = [import_abc , import_dataclass , import_starlasu , import_node ], type_ignores = [])
117
+ module = ast .Module (body = [import_abc , import_dataclass , import_typing , import_enum , import_starlasu , import_node ], type_ignores = [])
108
118
109
119
110
120
for element in language .get_elements ():
@@ -115,7 +125,22 @@ def main(dependencies, lionweb_language, output):
115
125
elif isinstance (element , PrimitiveType ):
116
126
pass
117
127
elif isinstance (element , Enumeration ):
118
- pass
128
+ members = [
129
+ ast .Assign (
130
+ targets = [ast .Name (id = literal .get_name (), ctx = ast .Store ())],
131
+ value = ast .Constant (value = literal .get_name ())
132
+ )
133
+ for literal in element .get_literals ()
134
+ ]
135
+
136
+ enum_class = ast .ClassDef (
137
+ name = element .get_name (),
138
+ bases = [ast .Name (id = "Enum" , ctx = ast .Load ())],
139
+ keywords = [],
140
+ body = members ,
141
+ decorator_list = []
142
+ )
143
+ module .body .append (enum_class )
119
144
else :
120
145
raise ValueError (f"Unsupported { element } " )
121
146
@@ -162,19 +187,52 @@ def main(dependencies, lionweb_language, output):
162
187
field_name = feature .get_name ()
163
188
if field_name in keyword .kwlist :
164
189
field_name = f"{ field_name } _"
190
+ type = feature .get_type ().get_name ()
191
+ if feature .is_multiple ():
192
+ type = f"List[{ type } ]"
193
+ elif feature .is_optional ():
194
+ type = f"Optional[{ type } ]"
165
195
field = ast .AnnAssign (
166
196
target = ast .Name (id = field_name , ctx = ast .Store ()),
167
- annotation = ast .Constant (value = feature . get_type (). get_name () ),
197
+ annotation = ast .Constant (value = type ),
168
198
value = None ,
169
199
simple = 1 ,
170
200
)
171
201
if len (classdef .body ) == 1 and isinstance (classdef .body [0 ], ast .Pass ):
172
202
classdef .body = []
173
203
classdef .body .append (field )
174
204
elif isinstance (feature , Reference ):
175
- pass
205
+ field_name = feature .get_name ()
206
+ if field_name in keyword .kwlist :
207
+ field_name = f"{ field_name } _"
208
+ type = f"ReferenceByName[{ feature .get_type ().get_name ()} ]"
209
+ if feature .is_optional ():
210
+ type = f"Optional[{ type } ]"
211
+ field = ast .AnnAssign (
212
+ target = ast .Name (id = field_name , ctx = ast .Store ()),
213
+ annotation = ast .Constant (value = type ),
214
+ value = None ,
215
+ simple = 1 ,
216
+ )
217
+ if len (classdef .body ) == 1 and isinstance (classdef .body [0 ], ast .Pass ):
218
+ classdef .body = []
219
+ classdef .body .append (field )
176
220
elif isinstance (feature , Property ):
177
- pass
221
+ field_name = feature .get_name ()
222
+ if field_name in keyword .kwlist :
223
+ field_name = f"{ field_name } _"
224
+ type = feature .get_type ().get_name ()
225
+ if feature .is_optional ():
226
+ type = f"Optional[{ type } ]"
227
+ field = ast .AnnAssign (
228
+ target = ast .Name (id = field_name , ctx = ast .Store ()),
229
+ annotation = ast .Constant (value = type ),
230
+ value = None ,
231
+ simple = 1 ,
232
+ )
233
+ if len (classdef .body ) == 1 and isinstance (classdef .body [0 ], ast .Pass ):
234
+ classdef .body = []
235
+ classdef .body .append (field )
178
236
else :
179
237
raise ValueError ()
180
238
0 commit comments