Port to pyproject-rpm-macros

- Add metapackage for “speedups” extra
This commit is contained in:
Benjamin A. Beasley 2022-10-10 13:24:06 -04:00
parent 4c165d745a
commit 3fd5305210
2 changed files with 84 additions and 60 deletions

View File

@ -1,15 +1,15 @@
%global srcname aiohttp
%bcond_without tests
Name: python-%{srcname}
Name: python-aiohttp
Version: 3.8.3
Release: 1%{?dist}
Release: 2%{?dist}
Summary: Python HTTP client/server for asyncio
License: ASL 2.0
URL: https://github.com/aio-libs/aiohttp
Source0: %{pypi_source}
# We use requirements/*.txt to generate test dependencies; these files are not
# present in the PyPI sdist, so we must use the GitHub archive.
Source0: %{url}/archive/v%{version}/aiohttp-%{version}.tar.gz
# downstream only patch
Patch: 0001-Unbundle-llhttp.patch
@ -18,89 +18,113 @@ BuildRequires: gcc
BuildRequires: llhttp-devel
# EPEL8 is utilizing the CentOS Devel repo for some packages. However, this is
# not available for s390x, so exclude it.
# https://fedoraproject.org/wiki/EPEL/FAQ#RHEL_8.2B_has_binaries_in_the_release.2C_but_is_missing_some_corresponding_-devel_package._How_do_I_build_a_package_that_needs_that_missing_-devel_package.3F
%if %{defined el8}
ExcludeArch: s390x
%endif
BuildRequires: python3-devel
BuildRequires: python3dist(cython)
%description
%global common_description %{expand:
Python HTTP client/server for asyncio which supports both the client and the
server side of the HTTP protocol, client and server websocket, and webservers
with middlewares and pluggable routing.
with middlewares and pluggable routing.}
%package -n python3-%{srcname}
%description %{common_description}
%package -n python3-aiohttp
Summary: %{summary}
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-Cython
Recommends: python3-aiohttp+speedups
%if %{with tests}
# Test machinery
BuildRequires: python3dist(pytest)
BuildRequires: python3dist(pytest-mock)
# Test dependencies (some of which are runtime dependencies)
BuildRequires: python3dist(aiosignal)
BuildRequires: python3dist(async-generator)
BuildRequires: python3dist(async-timeout)
BuildRequires: python3dist(attrs)
BuildRequires: python3dist(brotli)
BuildRequires: python3dist(charset-normalizer)
BuildRequires: python3dist(freezegun)
BuildRequires: python3dist(frozenlist)
BuildRequires: python3dist(gunicorn)
BuildRequires: python3dist(multidict)
# Not currently packaged:
# BuildRequires: python3dist(proxy-py)
BuildRequires: python3dist(re-assert)
BuildRequires: python3dist(trustme)
BuildRequires: python3dist(yarl)
%endif
%description -n python3-aiohttp %{common_description}
Recommends: python%{python3_version}dist(aiodns)
%{?python_provide:%python_provide python3-%{srcname}}
%description -n python3-%{srcname}
Python HTTP client/server for asyncio which supports both the client and the
server side of the HTTP protocol, client and server websocket, and webservers
with middlewares and pluggable routing.
%pyproject_extras_subpkg -n python3-aiohttp speedups
%prep
%autosetup -p 1 -n %{srcname}-%{version}
%autosetup -p 1 -n aiohttp-%{version}
# Remove bundled llhttp
rm -rvf vendor/llhttp
# Disable test coverage reports
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters
sed -r -i '/--cov=/d' setup.cfg
# We dont use %%tox because it just runs pytest with coverage analysis; rather
# than patching out the coverage invocation, we can run pytest directly. Still,
# it is useful to generate test dependencies from tox.ini.
# Upstream supports both brotlipy and Brotli, in theory; we have the latter.
sed -r -i \
-e 's/^[[:blank:]]*coverage$/# &/' \
-e 's/^[[:blank:]]*-e[[:blank:]]+\.$/# &/' \
-e 's/brotlipy/Brotli/' \
tox.ini
# Unpin dependency versions in requirements files, so we can use them to
# generate additional dependencies. Comment out a few optional test
# dependencies that are not yet packaged, as well as coverage dependencies.
sed -r -i \
-e 's/==[^#;]+//' \
-e 's/^(proxy[-\.]py|python-on-whales|wait-for-it)/# &/' \
-e 's/^(coverage|pytest-cov|mypy)/# &/' \
requirements/*.txt
# Remove files generated by Cython to regenerate them
rm $(grep -rl '/\* Generated by Cython')
grep -rl '/\* Generated by Cython' | xargs -r rm -v
%generate_buildrequires
%{pyproject_buildrequires -x speedups \
requirements/base.txt %{?with_tests:requirements/test.txt -t}}
%build
# Recreate removed Cython files using a command extracted from the Makefile.
# Recreate removed Cython files using commands extracted from the Makefile.
# We don't run make directly, as it pip-installs Cython.
cython -3 aiohttp/*.pyx -I aiohttp
%py3_build
#
# We don't need a real git checkout, but we do need a .git directory to help
# certain scripts find the root of the source tree.
mkdir -p .git
# See the aiohttp/_find_header.c target in the Makefile; this also generates
# _headers.pyi.
%{python3} tools/gen.py
# Now we can invoke Cython.
%{python3} -m cython -3 aiohttp/*.pyx -I aiohttp
# Now we need to remove the .git directory again, because its presence will
# lead the actual build astray, something like:
# Install submodules when building from git clone
# Hint:
# git submodule update --init
rm -rvf .git
# Now we can actually proceed with building the package.
%pyproject_wheel
%install
%py3_install
%pyproject_install
%pyproject_save_files aiohttp
%if %{with tests}
%check
%if %{with tests}
# Fixes problems importing compiled extensions from subprocesses.
export PYTHONSAFEPATH=1
# Setting PYTHONSAFEPATH works only for Python 3.11+, so we must skip any
# affected tests on older Pythons.
if %{python3} -c 'import sys; sys.exit(0 if sys.version_info < (3, 11) else 1)'
then
k="${k-}${k+ and }not test_no_warnings"
fi
# test_proxy_functional.py requires python3dist(proxy-py)
# test_client_session_timeout_zero requires DNS
%pytest --ignore=tests/test_proxy_functional.py \
-k 'not test_client_session_timeout_zero'
k="${k-}${k+ and }not test_client_session_timeout_zero"
# Unexplained flaky error during teardown:
# E RuntimeError: Event loop is closed
k="${k-}${k+ and }not test_static_file_if_match"
k="${k-}${k+ and }not test_static_file_if_none_match"
%pytest --ignore=tests/test_proxy_functional.py -k "${k-}"
%else
%pyproject_check_import -e aiohttp.pytest_plugin
%endif
%files -n python3-%{srcname}
%doc CHANGES.rst CONTRIBUTORS.txt README.rst
%license LICENSE.txt
%{python3_sitearch}/%{srcname}-*.egg-info/
%{python3_sitearch}/%{srcname}/
%files -n python3-aiohttp -f %{pyproject_files}
%doc CHANGES.rst
%doc HISTORY.rst
%doc README.rst
%changelog
* Sat Oct 08 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 3.8.3-2
- Port to pyproject-rpm-macros
- Add metapackage for “speedups” extra
* Mon Sep 26 2022 Tomáš Hrnčiar <thrnciar@redhat.com> - 3.8.3-1
- Update to 3.8.3

View File

@ -1 +1 @@
SHA512 (aiohttp-3.8.3.tar.gz) = 248c232604c91442b2fc9fa55fbf7df8e3af56dcf4cd9c516414a3a738c5c60a8a06395cd9c6e2c8ea9884728aea757423735c7b9be889e6f17e3ee6395a2f64
SHA512 (aiohttp-3.8.3.tar.gz) = b819d8b3c4559e1589d6d05dbab6c27195667994d9371e40ea59146eb0ba57280ba2d872515a133b64b7918148b7200eb55a807eac022954b4e1b4228b7496a5