Browse Source

leapi: put name2classname() from LeFactory in _LeCrud to be available everywhere

ArnAud 9 years ago
parent
commit
8eea3495e8
2 changed files with 33 additions and 24 deletions
  1. 19
    2
      leapi/lecrud.py
  2. 14
    22
      leapi/lefactory.py

+ 19
- 2
leapi/lecrud.py View File

@@ -92,10 +92,27 @@ class _LeCrud(object):
92 92
                     setattr(self, name, cvalue)
93 93
         if len(errors) > 0:
94 94
             raise LeApiDataCheckError("Invalid arguments given to constructor", errors)
95
-        
95
+
96 96
         ## @brief A flag to indicate if the object was fully intanciated or not
97 97
         self._instanciation_complete = len(kwargs) + 1 == len(self.fieldlist())
98
- 
98
+
99
+    ## @brief Convert an EmType or EmClass name in a python class name
100
+    # @param name str : The name
101
+    # @return name.title()
102
+    @staticmethod
103
+    def name2classname(name):
104
+        if not isinstance(name, str):
105
+            raise AttributeError("Argument name should be a str and not a %s" % type(name))
106
+        return name.title()
107
+
108
+    ## @brief Convert an EmCalss and EmType name in a rel2type class name
109
+    # @param name str : The name
110
+    # @return name.title()
111
+    @staticmethod
112
+    def name2rel2type(class_name, type_name):
113
+        cls_name = "Rel_%s2%s"%(_LeCrud.name2classname(class_name), _LeCrud.name2classname(type_name))
114
+        return cls_name
115
+
99 116
     ## @brief Given a dynamically generated class name return the corresponding python Class
100 117
     # @param name str : a concrete class name
101 118
     # @return False if no such component

+ 14
- 22
leapi/lefactory.py View File

@@ -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()])) + "}"

Loading…
Cancel
Save