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
                                         uid)
96
                                         uid)
97
         except KeyError:
97
         except KeyError:
98
             raise EditorialModelException("EmClass not found : '%s'" % uid)
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
     ##@brief EmGroup getter
112
     ##@brief EmGroup getter
101
     # @param uid None | str : give this argument to get a specific EmGroup
113
     # @param uid None | str : give this argument to get a specific EmGroup
102
     # @return if uid is given returns an EmGroup else returns an EmGroup iterator
114
     # @return if uid is given returns an EmGroup else returns an EmGroup iterator

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

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

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

57
     _uid = None 
57
     _uid = None 
58
     ##@brief Read only datasource ( see @ref lodel2_datasources )
58
     ##@brief Read only datasource ( see @ref lodel2_datasources )
59
     _ro_datasource = None
59
     _ro_datasource = None
60
-    ##@breif Read & write datasource ( see @ref lodel2_datasources )
60
+    ##@brief Read & write datasource ( see @ref lodel2_datasources )
61
     _rw_datasource = None
61
     _rw_datasource = None
62
+    ##@brief Store the list of child classes
63
+    _child_classes = None
62
 
64
 
63
     def __new__(cls, **kwargs):
65
     def __new__(cls, **kwargs):
64
         
66
         
201
                 res.append(cur)
203
                 res.append(cur)
202
         return res
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
     ##@brief Return the parent class that is the "source" of uid
213
     ##@brief Return the parent class that is the "source" of uid
205
     #
214
     #
206
     #The method goal is to return the parent class that defines UID.
215
     #The method goal is to return the parent class that defines UID.

Loading…
Cancel
Save