1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-21 05:53:15 +00:00

Request: remove restriction about errback without callback

This commit is contained in:
Eugenio Lacuesta 2019-09-11 15:40:44 -03:00
parent 9b7452211a
commit 62778cf23f
No known key found for this signature in database
GPG Key ID: DA3EF2D0913E9810
2 changed files with 31 additions and 16 deletions

View File

@ -32,7 +32,6 @@ class Request(object_ref):
raise TypeError('callback must be a callable, got %s' % type(callback).__name__)
if errback is not None and not callable(errback):
raise TypeError('errback must be a callable, got %s' % type(errback).__name__)
assert callback or not errback, "Cannot use errback without a callback"
self.callback = callback
self.errback = errback

View File

@ -246,25 +246,41 @@ class RequestTest(unittest.TestCase):
self.assertRaises(AttributeError, setattr, r, 'url', 'http://example2.com')
self.assertRaises(AttributeError, setattr, r, 'body', 'xxx')
def test_callback_is_callable(self):
def test_callback_and_errback(self):
def a_function():
pass
r = self.request_class('http://example.com')
self.assertIsNone(r.callback)
r = self.request_class('http://example.com', a_function)
self.assertIs(r.callback, a_function)
with self.assertRaises(TypeError):
self.request_class('http://example.com', 'a_function')
def test_errback_is_callable(self):
def a_function():
pass
r = self.request_class('http://example.com')
self.assertIsNone(r.errback)
r = self.request_class('http://example.com', a_function, errback=a_function)
self.assertIs(r.errback, a_function)
r1 = self.request_class('http://example.com')
self.assertIsNone(r1.callback)
self.assertIsNone(r1.errback)
r2 = self.request_class('http://example.com', callback=a_function)
self.assertIs(r2.callback, a_function)
self.assertIsNone(r2.errback)
r3 = self.request_class('http://example.com', errback=a_function)
self.assertIsNone(r3.callback)
self.assertIs(r3.errback, a_function)
r4 = self.request_class(
url='http://example.com',
callback=a_function,
errback=a_function,
)
self.assertIs(r4.callback, a_function)
self.assertIs(r4.errback, a_function)
def test_callback_and_errback_type(self):
with self.assertRaises(TypeError):
self.request_class('http://example.com', a_function, errback='a_function')
self.request_class('http://example.com', callback='a_function')
with self.assertRaises(TypeError):
self.request_class('http://example.com', errback='a_function')
with self.assertRaises(TypeError):
self.request_class(
url='http://example.com',
callback='a_function',
errback='a_function',
)
def test_from_curl(self):
# Note: more curated tests regarding curl conversion are in