1# This file is part of Xpra. 2# Copyright (C) 2016-2018 Antoine Martin <antoine@xpra.org> 3# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 4# later version. See the file COPYING for details. 5 6 7import logging 8from xpra.util import envbool 9 10SILENCE_COMTYPES = envbool("XPRA_SILENCE_COMTYPES", True) 11if SILENCE_COMTYPES: 12 logging.getLogger("comtypes").setLevel(logging.INFO) 13 14 15class QuietenLogging: 16 17 def __init__(self, *_args): 18 self.loggers = [logging.getLogger(x) for x in ("comtypes.client._code_cache", "comtypes.client._generate")] 19 self.saved_levels = [x.getEffectiveLevel() for x in self.loggers] 20 21 def __enter__(self): 22 if not SILENCE_COMTYPES: 23 return 24 for logger in self.loggers: 25 logger.setLevel(logging.WARNING) 26 self.verbose = None 27 from comtypes import client #@UnresolvedImport 28 gen = getattr(client, "_generate", None) 29 if gen: 30 self.verbose = getattr(gen, "__verbose__", None) 31 if self.verbose is not None: 32 gen.__verbose__ = False 33 34 def __exit__(self, *_args): 35 if not SILENCE_COMTYPES: 36 return 37 if self.verbose is not None: 38 from comtypes import client #@UnresolvedImport 39 gen = getattr(client, "_generate", None) 40 if gen: 41 gen.__verbose__ = self.verbose 42 for i, logger in enumerate(self.loggers): 43 logger.setLevel(self.saved_levels[i]) 44