Browse Source

Add a new get_class_childs to Model class and a child_classes method to LeObject

Now lefactory populate a LeObject attribute named _child_classes
Yann Weber 8 years ago
parent
commit
1f1e6f13b3
3 changed files with 26 additions and 2 deletions
  1. 13
    1
      lodel/editorial_model/model.py
  2. 3
    0
      lodel/leapi/lefactory.py
  3. 10
    1
      lodel/leapi/leobject.py

+ 13
- 1
lodel/editorial_model/model.py View File

@@ -96,7 +96,19 @@ class EditorialModel(object):
96 96
                                         uid)
97 97
         except KeyError:
98 98
             raise EditorialModelException("EmClass not found : '%s'" % uid)
99
-             
99
+    
100
+    ##@brief EmClass child list accessor
101
+    #@param uid str : the EmClass uid
102
+    #@return a set of EmClass
103
+    def get_class_childs(self, uid):
104
+        res = list()
105
+        cur = self.classes(uid)
106
+        for cls in self.classes():
107
+            if cur in cls.parents_recc:
108
+                res.append(cls)
109
+        return set(res)
110
+
111
+
100 112
     ##@brief EmGroup getter
101 113
     # @param uid None | str : give this argument to get a specific EmGroup
102 114
     # @return if uid is given returns an EmGroup else returns an EmGroup iterator

+ 3
- 0
lodel/leapi/lefactory.py View File

@@ -132,6 +132,7 @@ class {clsname}({parents}):
132 132
     _ro_datasource = None
133 133
     _rw_datasource = None
134 134
     _datasource_name = {datasource_name}
135
+    _child_classes = None
135 136
 
136 137
 """.format(
137 138
     clsname = LeObject.name2objname(em_class.uid),
@@ -143,9 +144,11 @@ class {clsname}({parents}):
143 144
         res += em_cls_code
144 145
         # Dyncode fields bootstrap instructions
145 146
         bootstrap += """{classname}._set__fields({fields})
147
+{classname}._child_classes = {child_classes}
146 148
 """.format(
147 149
     classname = LeObject.name2objname(em_class.uid),
148 150
     fields = '{' + (', '.join(['\n\t%s: %s' % (repr(emfield.uid),data_handler_constructor(emfield)) for emfield in em_class.fields()])) + '}',
151
+    child_classes = '(' + (', '.join([ LeObject.name2objname(emcls.uid) for emcls in model.get_class_childs(em_class.uid)]))+ ')',
149 152
 )
150 153
     bootstrap += "\n"
151 154
     return res, set(imports), bootstrap

+ 10
- 1
lodel/leapi/leobject.py View File

@@ -57,8 +57,10 @@ class LeObject(object):
57 57
     _uid = None 
58 58
     ##@brief Read only datasource ( see @ref lodel2_datasources )
59 59
     _ro_datasource = None
60
-    ##@breif Read & write datasource ( see @ref lodel2_datasources )
60
+    ##@brief Read & write datasource ( see @ref lodel2_datasources )
61 61
     _rw_datasource = None
62
+    ##@brief Store the list of child classes
63
+    _child_classes = None
62 64
 
63 65
     def __new__(cls, **kwargs):
64 66
         
@@ -201,6 +203,13 @@ class LeObject(object):
201 203
                 res.append(cur)
202 204
         return res
203 205
     
206
+    ##@brief Return a tuple a child classes
207
+    #@return a tuple of child classes
208
+    @classmethod
209
+    def child_classes(cls):
210
+        return copy.copy(cls._child_classes)
211
+        
212
+
204 213
     ##@brief Return the parent class that is the "source" of uid
205 214
     #
206 215
     #The method goal is to return the parent class that defines UID.

Loading…
Cancel
Save