@@ -157,6 +157,40 @@ def parse11(self, response: TextResponse):
157
157
def parse12 (self , response : TextResponse , book_page : DummyProductPage ):
158
158
pass
159
159
160
+ # Strings as type hints (which in addition to something users may do, is
161
+ # also functionally-equivalent to having from __future__ import annotations
162
+ # in your code, see https://peps.python.org/pep-0649/).
163
+
164
+ def parse13 (self , response : "DummyResponse" ):
165
+ pass
166
+
167
+ def parse14 (self , res : "DummyResponse" ):
168
+ pass
169
+
170
+ def parse15 (self , response , book_page : "BookPage" ):
171
+ pass
172
+
173
+ def parse16 (self , response : "DummyResponse" , book_page : "BookPage" ):
174
+ pass
175
+
176
+ def parse17 (self , response , book_page : "DummyProductPage" ):
177
+ pass
178
+
179
+ def parse18 (self , response : "DummyResponse" , book_page : "DummyProductPage" ):
180
+ pass
181
+
182
+ def parse19 (self , response , book_page : "FakeProductPage" ):
183
+ pass
184
+
185
+ def parse20 (self , response : "DummyResponse" , book_page : "FakeProductPage" ):
186
+ pass
187
+
188
+ def parse21 (self , response : "TextResponse" ):
189
+ pass
190
+
191
+ def parse22 (self , response : "TextResponse" , book_page : "DummyProductPage" ):
192
+ pass
193
+
160
194
161
195
def test_get_callback ():
162
196
spider = MySpider ()
@@ -226,6 +260,36 @@ def test_is_callback_using_response_for_scrapy28_below() -> None:
226
260
assert (
227
261
is_callback_requiring_scrapy_response (spider .parse12 , request .callback ) is True
228
262
)
263
+ assert (
264
+ is_callback_requiring_scrapy_response (spider .parse13 , request .callback ) is False
265
+ )
266
+ assert (
267
+ is_callback_requiring_scrapy_response (spider .parse14 , request .callback ) is False
268
+ )
269
+ assert (
270
+ is_callback_requiring_scrapy_response (spider .parse15 , request .callback ) is True
271
+ )
272
+ assert (
273
+ is_callback_requiring_scrapy_response (spider .parse16 , request .callback ) is False
274
+ )
275
+ assert (
276
+ is_callback_requiring_scrapy_response (spider .parse17 , request .callback ) is True
277
+ )
278
+ assert (
279
+ is_callback_requiring_scrapy_response (spider .parse18 , request .callback ) is False
280
+ )
281
+ assert (
282
+ is_callback_requiring_scrapy_response (spider .parse19 , request .callback ) is True
283
+ )
284
+ assert (
285
+ is_callback_requiring_scrapy_response (spider .parse20 , request .callback ) is False
286
+ )
287
+ assert (
288
+ is_callback_requiring_scrapy_response (spider .parse21 , request .callback ) is True
289
+ )
290
+ assert (
291
+ is_callback_requiring_scrapy_response (spider .parse22 , request .callback ) is True
292
+ )
229
293
# Callbacks created with the callback_for function won't make use of
230
294
# the response, but their providers might use them.
231
295
assert (
@@ -263,6 +327,21 @@ def test_is_callback_using_response_for_scrapy28_below() -> None:
263
327
assert (
264
328
is_callback_requiring_scrapy_response (spider .parse12 , request .callback ) is True
265
329
)
330
+ assert (
331
+ is_callback_requiring_scrapy_response (spider .parse15 , request .callback ) is True
332
+ )
333
+ assert (
334
+ is_callback_requiring_scrapy_response (spider .parse17 , request .callback ) is True
335
+ )
336
+ assert (
337
+ is_callback_requiring_scrapy_response (spider .parse19 , request .callback ) is True
338
+ )
339
+ assert (
340
+ is_callback_requiring_scrapy_response (spider .parse21 , request .callback ) is True
341
+ )
342
+ assert (
343
+ is_callback_requiring_scrapy_response (spider .parse22 , request .callback ) is True
344
+ )
266
345
267
346
for method in (
268
347
spider .parse3 ,
@@ -337,6 +416,46 @@ def test_is_callback_using_response_for_scrapy28_and_above() -> None:
337
416
is_callback_requiring_scrapy_response (spider .parse12 , request .callback )
338
417
is True
339
418
)
419
+ assert (
420
+ is_callback_requiring_scrapy_response (spider .parse13 , request .callback )
421
+ is False
422
+ )
423
+ assert (
424
+ is_callback_requiring_scrapy_response (spider .parse14 , request .callback )
425
+ is False
426
+ )
427
+ assert (
428
+ is_callback_requiring_scrapy_response (spider .parse15 , request .callback )
429
+ is True
430
+ )
431
+ assert (
432
+ is_callback_requiring_scrapy_response (spider .parse16 , request .callback )
433
+ is False
434
+ )
435
+ assert (
436
+ is_callback_requiring_scrapy_response (spider .parse17 , request .callback )
437
+ is True
438
+ )
439
+ assert (
440
+ is_callback_requiring_scrapy_response (spider .parse18 , request .callback )
441
+ is False
442
+ )
443
+ assert (
444
+ is_callback_requiring_scrapy_response (spider .parse19 , request .callback )
445
+ is True
446
+ )
447
+ assert (
448
+ is_callback_requiring_scrapy_response (spider .parse20 , request .callback )
449
+ is False
450
+ )
451
+ assert (
452
+ is_callback_requiring_scrapy_response (spider .parse21 , request .callback )
453
+ is True
454
+ )
455
+ assert (
456
+ is_callback_requiring_scrapy_response (spider .parse22 , request .callback )
457
+ is True
458
+ )
340
459
# Callbacks created with the callback_for function won't make use of
341
460
# the response, but their providers might use them.
342
461
assert (
@@ -382,3 +501,13 @@ def check_response_required(expected, callback):
382
501
yield from check_response_required (False , spider .parse10 )
383
502
yield from check_response_required (True , spider .parse11 )
384
503
yield from check_response_required (True , spider .parse12 )
504
+ yield from check_response_required (False , spider .parse13 )
505
+ yield from check_response_required (False , spider .parse14 )
506
+ yield from check_response_required (True , spider .parse15 )
507
+ yield from check_response_required (True , spider .parse16 )
508
+ yield from check_response_required (True , spider .parse17 )
509
+ yield from check_response_required (False , spider .parse18 )
510
+ yield from check_response_required (True , spider .parse19 )
511
+ yield from check_response_required (False , spider .parse20 )
512
+ yield from check_response_required (True , spider .parse21 )
513
+ yield from check_response_required (True , spider .parse22 )
0 commit comments