# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{12..14} )
DISTUTILS_USE_PEP517=hatchling
inherit distutils-r1 pypi

DESCRIPTION="A high-level Web Crawling and Web Scraping framework"
HOMEPAGE="https://scrapy.org/"

LICENSE="BSD"
SLOT=0
KEYWORDS="~amd64 ~arm64"

# itemloaders supplies itemadapter and parsel (including cssselect and packaging).
# pyopenssl supplies cryptography; twisted[http2] supplies h2 and priority.
RDEPEND="
	>=app-arch/brotli-1.2.0[python,${PYTHON_USEDEP}]
	>=dev-python/aiohttp-3.13.3[${PYTHON_USEDEP}]
	>=dev-python/charset-normalizer-3.4.0[${PYTHON_USEDEP}]
	>=dev-python/defusedxml-0.7.1[${PYTHON_USEDEP}]
	>=dev-python/itemloaders-1.0.1[${PYTHON_USEDEP}]
	>=dev-python/lxml-4.6.4[${PYTHON_USEDEP}]
	>=dev-python/platformdirs-2.0.0[${PYTHON_USEDEP}]
	>=dev-python/protego-0.1.15[${PYTHON_USEDEP}]
	>=dev-python/pydispatcher-2.0.5[${PYTHON_USEDEP}]
	>=dev-python/pyopenssl-24.3.0[${PYTHON_USEDEP}]
	>=dev-python/queuelib-1.6.1[${PYTHON_USEDEP}]
	>=dev-python/service-identity-24.2.0[${PYTHON_USEDEP}]
	dev-python/tldextract[${PYTHON_USEDEP}]
	>=dev-python/twisted-21.7.0[http2,${PYTHON_USEDEP}]
	>=dev-python/w3lib-2.1.1[${PYTHON_USEDEP}]
	>=dev-python/zope-interface-5.1.0[${PYTHON_USEDEP}]
	$(python_gen_cond_dep '
		>=dev-python/backports-zstd-1.3.0[${PYTHON_USEDEP}]
	' python3_{12,13})
"
BDEPEND="
	test? (
		dev-python/botocore[${PYTHON_USEDEP}]
		dev-python/pexpect[${PYTHON_USEDEP}]
		>=dev-python/pyftpdlib-2.0.1[${PYTHON_USEDEP}]
		dev-python/uvloop[${PYTHON_USEDEP}]
	)
"

EPYTEST_PLUGINS=( pytest-rerunfailures pytest-twisted )
distutils_enable_tests pytest

EPYTEST_DESELECT=(
	# these require (local) network access
	tests/test_command_check.py
	tests/test_feedexport.py
	tests/test_pipeline_files.py::TestFTPFileStore::test_persist
	# Flaky test: https://github.com/scrapy/scrapy/issues/6193
	tests/test_crawl.py::CrawlTestCase::test_start_requests_laziness
	# Missing dependencies
	tests/test_spidermiddleware_output_chain.py
	)
EPYTEST_IGNORE=( docs )