|
@@ -264,7 +264,30 @@ class _LeObject(object):
|
264
|
264
|
raise RuntimeError("Unable to delete the previous superior")
|
265
|
265
|
|
266
|
266
|
return self._datasource.add_superior(lesup, lesub, nature, rank)
|
267
|
|
-
|
|
267
|
+
|
|
268
|
+ ## @brief Delete a hierarchy link between two LeObject
|
|
269
|
+ # @param lesup LeType | LeRoot : LeType child class or hierarchy root
|
|
270
|
+ # @param lesub LeType : LeType child class
|
|
271
|
+ # @param nature str : The nature of the relation @ref EditorialModel.classtypes
|
|
272
|
+ # @return True if deletion done successfully
|
|
273
|
+ # @throw ValueError when bad arguments given
|
|
274
|
+ @classmethod
|
|
275
|
+ def hierarchy_del(cls, lesup, lesub, nature):
|
|
276
|
+ if nature not in EditorialModel.classtypes.EmClassType.natures(lesub._classtype):
|
|
277
|
+ raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
|
|
278
|
+
|
|
279
|
+ if not cls.leo_is_root(lesup):
|
|
280
|
+ if nature not in EditorialModel.classtypes.EmClassType.natures(lesup._classtype):
|
|
281
|
+ raise ValueError("Invalid nature '%s' for %s"%(nature, lesup.__class__.__name__))
|
|
282
|
+ if lesup.__class__ not in lesub._superiors[nature]:
|
|
283
|
+ raise ValueError("%s is not a valid superior for %s"%(lesup.__class__, lesub.__class__))
|
|
284
|
+ superiors = cls.hierarchy_get(lesub, nature, leo_is_sup = False)
|
|
285
|
+ res = True
|
|
286
|
+ for _lesup in superiors:
|
|
287
|
+ if not cls._datasource.del_superior(_lesup, lesub, nature):
|
|
288
|
+ #How to handler this ?
|
|
289
|
+ res = False
|
|
290
|
+ return res
|
268
|
291
|
|
269
|
292
|
## @brief Prepare a field_list
|
270
|
293
|
# @param field_list list : List of string representing fields
|