|
@@ -7,6 +7,7 @@ import os.path
|
7
|
7
|
import EditorialModel
|
8
|
8
|
from EditorialModel.model import Model
|
9
|
9
|
from EditorialModel.fieldtypes.generic import GenericFieldType
|
|
10
|
+from leapi.lecrud import _LeCrud
|
10
|
11
|
|
11
|
12
|
|
12
|
13
|
## @brief This class is designed to generated the leobject API given an EditorialModel.model
|
|
@@ -24,15 +25,6 @@ class LeFactory(object):
|
24
|
25
|
self._dyn_file = os.path.basename(code_filename)
|
25
|
26
|
self._modname = os.path.dirname(code_filename).strip('/').replace('/', '.') #Warning Windaube compatibility
|
26
|
27
|
|
27
|
|
- ## @brief Convert an EmType or EmClass name in a python class name
|
28
|
|
- # @param name str : The name
|
29
|
|
- # @return name.title()
|
30
|
|
- @staticmethod
|
31
|
|
- def name2classname(name):
|
32
|
|
- if not isinstance(name, str):
|
33
|
|
- raise AttributeError("Argument name should be a str and not a %s" % type(name))
|
34
|
|
- return name.title()
|
35
|
|
-
|
36
|
28
|
## @brief Return a call to a FieldType constructor given an EmField
|
37
|
29
|
# @param emfield EmField : An EmField
|
38
|
30
|
# @return a string representing the python code to instanciate a EmFieldType
|
|
@@ -83,7 +75,7 @@ class LeFactory(object):
|
83
|
75
|
for field in [ f for f in model.components('EmField') if f.fieldtype == 'rel2type']:
|
84
|
76
|
related = model.component(field.rel_to_type_id)
|
85
|
77
|
src = field.em_class
|
86
|
|
- cls_name = "Rel_%s2%s"%(self.name2classname(src.name), self.name2classname(related.name))
|
|
78
|
+ cls_name = _LeCrud.name2rel2type(src.name, related.name)
|
87
|
79
|
|
88
|
80
|
attr_l = dict()
|
89
|
81
|
for attr in [ f for f in model.components('EmField') if f.rel_field_id == field.uid]:
|
|
@@ -98,8 +90,8 @@ class {classname}(LeRel2Type):
|
98
|
90
|
""".format(
|
99
|
91
|
classname = cls_name,
|
100
|
92
|
attr_dict = "{" + (','.join(['\n %s: %s' % (repr(f), v) for f,v in attr_l.items()])) + "\n}",
|
101
|
|
- supcls = self.name2classname(src.name),
|
102
|
|
- subcls = self.name2classname(related.name),
|
|
93
|
+ supcls = _LeCrud.name2classname(src.name),
|
|
94
|
+ subcls = _LeCrud.name2classname(related.name),
|
103
|
95
|
)
|
104
|
96
|
res_code += rel_code
|
105
|
97
|
return res_code
|
|
@@ -115,7 +107,7 @@ class {classname}(LeRel2Type):
|
115
|
107
|
#Populating linked_type attr
|
116
|
108
|
for rfield in [ f for f in emclass.fields() if f.fieldtype == 'rel2type']:
|
117
|
109
|
fti = rfield.fieldtype_instance()
|
118
|
|
- cls_linked_types.append(LeFactory.name2classname(model.component(fti.rel_to_type_id).name))
|
|
110
|
+ cls_linked_types.append(_LeCrud.name2classname(model.component(fti.rel_to_type_id).name))
|
119
|
111
|
# Populating fieldtype attr
|
120
|
112
|
for field in emclass.fields(relational = False):
|
121
|
113
|
self.needed_fieldtypes |= set([field.fieldtype])
|
|
@@ -128,7 +120,7 @@ class {classname}(LeRel2Type):
|
128
|
120
|
{name}._linked_types = {ltypes}
|
129
|
121
|
{name}._classtype = {classtype}
|
130
|
122
|
""".format(
|
131
|
|
- name = LeFactory.name2classname(emclass.name),
|
|
123
|
+ name = _LeCrud.name2classname(emclass.name),
|
132
|
124
|
ftypes = "{" + (','.join(['\n %s: %s' % (repr(f), v) for f, v in cls_fields.items()])) + "\n}",
|
133
|
125
|
|
134
|
126
|
ltypes = "[" + (','.join(cls_linked_types))+"]",
|
|
@@ -148,7 +140,7 @@ class {classname}(LeRel2Type):
|
148
|
140
|
for nat, sup_l in emtype.superiors().items():
|
149
|
141
|
type_superiors.append('%s: [%s]' % (
|
150
|
142
|
repr(nat),
|
151
|
|
- ', '.join([LeFactory.name2classname(sup.name) for sup in sup_l])
|
|
143
|
+ ', '.join([_LeCrud.name2classname(sup.name) for sup in sup_l])
|
152
|
144
|
))
|
153
|
145
|
|
154
|
146
|
return """
|
|
@@ -157,10 +149,10 @@ class {classname}(LeRel2Type):
|
157
|
149
|
{name}._superiors = {dsups}
|
158
|
150
|
{name}._leclass = {leclass}
|
159
|
151
|
""".format(
|
160
|
|
- name=LeFactory.name2classname(emtype.name),
|
|
152
|
+ name=_LeCrud.name2classname(emtype.name),
|
161
|
153
|
fields=repr(type_fields),
|
162
|
154
|
dsups='{' + (', '.join(type_superiors)) + '}',
|
163
|
|
- leclass=LeFactory.name2classname(emtype.em_class.name)
|
|
155
|
+ leclass=_LeCrud.name2classname(emtype.em_class.name)
|
164
|
156
|
)
|
165
|
157
|
|
166
|
158
|
## @brief Generate python code containing the LeObject API
|
|
@@ -198,7 +190,7 @@ import %s
|
198
|
190
|
#Generating the code for LeObject class
|
199
|
191
|
leobj_me_uid = dict()
|
200
|
192
|
for comp in model.components('EmType') + model.components('EmClass'):
|
201
|
|
- leobj_me_uid[comp.uid] = LeFactory.name2classname(comp.name)
|
|
193
|
+ leobj_me_uid[comp.uid] = _LeCrud.name2classname(comp.name)
|
202
|
194
|
|
203
|
195
|
#Building the fieldtypes dict of LeObject
|
204
|
196
|
(leobj_uid_fieldtype, leobj_fieldtypes) = self.concret_fieldtypes(EditorialModel.classtypes.common_fields)
|
|
@@ -284,7 +276,7 @@ class {name}(LeClass, LeObject):
|
284
|
276
|
_class_id = {uid}
|
285
|
277
|
|
286
|
278
|
""".format(
|
287
|
|
- name=LeFactory.name2classname(emclass.name),
|
|
279
|
+ name=_LeCrud.name2classname(emclass.name),
|
288
|
280
|
uid=emclass.uid
|
289
|
281
|
)
|
290
|
282
|
#LeType child classes definition
|
|
@@ -296,8 +288,8 @@ class {name}(LeType, {leclass}):
|
296
|
288
|
_type_id = {uid}
|
297
|
289
|
|
298
|
290
|
""".format(
|
299
|
|
- name=LeFactory.name2classname(emtype.name),
|
300
|
|
- leclass=LeFactory.name2classname(emtype.em_class.name),
|
|
291
|
+ name=_LeCrud.name2classname(emtype.name),
|
|
292
|
+ leclass=_LeCrud.name2classname(emtype.em_class.name),
|
301
|
293
|
uid=emtype.uid
|
302
|
294
|
)
|
303
|
295
|
|
|
@@ -312,7 +304,7 @@ class {name}(LeType, {leclass}):
|
312
|
304
|
|
313
|
305
|
|
314
|
306
|
#Populating LeObject._me_uid dict for a rapid fetch of LeType and LeClass given an EM uid
|
315
|
|
- me_uid = {comp.uid: LeFactory.name2classname(comp.name) for comp in emclass_l + emtype_l}
|
|
307
|
+ me_uid = {comp.uid: _LeCrud.name2classname(comp.name) for comp in emclass_l + emtype_l}
|
316
|
308
|
result += """
|
317
|
309
|
## @brief Dict for getting LeClass and LeType child classes given an EM uid
|
318
|
310
|
LeObject._me_uid = %s""" % "{" + (', '.join(['%s: %s' % (k, v) for k, v in me_uid.items()])) + "}"
|