Simplify check for re-raised exception. Add tests.

This commit is contained in:
Eugenio Lacuesta 2018-08-03 15:16:26 -03:00
parent 801d3c07b4
commit 8c55f5eb15
2 changed files with 22 additions and 2 deletions

View File

@ -103,7 +103,7 @@ class SpiderMiddlewareManager(MiddlewareManager):
yield r
except Exception as ex:
exception_result = process_spider_exception(Failure(ex), index+1)
if exception_result is None or isinstance(exception_result, Failure):
if isinstance(exception_result, Failure):
raise
recovered.extend(exception_result)
@ -115,7 +115,7 @@ class SpiderMiddlewareManager(MiddlewareManager):
result = method(response=response, result=result, spider=spider)
except Exception as ex:
exception_result = process_spider_exception(Failure(ex), method_index+1)
if exception_result is None or isinstance(exception_result, Failure):
if isinstance(exception_result, Failure):
raise
return exception_result
if _isiterable(result):

View File

@ -80,3 +80,23 @@ class ProcessSpiderExceptionInvalidOutput(SpiderMiddlewareTestCase):
result = self._scrape_response()
self.assertIsInstance(result, Failure)
self.assertIsInstance(result.value, _InvalidOutput)
class ProcessSpiderExceptionReRaise(SpiderMiddlewareTestCase):
"""Re raise the exception by returning None"""
def test_process_spider_exception_return_none(self):
class ProcessSpiderOutputExceptionReturnNoneMiddleware:
def process_spider_exception(self, response, exception, spider):
return None
class RaiseExceptionProcessSpiderOutputMiddleware:
def process_spider_output(self, response, result, spider):
1/0
self.mwman._add_middleware(ProcessSpiderOutputExceptionReturnNoneMiddleware())
self.mwman._add_middleware(RaiseExceptionProcessSpiderOutputMiddleware())
result = self._scrape_response()
self.assertIsInstance(result, Failure)
self.assertIsInstance(result.value, ZeroDivisionError)