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