prieto 8 vuotta sitten
vanhempi
commit
20b148f0d0

+ 59
- 1
lodel/editorial_model/components.py Näytä tiedosto

@@ -228,9 +228,46 @@ class EmGroup(object):
228 228
                     to_scan.append(new_dep)
229 229
                     res[new_dep.uid] = new_dep
230 230
         return res
231
+    
232
+    ## @brief Returns EmGroup applicants
233
+    # @param recursive bool : if True return all dependencies and their dependencies
234
+    # @returns a dict of EmGroup identified by uid
235
+    def applicants(self, recursive = False):
236
+        res = copy.copy(self.required_by)
237
+        if not recursive:
238
+            return res
239
+        to_scan = list(res.values())
240
+        while len(to_scan) > 0:
241
+            cur_app = to_scan.pop()
242
+            for new_app in cur_app.required_by.values():
243
+                if new_app not in res:
244
+                    to_scan.append(new_app)
245
+                    res[new_app.uid] = new_app
246
+        return res
247
+    
248
+	## @brief Returns EmGroup components
249
+    # @returns a copy of the set of components
250
+    def components(self):
251
+        return (self.__components).copy()
231 252
 
253
+    ## @brief Returns EmGroup display_name
254
+    #  @param lang str | None : If None return default lang translation
255
+    #  @returns None if display_name is None, a str for display_name else
256
+    def get_display_name(self, lang=None):
257
+        name=self.display_name
258
+        if name is None : return None
259
+        return name.get(lang);
260
+
261
+    ## @brief Returns EmGroup help_text
262
+    #  @param lang str | None : If None return default lang translation
263
+    #  @returns None if display_name is None, a str for display_name else
264
+    def get_help_text(self, lang=None):
265
+        help=self.help_text
266
+        if help is None : return None
267
+        return help.get(lang);
268
+    
232 269
     ## @brief Add components in a group
233
-    # @param components list : EmComponent instance list
270
+    # @param components list : EmComponent instances list
234 271
     def add_components(self, components):
235 272
         for component in components:
236 273
             if isinstance(component, EmField):
@@ -255,11 +292,32 @@ class EmGroup(object):
255 292
             raise EditorialModelError("Circular dependencie detected, cannot add dependencie")
256 293
         self.require[grp.uid] = grp
257 294
         grp.required_by[self.uid] = self
295
+        
296
+    ## @brief Add a applicant
297
+    # @param em_group EmGroup|iterable : an EmGroup instance or list of instance
298
+    def add_applicant(self, grp):
299
+        try:
300
+            for group in grp:
301
+                self.add_applicant(group)
302
+            return
303
+        except TypeError: pass
304
+                
305
+        if grp.uid in self.required_by:
306
+            return
307
+        if self.__circular_applicant(grp):
308
+            raise EditorialModelError("Circular applicant detected, cannot add applicant")
309
+        self.required_by[grp.uid] = grp
310
+        grp.require[self.uid] = self
258 311
     
259 312
     ## @brief Search for circular dependencie
260 313
     # @return True if circular dep found else False
261 314
     def __circular_dependencie(self, new_dep):
262 315
         return self.uid in new_dep.dependencies(True)
316
+    
317
+    ## @brief Search for circular applicant
318
+    # @return True if circular app found else False
319
+    def __circular_applicant(self, new_app):
320
+        return self.uid in new_app.applicants(True)
263 321
 
264 322
     ## @brief Fancy string representation of an EmGroup
265 323
     # @return a string

+ 2
- 2
lodel/editorial_model/model.py Näytä tiedosto

@@ -24,7 +24,7 @@ class EditorialModel(object):
24 24
     
25 25
     ## @brief EmClass accessor
26 26
     # @param uid None | str : give this argument to get a specific EmClass
27
-    # @return if uid given return an EmClass else return an EmClass iterator
27
+    # @return if uid is given returns an EmClass else returns an EmClass iterator
28 28
     def classes(self, uid = None):
29 29
         try:
30 30
             return self.__elt_getter(self.__classes, uid)
@@ -33,7 +33,7 @@ class EditorialModel(object):
33 33
 
34 34
     ## @brief EmGroup getter
35 35
     # @param uid None | str : give this argument to get a specific EmGroup
36
-    # @return if uid given return an EmGroup else return an EmGroup iterator
36
+    # @return if uid is given returns an EmGroup else returns an EmGroup iterator
37 37
     def groups(self, uid = None):
38 38
         try:
39 39
             return self.__elt_getter(self.__groups, uid)

+ 67
- 0
tests/editorial_model/test_model.py Näytä tiedosto

@@ -159,6 +159,18 @@ class EmGroupTestCase(unittest.TestCase):
159 159
 
160 160
         grp3 = EmGroup('depends', depends = (grp, grp2))
161 161
         self.assertEqual(set(grp3.dependencies().values()), set((grp, grp2)))
162
+        
163
+    def test_add_comps(self):
164
+        """ Test components adding in groups"""
165
+        grp = EmGroup('grp')
166
+        cpn1 = EmField('test1','integer')
167
+        cpn2 = EmClass('testClass', 'test class')
168
+        grp.add_components([cpn1,cpn2])
169
+        
170
+        s1=grp.components()
171
+        s2=grp.components()
172
+        s1.add(EmField('test2','varchar'))
173
+        self.assertEqual(s2,set([cpn1,cpn2]));
162 174
 
163 175
     def test_deps(self):
164 176
         """ Test dependencies """
@@ -190,6 +202,60 @@ class EmGroupTestCase(unittest.TestCase):
190 202
                 self.assertEqual(uid, dep.uid)
191 203
             for uid, dep in grp.required_by.items():
192 204
                 self.assertEqual(uid, dep.uid)
205
+                
206
+    def test_apps(self):
207
+        """ Test applicants """
208
+        grp1 = EmGroup('grp1')
209
+        grp2 = EmGroup('grp2')
210
+        grp3 = EmGroup('grp3')
211
+        grp4 = EmGroup('grp4')
212
+
213
+        grp2.add_applicant(grp1)
214
+        grp3.add_applicant(grp2)
215
+        grp4.add_applicant(grp2)
216
+        grp4.add_applicant(grp1)
217
+
218
+        self.assertEqual(set(grp1.applicants().values()), set())
219
+        self.assertEqual(set(grp2.applicants().values()), set([grp1]))
220
+        self.assertEqual(set(grp3.applicants().values()), set([grp2]))
221
+        self.assertEqual(set(grp4.applicants().values()), set([grp2, grp1]))
222
+
223
+        self.assertEqual(set(grp3.applicants(True).values()), set([grp2, grp1]))
224
+        self.assertEqual(set(grp4.applicants(True).values()), set([grp2, grp1]))
225
+
226
+        self.assertEqual(set(grp1.required_by.values()), set())
227
+        self.assertEqual(set(grp2.required_by.values()), set([grp1]))
228
+        self.assertEqual(set(grp3.required_by.values()), set([grp2]))
229
+        self.assertEqual(set(grp4.required_by.values()), set([grp2,grp1]))
230
+
231
+        for grp in [grp1, grp2, grp3, grp4]:
232
+            for uid, dep in grp.applicants(recursive = True).items():
233
+                self.assertEqual(uid, dep.uid)
234
+            for uid, dep in grp.required_by.items():
235
+                self.assertEqual(uid, dep.uid)
236
+                
237
+    def test_display_name(self):
238
+        grp = EmGroup('grp',None,'Test affichage du nom')
239
+        a = grp.get_display_name()
240
+        b = a
241
+        b = 'Test de copie du nom'
242
+        self.assertEqual(a,'Test affichage du nom')
243
+        grp1 = EmGroup('grp')
244
+        c = grp1.get_display_name()
245
+        self.assertEqual(c, None)
246
+        with self.assertRaises(ValueError): grp.get_display_name('ita')
247
+        
248
+    def test_help_text(self):
249
+        grp = EmGroup('grp',None,None,'Test affichage du nom')
250
+        a = grp.get_help_text()
251
+        b = a
252
+        b = 'Test de copie du nom'
253
+        self.assertEqual(a,'Test affichage du nom')
254
+        grp1 = EmGroup('grp')
255
+        c = grp1.get_help_text()
256
+        self.assertEqual(c, None)
257
+        with self.assertRaises(ValueError): grp.get_help_text('ita')
258
+            
193 259
     def test_deps_complex(self):
194 260
         """ More complex dependencies handling test """
195 261
         grps = [ EmGroup('group%d' % i) for i in range(6) ]
@@ -235,3 +301,4 @@ class EmGroupTestCase(unittest.TestCase):
235 301
         e_hash = 0x74657374677270333130363537393137343730343438343139303233393838303936373730323936353536393032313839313536333632313037343435323138313735343936303237373532343436303639363137
236 302
         self.assertEqual(grp.d_hash(), e_hash)
237 303
 
304
+        

Loading…
Peruuta
Tallenna