Beispiel #1
0
 def test_regexp(self):
     """ Regular expressions """
     assert (filter("tag: Tier.*", self.data, regexp=True) is True)
     assert (filter("tag: Tier[123]", self.data, regexp=True) is True)
     assert (filter("tag: mod:[XS]", self.data, regexp=True) is True)
     assert (filter("tag: NoTier.*", self.data, regexp=True) is False)
     assert (filter("tag: -Tier.*", self.data, regexp=True) is False)
Beispiel #2
0
 def test_basic(self):
     """ Basic stuff and negation """
     assert (filter("tag: Tier1", self.data) is True)
     assert (filter("tag: mod:S", self.data) is True)
     assert (filter("tag: -Tier2", self.data) is True)
     assert (filter("tag: -mod:S2", self.data) is True)
     assert (filter("category: Sanity", self.data) is True)
     assert (filter("category: -Regression", self.data) is True)
     assert (filter("tag: Tier2", self.data) is False)
     assert (filter("tag: -Tier1", self.data) is False)
     assert (filter("category: Regression", self.data) is False)
     assert (filter("category: -Sanity", self.data) is False)
Beispiel #3
0
 def prune(self, whole=False, keys=[], names=[], filters=[], conditions=[]):
     """ Filter tree nodes based on given criteria """
     for node in self.climb(whole):
         # Select only nodes with key content
         if not all([key in node.data for key in keys]):
             continue
         # Select nodes with name matching regular expression
         if names and not any(
             [re.search(name, node.name) for name in names]):
             continue
         # Apply filters and conditions if given
         try:
             if not all([
                     utils.filter(filter, node.data, regexp=True)
                     for filter in filters
             ]):
                 continue
             if not all([
                     utils.evaluate(condition, node.data, node)
                     for condition in conditions
             ]):
                 continue
         # Handle missing attribute as if filter failed
         except utils.FilterError:
             continue
         # All criteria met, thus yield the node
         yield node
Beispiel #4
0
 def test_sugar(self):
     """ Syntactic sugar """
     assert (filter("tag: Tier1, Tier2", self.data) is True)
     assert (filter("tag: Tier2, mod:S", self.data) is True)
     assert (filter("tag: Tier1, TIPpass", self.data) is True)
     assert (filter("tag: -Tier2", self.data) is True)
     assert (filter("tag: -Tier1, -Tier2", self.data) is True)
     assert (filter("tag: -Tier1, -Tier2", self.data) is True)
     assert (filter("tag: Tier2, Tier3", self.data) is False)
Beispiel #5
0
 def test_invalid(self):
     """ Invalid filter format """
     with pytest.raises(utils.FilterError):
         filter("x & y", self.data)
     with pytest.raises(utils.FilterError):
         filter("status:proposed", self.data)
     with pytest.raises(utils.FilterError):
         filter("x: 1", None)
Beispiel #6
0
def main(cmdline=None):
    """ Parse options, gather metadata, print requested data """

    # Parse command line arguments
    options, arguments = Options().parse(cmdline)
    if not arguments:
        arguments = ["."]
    output = ""

    # Enable debugging output
    if options.debug:
        utils.log.setLevel(utils.LOG_DEBUG)

    # Show metadata for each path given
    counter = 0
    for path in arguments:
        if options.verbose:
            utils.info("Checking {0} for metadata.".format(path))
        tree = fmf.Tree(path)
        for node in tree.climb(options.whole):
            # Select only nodes with key content
            if not all([key in node.data for key in options.keys]):
                continue
            # Select nodes with name matching regular expression
            if options.names and not any(
                    [re.search(name, node.name) for name in options.names]):
                continue
            # Apply advanced filters if given
            try:
                if not all([utils.filter(filter, node.data)
                        for filter in options.filters]):
                    continue
            # Handle missing attribute as if filter failed
            except utils.FilterError:
                continue
            show = node.show(brief=options.brief)
            print(show)
            output += show + "\n"
            counter += 1
    # Print summary
    if options.verbose:
        utils.info("Found {0}.".format(utils.listed(counter, "object")))
    return output
Beispiel #7
0
 def test_unicode(self):
     """ Unicode support """
     assert (filter("tag: -ťip", self.data) is True)
     assert (filter("tag: ťip", self.data) is False)
     assert (filter("tag: ťip", {"tag": ["ťip"]}) is True)
     assert (filter("tag: -ťop", {"tag": ["ťip"]}) is True)
Beispiel #8
0
 def test_case(self):
     """ Case insensitive """
     assert (filter("tag: tier1", self.data, sensitive=False) is True)
     assert (filter("tag: tippass", self.data, sensitive=False) is True)
Beispiel #9
0
 def test_operators(self):
     """ Operators """
     assert (filter("tag: Tier1 | tag: Tier2", self.data) is True)
     assert (filter("tag: Tier1 | tag: mod:S", self.data) is True)
     assert (filter("tag: mod:X | tag: mod:S", self.data) is True)
     assert (filter("tag: -Tier1 | tag: -Tier2", self.data) is True)
     assert (filter("tag: Tier1 | tag: TIPpass", self.data) is True)
     assert (filter("tag: Tier1 | category: Regression", self.data) is True)
     assert (filter("tag: Tier1 & tag: TIPpass", self.data) is True)
     assert (filter("tag: Tier1 & category: Sanity", self.data) is True)
     assert (filter("tag: Tier2 | tag: Tier3", self.data) is False)
     assert (filter("tag: Tier1 & tag: Tier2", self.data) is False)
     assert (filter("tag: Tier2 & tag: Tier3", self.data) is False)
     assert (filter("tag: Tier1 & category: Regression", self.data) is
             False)
     assert (filter("tag: Tier2 | category: Regression", self.data) is
             False)
Beispiel #10
0
 def test_empty_filter(self):
     """ Empty filter should return True """
     assert filter(None, self.data) is True
     assert filter("", self.data) is True
Beispiel #11
0
def test_filter():
    """ Function filter() """
    data = {"tag": ["Tier1", "TIPpass"], "category": ["Sanity"]}
    # Invalid filter format
    with pytest.raises(FilterError):
        filter("x & y", data)
    with pytest.raises(FilterError):
        filter("status:proposed", data)
    # Basic stuff and negation
    filter("tag: Tier1", data) == True
    filter("tag: -Tier2", data) == True
    filter("category: Sanity", data) == True
    filter("category: -Regression", data) == True
    filter("tag: Tier2", data) == False
    filter("tag: -Tier1", data) == False
    filter("category: Regression", data) == False
    filter("category: -Sanity", data) == False
    # ORs and ANDs
    filter("tag: Tier1 | tag: Tier2", data) == True
    filter("tag: -Tier1 | tag: -Tier2", data) == True
    filter("tag: Tier1 | tag: TIPpass", data) == True
    filter("tag: Tier1 | category: Regression", data) == True
    filter("tag: Tier1 & tag: TIPpass", data) == True
    filter("tag: Tier1 & category: Sanity", data) == True
    filter("tag: Tier2 | tag: Tier3", data) == False
    filter("tag: Tier1 & tag: Tier2", data) == False
    filter("tag: Tier2 & tag: Tier3", data) == False
    filter("tag: Tier1 & category: Regression", data) == False
    filter("tag: Tier2 | category: Regression", data) == False
    # Syntactic sugar
    filter("tag: Tier1, Tier2", data) == True
    filter("tag: Tier1, TIPpass", data) == True
    filter("tag: Tier1; TIPpass", data) == True
    filter("tag: -Tier2", data) == True
    filter("tag: -Tier1, -Tier2", data) == True
    filter("tag: -Tier1, -Tier2", data) == True
    filter("tag: -Tier1; -Tier2", data) == False
    filter("tag: Tier2, Tier3", data) == False
    filter("tag: Tier1; Tier2", data) == False
    filter("tag: Tier2; Tier3", data) == False
    filter("tag: Tier1; -TIPpass", data) == False
    # Regular expressions
    filter("tag: Tier.*", data, regexp=True) == True
    filter("tag: Tier[123]", data, regexp=True) == True
    filter("tag: NoTier.*", data, regexp=True) == False
    filter("tag: -Tier.*", data, regexp=True) == False
    # Case insensitive
    filter("tag: tier1", data, sensitive=False) == True
    filter("tag: tippass", data, sensitive=False) == True
    # Unicode support
    filter("tag: -ťip", data) == True
    filter("tag: ťip", data) == False
    filter("tag: ťip", {"tag": ["ťip"]}) == True
    filter("tag: -ťop", {"tag": ["ťip"]}) == True
Beispiel #12
0
 def test_sugar(self):
     """ Syntactic sugar """
     assert (filter("tag: Tier1, Tier2", self.data) == True)
     assert (filter("tag: Tier1, TIPpass", self.data) == True)
     assert (filter("tag: Tier1; TIPpass", self.data) == True)
     assert (filter("tag: -Tier2", self.data) == True)
     assert (filter("tag: -Tier1, -Tier2", self.data) == True)
     assert (filter("tag: -Tier1, -Tier2", self.data) == True)
     assert (filter("tag: -Tier1; -Tier2", self.data) == False)
     assert (filter("tag: Tier2, Tier3", self.data) == False)
     assert (filter("tag: Tier1; Tier2", self.data) == False)
     assert (filter("tag: Tier2; Tier3", self.data) == False)
     assert (filter("tag: Tier1; -TIPpass", self.data) == False)