# HG changeset patch # User BenoƮt Allard # Date 1413359432 -7200 # Node ID 4b53e7bcff0d40108f14322206a5841c8216d853 # Parent 8a89b7a591e657c3daef81465d887251219693e4 Add method to check group and producttree references diff -r 8a89b7a591e6 -r 4b53e7bcff0d farolluz/cvrf.py --- a/farolluz/cvrf.py Tue Oct 14 16:49:36 2014 +0200 +++ b/farolluz/cvrf.py Wed Oct 15 09:50:32 2014 +0200 @@ -699,12 +699,9 @@ if not isinstance(groupids, list): groupids = [groupids] for groupid in groupids: - print "testing GroupId: ", groupid for _ in self.mentionsGroupId(groupid): # We only need to know if the generator yield at least one elem. - print 'True' return True - print 'False' return False def validate(self, productids, groupids): @@ -1040,7 +1037,7 @@ return set(self.getProductForID(p) for p in products) def isProductOrphan(self, productid): - """ Returns if a productid is mentionned nowhere in the document """ + """ Returns if a productid is mentioned nowhere in the document """ # We first look at the ProductTree ptree = self._producttree for relation in ptree._relationships: @@ -1056,10 +1053,30 @@ if vulnerability.isMentioningProdId(productid): return False for groupid in groupids: + # This will never be executed as we bail out on len(groups) > 0 if vulnerability.isMentioningGroupId(groupid): return False return True + def isGroupOrphan(self, groupid): + """ Returns if a group can be safely deleted """ + for vulnerability in self._vulnerabilities: + if vulnerability.isMentioningGroupId(groupid): + return False + return True + + def isProductTreeOrphan(self): + """ Difference with the previous method is that we don;t care about + inter-producttree references """ + for vulnerability in self._vulnerabilities: + for product in self._producttree._products: + if vulnerability.isMentioningProdId(product._productid): + return False + for group in self._producttree._groups: + if vulnerability.isMentioningGroupId(group._groupid): + return False + return True + def getNote(self, ordinal): for note in self._notes: if note._ordinal == ordinal: