diff options
| author | Ximin Luo <infinity0@debian.org> | 2017-07-17 10:02:43 (GMT) |
|---|---|---|
| committer | Ximin Luo <infinity0@debian.org> | 2017-07-17 10:02:43 (GMT) |
| commit | fe57c99828060ae77af2784961d47beb44eb74f5 (patch) | |
| tree | 89f6f564f1df235a7825f2c71ffb9b791a7e2c46 | |
| parent | 01391f5cfb0fbb1142a67ed7be7a0d31db50a00e (diff) | |
main, logging: restore old logger settings to avoid pytest vomiting in certain situations
| -rw-r--r-- | diffoscope/logging.py | 11 | ||||
| -rw-r--r-- | diffoscope/main.py | 11 |
2 files changed, 16 insertions, 6 deletions
diff --git a/diffoscope/logging.py b/diffoscope/logging.py index 38bb9bf..3668aa3 100644 --- a/diffoscope/logging.py +++ b/diffoscope/logging.py @@ -17,11 +17,14 @@ # You should have received a copy of the GNU General Public License # along with diffoscope. If not, see <https://www.gnu.org/licenses/>. +import contextlib import logging +@contextlib.contextmanager def setup_logging(debug, log_handler): logger = logging.getLogger() + oldLevel = logger.getEffectiveLevel() logger.setLevel(logging.DEBUG if debug else logging.WARNING) ch = log_handler or logging.StreamHandler() @@ -33,3 +36,11 @@ def setup_logging(debug, log_handler): '%Y-%m-%d %H:%M:%S', ) ch.setFormatter(formatter) + try: + yield logger + finally: + # restore old logging settings. this helps pytest not spew out errors + # like "ValueError: I/O operation on closed file", see + # https://github.com/pytest-dev/pytest/issues/14#issuecomment-272243656 + logger.removeHandler(ch) + logger.setLevel(oldLevel) diff --git a/diffoscope/main.py b/diffoscope/main.py index b91f8b5..60e6600 100644 --- a/diffoscope/main.py +++ b/diffoscope/main.py @@ -322,11 +322,7 @@ def maybe_set_limit(config, parsed_args, key): elif parsed_args.no_default_limits: setattr(config, key, float("inf")) - -def run_diffoscope(parsed_args, post_parse): - log_handler = ProgressManager().setup(parsed_args) - setup_logging(parsed_args.debug, log_handler) - post_parse(parsed_args) +def run_diffoscope(parsed_args): ProfileManager().setup(parsed_args) PresenterManager().configure(parsed_args) logger.debug("Starting diffoscope %s", VERSION) @@ -394,7 +390,10 @@ def main(args=None): with profile('main', 'parse_args'): parser, post_parse = create_parser() parsed_args = parser.parse_args(args) - sys.exit(run_diffoscope(parsed_args, post_parse)) + log_handler = ProgressManager().setup(parsed_args) + with setup_logging(parsed_args.debug, log_handler) as logger: + post_parse(parsed_args) + sys.exit(run_diffoscope(parsed_args)) except KeyboardInterrupt: logger.info('Keyboard Interrupt') sys.exit(2) |
