Home | History | Annotate | Download | only in setools
      1 # Copyright 2015, Tresys Technology, LLC
      2 #
      3 # This file is part of SETools.
      4 #
      5 # SETools is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU Lesser General Public License as
      7 # published by the Free Software Foundation, either version 2.1 of
      8 # the License, or (at your option) any later version.
      9 #
     10 # SETools is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU Lesser General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU Lesser General Public
     16 # License along with SETools.  If not, see
     17 # <http://www.gnu.org/licenses/>.
     18 #
     19 import logging
     20 
     21 from . import compquery
     22 from . import mixins
     23 
     24 
     25 class CategoryQuery(mixins.MatchAlias, compquery.ComponentQuery):
     26 
     27     """
     28     Query MLS Categories
     29 
     30     Parameter:
     31     policy       The policy to query.
     32 
     33     Keyword Parameters/Class attributes:
     34     name         The name of the category to match.
     35     name_regex   If true, regular expression matching will
     36                  be used for matching the name.
     37     alias        The alias name to match.
     38     alias_regex  If true, regular expression matching
     39                  will be used on the alias names.
     40     """
     41 
     42     def results(self):
     43         """Generator which yields all matching categories."""
     44         self.log.info("Generating results from {0.policy}".format(self))
     45         self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
     46         self.log.debug("Alias: {0.alias}, regex: {0.alias_regex}".format(self))
     47 
     48         for cat in self.policy.categories():
     49             if not self._match_name(cat):
     50                 continue
     51 
     52             if not self._match_alias(cat):
     53                 continue
     54 
     55             yield cat
     56