Exemplo n.º 1
0
    def create_filter(self, filter_set, repoman):
        filter = None
        name = filter_set.pop(0)
        if filter_set.pop(0) == "And":
            filter = Filter.Filter(name, Filter.And)
        else:
            filter = Filter.Filter(name, Filter.Or)

        # Get rid of 'begin items' and 'end items' strings
        filter_set.pop(0)
        filter_set.pop()

        while len(filter_set) > 0:
            filter_type = filter_set.pop(0)
            if filter_type == "BEGIN ITEM":
                key = filter_set.pop(0)
                op = Operations.opForName(filter_set.pop(0))
                value = eval(filter_set.pop(0))
                filter.add_item(FilterItem(key, op, value))
            elif filter_type == "BEGIN GROUP":
                group = filter_set.pop(0)
                isMember = eval(filter_set.pop(0))
                filter.add_item(FilterGroup(group, isMember, repoman))
            else:
                target = self.get(filter_set.pop(0))
                value = eval(filter_set.pop(0))
                filter.add_item(FilterFilter(target, value))
            # Get rid of 'end item', 'end group' or 'end filterfilter' strings
            filter_set.pop(0)

        return filter