|  | @@ -226,9 +226,10 @@ def wrap_logger(logger, loglevel=logging.ERROR):
 | 
	
		
			
				|  |  |      siohandler = logging.StreamHandler(sio)
 | 
	
		
			
				|  |  |      logger.handlers = [siohandler]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    yield sio
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    logger.handlers = old_handlers
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield sio
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        logger.handlers = old_handlers
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
	
		
			
				|  | @@ -237,10 +238,10 @@ def eager_tasks():
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      prev = app.conf.CELERY_ALWAYS_EAGER
 | 
	
		
			
				|  |  |      app.conf.CELERY_ALWAYS_EAGER = True
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    yield True
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    app.conf.CELERY_ALWAYS_EAGER = prev
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield True
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        app.conf.CELERY_ALWAYS_EAGER = prev
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def with_eager_tasks(fun):
 | 
	
	
		
			
				|  | @@ -378,8 +379,10 @@ def mask_modules(*modnames):
 | 
	
		
			
				|  |  |              return realimport(name, *args, **kwargs)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      builtins.__import__ = myimp
 | 
	
		
			
				|  |  | -    yield True
 | 
	
		
			
				|  |  | -    builtins.__import__ = realimport
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield True
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        builtins.__import__ = realimport
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
	
		
			
				|  | @@ -390,10 +393,11 @@ def override_stdouts():
 | 
	
		
			
				|  |  |      sys.stdout = sys.__stdout__ = mystdout
 | 
	
		
			
				|  |  |      sys.stderr = sys.__stderr__ = mystderr
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    yield mystdout, mystderr
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    sys.stdout = sys.__stdout__ = prev_out
 | 
	
		
			
				|  |  | -    sys.stderr = sys.__stderr__ = prev_err
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield mystdout, mystderr
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        sys.stdout = sys.__stdout__ = prev_out
 | 
	
		
			
				|  |  | +        sys.stderr = sys.__stderr__ = prev_err
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def patch(module, name, mocked):
 | 
	
	
		
			
				|  | @@ -424,14 +428,16 @@ def replace_module_value(module, name, value=None):
 | 
	
		
			
				|  |  |              delattr(module, name)
 | 
	
		
			
				|  |  |          except AttributeError:
 | 
	
		
			
				|  |  |              pass
 | 
	
		
			
				|  |  | -    yield
 | 
	
		
			
				|  |  | -    if prev is not None:
 | 
	
		
			
				|  |  | -        setattr(sys, name, prev)
 | 
	
		
			
				|  |  | -    if not has_prev:
 | 
	
		
			
				|  |  | -        try:
 | 
	
		
			
				|  |  | -            delattr(module, name)
 | 
	
		
			
				|  |  | -        except AttributeError:
 | 
	
		
			
				|  |  | -            pass
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        if prev is not None:
 | 
	
		
			
				|  |  | +            setattr(sys, name, prev)
 | 
	
		
			
				|  |  | +        if not has_prev:
 | 
	
		
			
				|  |  | +            try:
 | 
	
		
			
				|  |  | +                delattr(module, name)
 | 
	
		
			
				|  |  | +            except AttributeError:
 | 
	
		
			
				|  |  | +                pass
 | 
	
		
			
				|  |  |  pypy_version = partial(
 | 
	
		
			
				|  |  |      replace_module_value, sys, 'pypy_version_info',
 | 
	
		
			
				|  |  |  )
 | 
	
	
		
			
				|  | @@ -443,15 +449,19 @@ platform_pyimp = partial(
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
		
			
				|  |  |  def sys_platform(value):
 | 
	
		
			
				|  |  |      prev, sys.platform = sys.platform, value
 | 
	
		
			
				|  |  | -    yield
 | 
	
		
			
				|  |  | -    sys.platform = prev
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        sys.platform = prev
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
		
			
				|  |  |  def reset_modules(*modules):
 | 
	
		
			
				|  |  |      prev = dict((k, sys.modules.pop(k)) for k in modules if k in sys.modules)
 | 
	
		
			
				|  |  | -    yield
 | 
	
		
			
				|  |  | -    sys.modules.update(prev)
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        sys.modules.update(prev)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
	
		
			
				|  | @@ -459,12 +469,14 @@ def patch_modules(*modules):
 | 
	
		
			
				|  |  |      prev = {}
 | 
	
		
			
				|  |  |      for mod in modules:
 | 
	
		
			
				|  |  |          prev[mod], sys.modules[mod] = sys.modules[mod], ModuleType(mod)
 | 
	
		
			
				|  |  | -    yield
 | 
	
		
			
				|  |  | -    for name, mod in prev.iteritems():
 | 
	
		
			
				|  |  | -        if mod is None:
 | 
	
		
			
				|  |  | -            sys.modules.pop(name, None)
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            sys.modules[name] = mod
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        for name, mod in prev.iteritems():
 | 
	
		
			
				|  |  | +            if mod is None:
 | 
	
		
			
				|  |  | +                sys.modules.pop(name, None)
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                sys.modules[name] = mod
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
	
		
			
				|  | @@ -509,8 +521,10 @@ def mock_context(mock, typ=Mock):
 | 
	
		
			
				|  |  |              raise x[0], x[1], x[2]
 | 
	
		
			
				|  |  |      context.__exit__.side_effect = on_exit
 | 
	
		
			
				|  |  |      context.__enter__.return_value = context
 | 
	
		
			
				|  |  | -    yield context
 | 
	
		
			
				|  |  | -    context.reset()
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield context
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        context.reset()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 | 
	
	
		
			
				|  | @@ -541,10 +555,11 @@ def patch_settings(app=None, **config):
 | 
	
		
			
				|  |  |              pass
 | 
	
		
			
				|  |  |          setattr(app.conf, key, value)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    yield app.conf
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    for key, value in prev.iteritems():
 | 
	
		
			
				|  |  | -        setattr(app.conf, key, value)
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        yield app.conf
 | 
	
		
			
				|  |  | +    finally:
 | 
	
		
			
				|  |  | +        for key, value in prev.iteritems():
 | 
	
		
			
				|  |  | +            setattr(app.conf, key, value)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @contextmanager
 |