Commit Graph

11278 Commits

Author SHA1 Message Date
Adrian Chaves aa42482047 Merge remote-tracking branch 'origin/master' into improve-coverage-utils 2026-08-03 13:00:44 +02:00
Adrian 2b2e18199b
Type downloader middleware tests (#7858) 2026-08-03 15:49:15 +05:00
Adrian e83c709574
Docs: a job directory belongs to one Scrapy version (#7861) 2026-08-03 12:44:48 +02:00
Adrian Chaves 7a301f3754 Increase timeouts for PyPy 2026-08-03 12:26:58 +02:00
Adrian Chaves 0c36f08246 Merge remote-tracking branch 'origin/master' into improve-coverage-utils 2026-08-03 11:27:54 +02:00
Adrian a499dc9511
CI: Reduce the test job matrix while maintaining coverage (#7844) 2026-08-01 20:30:50 +05:00
Andrey Rakhmatullin 11d1712a2c
Force CI job names to not include "true" for "coverage". (#7848) 2026-08-01 09:51:45 +02:00
Adrian 24de06bcd3
CI: Install dependencies with uv (#7838)
* CI: Install dependencies with uv

* Setup GitHub Actions hardening

* CI: Use uv for mitmproxy, benchmarks and cache keys

* Fix mitmproxy install on PyPy
2026-07-31 23:02:52 +05:00
Adrian Chaves 6673458c41 Merge remote-tracking branch 'origin/master' into improve-coverage-utils
# Conflicts:
#	pyproject.toml
#	tox.ini
2026-07-31 18:11:07 +02:00
Adrian Chaves f200dbeb82 Give some leeway for PyPy 2026-07-31 18:08:49 +02:00
Laerte Pereira 8caaac6ecb
fix(shell): Run IPython prompt in a thread under a running loop (#7816) 2026-07-31 18:05:22 +02:00
Adrian 14478e3f24
Support CONCURRENT_REQUESTS = 0 for unlimited concurrency (#7840) 2026-07-31 20:19:07 +05:00
Adrian Chaves db6c9cc32c Improve test coverage 2026-07-31 16:50:20 +02:00
Adrian Chaves 410c07528c Minimum ipython: 7.1 → 7.3 2026-07-31 16:14:15 +02:00
Adrian 1f03fbc17e
Add scrapy.utils.asyncio.sleep() (#7843) 2026-07-31 18:59:38 +05:00
Adrian Chaves cd7ae6b155 Merge remote-tracking branch 'origin/master' into improve-coverage-utils 2026-07-31 14:24:00 +02:00
Adrian Chaves f2d6c16007 Improve test coverage for scrapy.utils 2026-07-31 14:22:17 +02:00
Adrian 6f87d3f863
Rename the current benchmark for the future (#7839) 2026-07-31 16:46:33 +05:00
Adrian 6cefaa5434
Add a stats reference (#7814) 2026-07-31 15:43:40 +05:00
Adrian aa5ded2539
Set up CodSpeed (#7831)
* Set up CodSpeed

* CodSpeed: update permissions
2026-07-31 13:27:14 +05:00
Adrian 3180116cd0
Improve test coverage for scrapy.commands (#7829) 2026-07-31 12:19:49 +05:00
Adrian ea7c0af2f9
Use a single badge for all tests (#7836) 2026-07-31 12:18:06 +05:00
Adrian 746bc7548d
Clarify crawl vs runspider in help and docs (#7832) 2026-07-31 12:17:34 +05:00
Adrian 37661508db
Add RobotParser.crawl_delay() and a robots_parsed signal (#7830)
* Add RobotParser.crawl_delay() and a robots_parsed signal

* Improve test coverage
2026-07-31 11:59:52 +05:00
Adrian 434fd1154a
Improve pre-crawler setting docs (#7835) 2026-07-31 11:38:33 +05:00
Adrian 259be5d2dd
CI: Run coverage in as few jobs as necessary (#7834)
* CI: Run coverage in as few jobs as necessary

* Complete test coverage
2026-07-31 11:20:21 +05:00
Adrian 7436afc95f
Improve test coverage for scrapy.extensions (#7809) 2026-07-30 20:27:27 +05:00
Janit Rajkarnikar 3fc7148c5e
Don't evaluate annotations when inspecting signatures (#7818)
Since Python 3.14 (PEP 649) annotations are evaluated lazily, so
inspect.signature() raises NameError for callables whose annotations
reference names imported only under TYPE_CHECKING. This broke
middleware registration (via argument_is_required()) and custom stats
collectors (via _warn_spider_arg) for user code with such annotations.

Use annotation_format=Format.FORWARDREF on 3.14+: parameter names,
kinds and defaults are unchanged, and unresolvable annotations become
ForwardRef proxies instead of raising.

Resolves #7796.
2026-07-30 20:18:45 +05:00
Adrian f02a99fe71
Add doc sections for callbacks and errbacks (#7821) 2026-07-30 20:15:15 +05:00
Adrian 433603e6ca
Add AWS_MAX_POOL_CONNECTIONS (#7794) 2026-07-30 15:51:45 +02:00
Adrian 98696efa80
Export item fields in declaration order (#7824) 2026-07-30 15:46:45 +05:00
Laerte Pereira 5b4828a012
docs(practices): Remove scrapoxy mention (#7817) 2026-07-30 08:02:54 +02:00
Fandu b2d4eedea8
Fix immediate delivery of full feed export batches (#7730) (#7733)
* Store full feed batches before spider closes (#7730)

Start closing and storing each batch as soon as it reaches the configured item count. Track unfinished close tasks so spider shutdown still waits for all deliveries before emitting the exporter-closed signal.

Add an end-to-end regression test that verifies the first batch is stored while the crawl is still running.

* Remove the issue reference

---------

Co-authored-by: Andrey Rakhmatullin <wrar@wrar.name>
2026-07-29 19:30:03 +05:00
Laerte Pereira 01447f9965
fix(commands/parse): Restore request callback before invoking spider (#7803)
* fix(commands/parse): restore request callback before invoking spider

* Add other test
2026-07-29 16:00:24 +05:00
Adrian 0cbb20e8e8
Treat broken cache records as cache misses (#7805) 2026-07-29 14:39:27 +05:00
Adrian 8b5147ae2e
Improve test coverage for scrapy.pipelines (#7798)
* Improve test coverage for scrapy.pipelines

* Restore old Pillow support
2026-07-29 14:32:18 +05:00
Youssef Mohamed bc5b5fb1f6
Add Request.to_curl() (#7743) (#7802) 2026-07-29 13:47:15 +05:00
Andrey Rakhmatullin e7d8b34e73
Next refactoring pass of test_utils_*. (#7797) 2026-07-28 14:24:34 +02:00
Adrian ad816d2b3a
Improve test coverage for scrapy.cmdline (#7795) 2026-07-28 17:04:54 +05:00
Adrian 5a65bdcc18
Improve spiders coverage (#7768)
* Skip the deprecated scrapy.mail in coverage data

* Improve CrawlSpider coverage

* Improve XMLFeedSpider coverage

* Improve SitemapSpider coverage

* Solve mypy issues

* Align new spider tests with the shared test helper structure
2026-07-28 15:24:04 +05:00
Shadow_Lu 59ebb26e60
Fix CaseInsensitiveDict.copy() sharing state with the original (#7783)
* Fix CaseInsensitiveDict.copy() sharing state with the original

* Address review: don't re-normalise in __copy__, keep _keys in sync in __ior__

UserDict.__ior__ writes self.data directly, bypassing __setitem__, so
_keys never learned about the new keys.
2026-07-28 15:21:55 +05:00
Andrey Rakhmatullin 7e8b58a2b2
Migrate away from testfixtures. (#7793) 2026-07-28 09:52:52 +02:00
Andrey Rakhmatullin a5bc43e34c
Don't generate test keys concurrently with xdist. (#7792) 2026-07-28 09:51:52 +02:00
Adrian f3693aa8ba
Fix port issue with cached DNS (#7772)
* Fix port issue with cached DNS

* Keep ports off the cache

* Complete coverage
2026-07-27 21:23:56 +05:00
Adrian 25e6884e2f
Address recursion and media ignore-request reporting issues (#7673)
* Address recursion and media ignore-request reporting issues

* Improve test coverage

* Address feedback
2026-07-27 20:34:10 +05:00
Andrey Rakhmatullin cec86f216e
Remove remaining cross-imports in test modules. (#7782) 2026-07-27 12:19:12 +02:00
SpiliosDmk 13be37e4b1
Add type hints to test_link.py and test_downloadermiddleware_stats.py (#7785) 2026-07-27 10:07:32 +02:00
SpiliosDmk e710b9c18e
core: fix verb tense in http2 stream comment (#7778)
'needs to be send' -> 'needs to be sent'. Comment-only, no functional change.
2026-07-25 10:20:30 +05:00
SpiliosDmk 96195e4a61
docs: fix a/an article before XML in faq.rst (#7779)
'a XML document' -> 'an XML document' (XML is pronounced with a vowel sound).
2026-07-25 10:20:18 +05:00
SpiliosDmk e4ae4aad52
docs: fix missing 'of' in faq.rst (#7780)
'instead joining the strings' -> 'instead of joining the strings'.
2026-07-25 10:19:53 +05:00