From c017bd7cfa2f0e0505e18d59524c8f4c91ea3546 Mon Sep 17 00:00:00 2001 From: Chris PeBenito Date: Fri, 4 Mar 2016 13:49:03 -0500 Subject: [PATCH] Apply logging best practices. * Use __name__ for the logger name * Add top-level library NullHandlers --- setools/__init__.py | 4 ++++ setools/boolquery.py | 4 ++++ setools/boundsquery.py | 4 ++++ setools/categoryquery.py | 4 ++++ setools/commonquery.py | 4 ++++ setools/constraintquery.py | 4 ++++ setools/defaultquery.py | 4 ++++ setools/diff/difference.py | 2 +- setools/dta.py | 2 +- setools/fsusequery.py | 4 ++++ setools/genfsconquery.py | 4 ++++ setools/infoflow.py | 2 +- setools/initsidquery.py | 4 ++++ setools/mlsrulequery.py | 4 ++++ setools/netifconquery.py | 4 ++++ setools/nodeconquery.py | 4 ++++ setools/objclassquery.py | 4 ++++ setools/permmap.py | 2 +- setools/polcapquery.py | 4 ++++ setools/policyrep/__init__.py | 2 +- setools/policyrep/qpol.i | 2 +- setools/portconquery.py | 4 ++++ setools/query.py | 2 -- setools/rbacrulequery.py | 4 ++++ setools/rolequery.py | 4 ++++ setools/sensitivityquery.py | 4 ++++ setools/terulequery.py | 4 ++++ setools/typeattrquery.py | 4 ++++ setools/typequery.py | 4 ++++ setools/userquery.py | 4 ++++ setoolsgui/__init__.py | 3 +++ setoolsgui/apol/details.py | 2 +- setoolsgui/apol/dta.py | 2 +- setoolsgui/apol/excludetypes.py | 2 +- setoolsgui/apol/infoflow.py | 2 +- setoolsgui/apol/mainwindow.py | 2 +- setoolsgui/apol/mlsrulequery.py | 2 +- setoolsgui/apol/rbacrulequery.py | 2 +- setoolsgui/apol/terulequery.py | 2 +- setoolsgui/apol/userquery.py | 2 +- 40 files changed, 110 insertions(+), 17 deletions(-) diff --git a/setools/__init__.py b/setools/__init__.py index d3ca308..8c4fc91 100644 --- a/setools/__init__.py +++ b/setools/__init__.py @@ -24,6 +24,8 @@ try: except ImportError: # pragma: no cover __version__ = "unknown" +import logging + # Python classes for policy representation from . import policyrep from .policyrep import SELinuxPolicy @@ -72,3 +74,5 @@ from .dta import DomainTransitionAnalysis # Policy difference from .diff import PolicyDifference + +logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/setools/boolquery.py b/setools/boolquery.py index b70b7d5..1c3fd2d 100644 --- a/setools/boolquery.py +++ b/setools/boolquery.py @@ -50,6 +50,10 @@ class BoolQuery(compquery.ComponentQuery): else: self._default = bool(value) + def __init__(self, policy, **kwargs): + super(BoolQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all Booleans matching the criteria.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/boundsquery.py b/setools/boundsquery.py index da73455..fa7011a 100644 --- a/setools/boundsquery.py +++ b/setools/boundsquery.py @@ -41,6 +41,10 @@ class BoundsQuery(PolicyQuery): child = CriteriaDescriptor("child_regex") child_regex = False + def __init__(self, policy, **kwargs): + super(BoundsQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching *bounds statements.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/categoryquery.py b/setools/categoryquery.py index d4d7c4c..d6fab90 100644 --- a/setools/categoryquery.py +++ b/setools/categoryquery.py @@ -39,6 +39,10 @@ class CategoryQuery(mixins.MatchAlias, compquery.ComponentQuery): will be used on the alias names. """ + def __init__(self, policy, **kwargs): + super(CategoryQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching categories.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/commonquery.py b/setools/commonquery.py index e105ccb..5e332b7 100644 --- a/setools/commonquery.py +++ b/setools/commonquery.py @@ -43,6 +43,10 @@ class CommonQuery(mixins.MatchPermission, compquery.ComponentQuery): on the permission names instead of set logic. """ + def __init__(self, policy, **kwargs): + super(CommonQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching commons.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/constraintquery.py b/setools/constraintquery.py index a7fee76..020282e 100644 --- a/setools/constraintquery.py +++ b/setools/constraintquery.py @@ -72,6 +72,10 @@ class ConstraintQuery(mixins.MatchObjClass, mixins.MatchPermission, query.Policy type_regex = False type_indirect = True + def __init__(self, policy, **kwargs): + super(ConstraintQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def _match_expr(self, expr, criteria, indirect, regex): """ Match roles/types/users in a constraint expression, diff --git a/setools/defaultquery.py b/setools/defaultquery.py index c9c1cb2..686dfdf 100644 --- a/setools/defaultquery.py +++ b/setools/defaultquery.py @@ -46,6 +46,10 @@ class DefaultQuery(MatchObjClass, PolicyQuery): default = CriteriaDescriptor(lookup_function="validate_default_value") default_range = CriteriaDescriptor(lookup_function="validate_default_range") + def __init__(self, policy, **kwargs): + super(DefaultQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching default_* statements.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/diff/difference.py b/setools/diff/difference.py index 0ea4f3b..f3cde8a 100644 --- a/setools/diff/difference.py +++ b/setools/diff/difference.py @@ -27,7 +27,7 @@ class Difference(object): """Base class for all policy differences.""" def __init__(self, left_policy, right_policy): - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.left_policy = left_policy self.right_policy = right_policy diff --git a/setools/dta.py b/setools/dta.py index 7993f22..abe5a1d 100644 --- a/setools/dta.py +++ b/setools/dta.py @@ -54,7 +54,7 @@ class DomainTransitionAnalysis(object): Parameter: policy The policy to analyze. """ - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.exclude = exclude diff --git a/setools/fsusequery.py b/setools/fsusequery.py index 131a649..0aa44ec 100644 --- a/setools/fsusequery.py +++ b/setools/fsusequery.py @@ -60,6 +60,10 @@ class FSUseQuery(contextquery.ContextQuery): fs = CriteriaDescriptor("fs_regex") fs_regex = False + def __init__(self, policy, **kwargs): + super(FSUseQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching fs_use_* statements.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/genfsconquery.py b/setools/genfsconquery.py index c67dfd6..f179fdd 100644 --- a/setools/genfsconquery.py +++ b/setools/genfsconquery.py @@ -64,6 +64,10 @@ class GenfsconQuery(contextquery.ContextQuery): path = CriteriaDescriptor("path_regex") path_regex = False + def __init__(self, policy, **kwargs): + super(GenfsconQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching genfscons.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/infoflow.py b/setools/infoflow.py index 2aed6f7..32e734d 100644 --- a/setools/infoflow.py +++ b/setools/infoflow.py @@ -41,7 +41,7 @@ class InfoFlowAnalysis(object): exclude The types excluded from the information flow analysis. (default is none) """ - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy diff --git a/setools/initsidquery.py b/setools/initsidquery.py index 1eb3790..6fa01b1 100644 --- a/setools/initsidquery.py +++ b/setools/initsidquery.py @@ -54,6 +54,10 @@ class InitialSIDQuery(compquery.ComponentQuery, contextquery.ContextQuery): No effect if not using set operations. """ + def __init__(self, policy, **kwargs): + super(InitialSIDQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching initial SIDs.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/mlsrulequery.py b/setools/mlsrulequery.py index 615964e..1f06470 100644 --- a/setools/mlsrulequery.py +++ b/setools/mlsrulequery.py @@ -56,6 +56,10 @@ class MLSRuleQuery(mixins.MatchObjClass, query.PolicyQuery): default_superset = False default_proper = False + def __init__(self, policy, **kwargs): + super(MLSRuleQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching MLS rules.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/netifconquery.py b/setools/netifconquery.py index 30db977..071ca37 100644 --- a/setools/netifconquery.py +++ b/setools/netifconquery.py @@ -54,6 +54,10 @@ class NetifconQuery(compquery.ComponentQuery, contextquery.ContextQuery): No effect if not using set operations. """ + def __init__(self, policy, **kwargs): + super(NetifconQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching netifcons.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/nodeconquery.py b/setools/nodeconquery.py index eb21d81..bba190e 100644 --- a/setools/nodeconquery.py +++ b/setools/nodeconquery.py @@ -97,6 +97,10 @@ class NodeconQuery(contextquery.ContextQuery): else: self._network = None + def __init__(self, policy, **kwargs): + super(NodeconQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching nodecons.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/objclassquery.py b/setools/objclassquery.py index 8f40df8..3b0ae90 100644 --- a/setools/objclassquery.py +++ b/setools/objclassquery.py @@ -60,6 +60,10 @@ class ObjClassQuery(compquery.ComponentQuery): perms_indirect = True perms_regex = False + def __init__(self, policy, **kwargs): + super(ObjClassQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching object classes.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/permmap.py b/setools/permmap.py index 54cd9f9..9781388 100644 --- a/setools/permmap.py +++ b/setools/permmap.py @@ -37,7 +37,7 @@ class PermissionMap(object): Parameter: permmapfile The path to the permission map to load. """ - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) if permmapfile: self.load(permmapfile) diff --git a/setools/polcapquery.py b/setools/polcapquery.py index e024b05..14b4af3 100644 --- a/setools/polcapquery.py +++ b/setools/polcapquery.py @@ -35,6 +35,10 @@ class PolCapQuery(compquery.ComponentQuery): be used for matching the name. """ + def __init__(self, policy, **kwargs): + super(PolCapQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching policy capabilities.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/policyrep/__init__.py b/setools/policyrep/__init__.py index c1142d4..b093da2 100644 --- a/setools/policyrep/__init__.py +++ b/setools/policyrep/__init__.py @@ -79,7 +79,7 @@ class SELinuxPolicy(object): policyfile Path to a policy to open. """ - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = None self.filename = None diff --git a/setools/policyrep/qpol.i b/setools/policyrep/qpol.i index 86abb3d..f797d87 100644 --- a/setools/policyrep/qpol.i +++ b/setools/policyrep/qpol.i @@ -141,7 +141,7 @@ def QpolGenerator(cast): def qpol_logger(level, msg): """Log qpol messages via Python logging.""" - logging.getLogger("libqpol").debug(msg) + logging.getLogger(__name__).debug(msg) def qpol_policy_factory(path): """Factory function for qpol policy objects.""" diff --git a/setools/portconquery.py b/setools/portconquery.py index 798a828..f15953b 100644 --- a/setools/portconquery.py +++ b/setools/portconquery.py @@ -114,6 +114,10 @@ class PortconQuery(contextquery.ContextQuery): else: self._protocol = None + def __init__(self, policy, **kwargs): + super(PortconQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching portcons.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/query.py b/setools/query.py index 358a095..247b952 100644 --- a/setools/query.py +++ b/setools/query.py @@ -24,8 +24,6 @@ class PolicyQuery(object): """Base class for SELinux policy queries.""" def __init__(self, policy, **kwargs): - self.log = logging.getLogger(self.__class__.__name__) - self.policy = policy # keys are sorted in reverse order so regex settings diff --git a/setools/rbacrulequery.py b/setools/rbacrulequery.py index 5e9a139..5ffc40a 100644 --- a/setools/rbacrulequery.py +++ b/setools/rbacrulequery.py @@ -82,6 +82,10 @@ class RBACRuleQuery(mixins.MatchObjClass, query.PolicyQuery): except InvalidType: self._target = self.policy.lookup_role(value) + def __init__(self, policy, **kwargs): + super(RBACRuleQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching RBAC rules.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/rolequery.py b/setools/rolequery.py index 37de123..f5d44f1 100644 --- a/setools/rolequery.py +++ b/setools/rolequery.py @@ -49,6 +49,10 @@ class RoleQuery(compquery.ComponentQuery): types_equal = False types_regex = False + def __init__(self, policy, **kwargs): + super(RoleQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching roles.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/sensitivityquery.py b/setools/sensitivityquery.py index a102836..476ff9d 100644 --- a/setools/sensitivityquery.py +++ b/setools/sensitivityquery.py @@ -49,6 +49,10 @@ class SensitivityQuery(mixins.MatchAlias, compquery.ComponentQuery): sens_dom = False sens_domby = False + def __init__(self, policy, **kwargs): + super(SensitivityQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching sensitivities.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/terulequery.py b/setools/terulequery.py index eff8df1..90e9914 100644 --- a/setools/terulequery.py +++ b/setools/terulequery.py @@ -93,6 +93,10 @@ class TERuleQuery(mixins.MatchObjClass, mixins.MatchPermission, query.PolicyQuer boolean_regex = False boolean_equal = False + def __init__(self, policy, **kwargs): + super(TERuleQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching TE rules.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/typeattrquery.py b/setools/typeattrquery.py index a91026c..6433419 100644 --- a/setools/typeattrquery.py +++ b/setools/typeattrquery.py @@ -49,6 +49,10 @@ class TypeAttributeQuery(compquery.ComponentQuery): types_equal = False types_regex = False + def __init__(self, policy, **kwargs): + super(TypeAttributeQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching types.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/typequery.py b/setools/typequery.py index 6634f76..dd9db6a 100644 --- a/setools/typequery.py +++ b/setools/typequery.py @@ -67,6 +67,10 @@ class TypeQuery(mixins.MatchAlias, compquery.ComponentQuery): else: self._permissive = bool(value) + def __init__(self, policy, **kwargs): + super(TypeQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching types.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setools/userquery.py b/setools/userquery.py index 00910cf..4ce9899 100644 --- a/setools/userquery.py +++ b/setools/userquery.py @@ -74,6 +74,10 @@ class UserQuery(compquery.ComponentQuery): roles_equal = False roles_regex = False + def __init__(self, policy, **kwargs): + super(UserQuery, self).__init__(policy, **kwargs) + self.log = logging.getLogger(__name__) + def results(self): """Generator which yields all matching users.""" self.log.info("Generating results from {0.policy}".format(self)) diff --git a/setoolsgui/__init__.py b/setoolsgui/__init__.py index ea702ec..1e8bd3b 100644 --- a/setoolsgui/__init__.py +++ b/setoolsgui/__init__.py @@ -19,3 +19,6 @@ from .apol import ApolMainWindow from . import widget + +import logging +logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/setoolsgui/apol/details.py b/setoolsgui/apol/details.py index 7e90bc4..8bc958f 100644 --- a/setoolsgui/apol/details.py +++ b/setoolsgui/apol/details.py @@ -32,7 +32,7 @@ class DetailsPopup(SEToolsWidget, QDialog): def __init__(self, parent, title=None): super(DetailsPopup, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.setupUi(title) def setupUi(self, title): diff --git a/setoolsgui/apol/dta.py b/setoolsgui/apol/dta.py index bcb5602..1fe0e9a 100644 --- a/setoolsgui/apol/dta.py +++ b/setoolsgui/apol/dta.py @@ -34,7 +34,7 @@ class DomainTransitionAnalysisTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(DomainTransitionAnalysisTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = DomainTransitionAnalysis(policy) self.setupUi() diff --git a/setoolsgui/apol/excludetypes.py b/setoolsgui/apol/excludetypes.py index c0b821c..f0bae02 100644 --- a/setoolsgui/apol/excludetypes.py +++ b/setoolsgui/apol/excludetypes.py @@ -30,7 +30,7 @@ class ExcludeTypes(SEToolsWidget, QDialog): def __init__(self, parent, policy): super(ExcludeTypes, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.parent = parent self.policy = policy self.excluded_list = [str(e) for e in self.parent.query.exclude] diff --git a/setoolsgui/apol/infoflow.py b/setoolsgui/apol/infoflow.py index 7fafaae..e131561 100644 --- a/setoolsgui/apol/infoflow.py +++ b/setoolsgui/apol/infoflow.py @@ -34,7 +34,7 @@ class InfoFlowAnalysisTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(InfoFlowAnalysisTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = InfoFlowAnalysis(policy, perm_map) self.setupUi() diff --git a/setoolsgui/apol/mainwindow.py b/setoolsgui/apol/mainwindow.py index dda3ab5..c7add16 100644 --- a/setoolsgui/apol/mainwindow.py +++ b/setoolsgui/apol/mainwindow.py @@ -38,7 +38,7 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): def __init__(self, filename): super(ApolMainWindow, self).__init__() - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) if filename: self._policy = SELinuxPolicy(filename) diff --git a/setoolsgui/apol/mlsrulequery.py b/setoolsgui/apol/mlsrulequery.py index 71dbfd0..059ff87 100644 --- a/setoolsgui/apol/mlsrulequery.py +++ b/setoolsgui/apol/mlsrulequery.py @@ -35,7 +35,7 @@ class MLSRuleQueryTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(MLSRuleQueryTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = MLSRuleQuery(policy) self.setupUi() diff --git a/setoolsgui/apol/rbacrulequery.py b/setoolsgui/apol/rbacrulequery.py index 0a1ae77..b6e57be 100644 --- a/setoolsgui/apol/rbacrulequery.py +++ b/setoolsgui/apol/rbacrulequery.py @@ -35,7 +35,7 @@ class RBACRuleQueryTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(RBACRuleQueryTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = RBACRuleQuery(policy) self.setupUi() diff --git a/setoolsgui/apol/terulequery.py b/setoolsgui/apol/terulequery.py index 005179e..b5af76d 100644 --- a/setoolsgui/apol/terulequery.py +++ b/setoolsgui/apol/terulequery.py @@ -35,7 +35,7 @@ class TERuleQueryTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(TERuleQueryTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = TERuleQuery(policy) self.setupUi() diff --git a/setoolsgui/apol/userquery.py b/setoolsgui/apol/userquery.py index 87908f4..7874528 100644 --- a/setoolsgui/apol/userquery.py +++ b/setoolsgui/apol/userquery.py @@ -35,7 +35,7 @@ class UserQueryTab(SEToolsWidget, QScrollArea): def __init__(self, parent, policy, perm_map): super(UserQueryTab, self).__init__(parent) - self.log = logging.getLogger(self.__class__.__name__) + self.log = logging.getLogger(__name__) self.policy = policy self.query = UserQuery(policy) self.setupUi()