[Python-Dev] [Python-checkins] r85288 - in python/branches/py3k/Lib: concurrent/futures/_base.py test/test_concurrent_futures.py

Benjamin Peterson benjamin at python.org
Wed Oct 6 17:02:22 CEST 2010


2010/10/6 brian.quinlan <python-checkins at python.org>:
> Author: brian.quinlan
> Date: Wed Oct  6 15:05:45 2010
> New Revision: 85288
>
> Log:
> Fixes 9903: test_concurrent_futures writes on stderr
>
> Modified:
>   python/branches/py3k/Lib/concurrent/futures/_base.py
>   python/branches/py3k/Lib/test/test_concurrent_futures.py
>
> Modified: python/branches/py3k/Lib/concurrent/futures/_base.py
> ==============================================================================
> --- python/branches/py3k/Lib/concurrent/futures/_base.py        (original)
> +++ python/branches/py3k/Lib/concurrent/futures/_base.py        Wed Oct  6 15:05:45 2010
> @@ -40,9 +40,8 @@
>
>  # Logger for internal use by the futures package.
>  LOGGER = logging.getLogger("concurrent.futures")
> -_handler = logging.StreamHandler()
> -LOGGER.addHandler(_handler)
> -del _handler
> +STDERR_HANDLER = logging.StreamHandler()
> +LOGGER.addHandler(STDERR_HANDLER)
>
>  class Error(Exception):
>     """Base class for all future-related exceptions."""
>
> Modified: python/branches/py3k/Lib/test/test_concurrent_futures.py
> ==============================================================================
> --- python/branches/py3k/Lib/test/test_concurrent_futures.py    (original)
> +++ python/branches/py3k/Lib/test/test_concurrent_futures.py    Wed Oct  6 15:05:45 2010
> @@ -9,6 +9,8 @@
>  # without thread support.
>  test.support.import_module('threading')
>
> +import io
> +import logging
>  import multiprocessing
>  import sys
>  import threading
> @@ -21,7 +23,8 @@
>
>  from concurrent import futures
>  from concurrent.futures._base import (
> -    PENDING, RUNNING, CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED, Future, wait)
> +    PENDING, RUNNING, CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED, Future,
> +    LOGGER, STDERR_HANDLER, wait)
>  import concurrent.futures.process
>
>  def create_future(state=PENDING, exception=None, result=None):
> @@ -617,24 +620,33 @@
>         self.assertTrue(was_cancelled)
>
>     def test_done_callback_raises(self):
> -        raising_was_called = False
> -        fn_was_called = False
> -
> -        def raising_fn(callback_future):
> -            nonlocal raising_was_called
> -            raising_was_called = True
> -            raise Exception('doh!')
> -
> -        def fn(callback_future):
> -            nonlocal fn_was_called
> -            fn_was_called = True
> -
> -        f = Future()
> -        f.add_done_callback(raising_fn)
> -        f.add_done_callback(fn)
> -        f.set_result(5)
> -        self.assertTrue(raising_was_called)
> -        self.assertTrue(fn_was_called)
> +        LOGGER.removeHandler(STDERR_HANDLER)
> +        logging_stream = io.StringIO()
> +        handler = logging.StreamHandler(logging_stream)
> +        LOGGER.addHandler(handler)
> +        try:
> +            raising_was_called = False
> +            fn_was_called = False
> +
> +            def raising_fn(callback_future):
> +                nonlocal raising_was_called
> +                raising_was_called = True
> +                raise Exception('doh!')
> +
> +            def fn(callback_future):
> +                nonlocal fn_was_called
> +                fn_was_called = True
> +
> +            f = Future()
> +            f.add_done_callback(raising_fn)
> +            f.add_done_callback(fn)
> +            f.set_result(5)
> +            self.assertTrue(raising_was_called)
> +            self.assertTrue(fn_was_called)
> +            self.assertIn('Exception: doh!', logging_stream.getvalue())
> +        finally:
> +            LOGGER.removeHandler(handler)
> +            LOGGER.addHandler(STDERR_HANDLER)

You could use TestCase.addCleanup() here.



-- 
Regards,
Benjamin


More information about the Python-Dev mailing list