* Make ``gevent.select.select`` accept arbitrary iterables, not just sequences. That is, you can now pass in a generator of file descriptors instead of a realized list. Internally, arbitrary iterables are copied into lists. This better matches what the standard library does. * On Python 3.11 and newer, opt out of Cython's fast exception manipulation, which *may* be causing problems in certain circumstances when combined with greenlets. * On all versions of Python, adjust some error handling in the default * -based loop. This fixes several assertion failures on debug versions of CPython. Hopefully it has a positive impact under real conditions. * Make ``gevent.pywsgi`` comply more closely with the HTTP specification for chunked transfer encoding. In particular, we are much stricter about trailers, and trailers that are invalid (too long or featuring disallowed characters) forcibly close the connection to the client *after* the results have been sent. * Trailers otherwise continue to be ignored and are not available to the WSGI application. Previously, carefully crafted invalid trailers in chunked requests on keep-alive connections might appear as two requests to ``gevent.pywsgi``. Because this was handled exactly as a normal keep-alive connection with two requests, the WSGI application should handle it normally. However, if you were counting on some upstream server to filter incoming requests based on paths or header fields, and the upstream server simply passed trailers through without validating them, then this embedded second request would OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-gevent?expand=0&rev=99
185 lines
6.2 KiB
RPMSpec
185 lines
6.2 KiB
RPMSpec
#
|
|
# spec file for package python-gevent
|
|
#
|
|
# Copyright (c) 2023 SUSE LLC
|
|
#
|
|
# All modifications and additions to the file contributed by third parties
|
|
# remain the property of their copyright owners, unless otherwise agreed
|
|
# upon. The license for this file, and modifications and additions to the
|
|
# file, is the same license as for the pristine package itself (unless the
|
|
# license for the pristine package is not an Open Source License, in which
|
|
# case the license is the MIT License). An "Open Source License" is a
|
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|
# published by the Open Source Initiative.
|
|
|
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
|
#
|
|
|
|
|
|
%define modname gevent
|
|
# on TW, gevent is able to use system libev, Leaps et.al. need the bundled version
|
|
%if 0%{?suse_version} <= 1500
|
|
%define use_bundled_libev 1
|
|
%else
|
|
%define use_bundled_libev 0
|
|
%endif
|
|
%{?sle15_python_module_pythons}
|
|
Name: python-gevent
|
|
Version: 23.9.0
|
|
Release: 0
|
|
Summary: Python network library that uses greenlet and libevent
|
|
License: MIT
|
|
Group: Development/Languages/Python
|
|
URL: https://www.gevent.org/
|
|
Source0: https://github.com/gevent/%{modname}/archive/%{version}.tar.gz#/%{modname}-%{version}.tar.gz
|
|
Source100: %{name}-rpmlintrc
|
|
# gcc7 for 15.1 produces no-return-in-nonvoid-function, but the same compiler for 15.2 not
|
|
# usually, as long as no return value is used, this shouldn't be treated as an error
|
|
# let's selectively disable the warning around the offending code
|
|
Patch0: fix-no-return-in-nonvoid-function.patch
|
|
BuildRequires: %{python_module Cython}
|
|
BuildRequires: %{python_module cffi}
|
|
BuildRequires: %{python_module devel >= 3.8}
|
|
BuildRequires: %{python_module dnspython}
|
|
BuildRequires: %{python_module greenlet >= 2.0.0}
|
|
BuildRequires: %{python_module objgraph}
|
|
BuildRequires: %{python_module pip}
|
|
BuildRequires: %{python_module psutil}
|
|
BuildRequires: %{python_module requests}
|
|
BuildRequires: %{python_module wheel}
|
|
BuildRequires: %{python_module zope.event}
|
|
BuildRequires: %{python_module zope.interface}
|
|
BuildRequires: fdupes
|
|
# /etc/protocols needed for tests
|
|
BuildRequires: netcfg
|
|
BuildRequires: pkgconfig
|
|
BuildRequires: python-rpm-macros
|
|
BuildRequires: python3-testsuite
|
|
BuildRequires: pkgconfig(libcares)
|
|
BuildRequires: pkgconfig(libuv)
|
|
Requires: python-cffi
|
|
Requires: python-dnspython
|
|
Requires: python-greenlet >= 2.0.0
|
|
Requires: python-importlib-metadata
|
|
Requires: python-requests
|
|
Requires: python-zope.event
|
|
Requires: python-zope.interface
|
|
%if ! 0%{use_bundled_libev}
|
|
BuildRequires: pkgconfig(libev)
|
|
%endif
|
|
%if 0%{?suse_version} || 0%{?fedora_version} || 0%{?rhel} >= 8
|
|
Recommends: python-psutil
|
|
%else
|
|
Requires: python-psutil
|
|
%endif
|
|
%python_subpackages
|
|
|
|
%description
|
|
Gevent is a Python networking library that uses greenlet to provide synchronous
|
|
API on top of a libevent event loop. Features include:
|
|
|
|
* Fast event loop based on libevent.
|
|
* Lightweight execution units based on greenlet.
|
|
* Familiar API that re-uses concepts from the Python standard library.
|
|
* Cooperative sockets with ssl support.
|
|
* DNS queries performed through libevent-dns.
|
|
* Ability to use standard library and 3rd party modules written for standard
|
|
blocking sockets
|
|
* Fast WSGI server based on libevent-http.
|
|
|
|
gevent is inspired by eventlet but features more consistent API, simpler
|
|
implementation and better performance. Read why others use gevent and check
|
|
out the list of the open source projects based on gevent.
|
|
|
|
%if 0%{?suse_version} > 1500
|
|
%package -n python-gevent-doc
|
|
Summary: Documentation for %{name}
|
|
Group: Documentation/Other
|
|
Provides: %{python_module gevent-doc = %{version}}
|
|
BuildArch: noarch
|
|
|
|
%description -n python-gevent-doc
|
|
Documentation and examples for %{name}.
|
|
%endif
|
|
|
|
%prep
|
|
%setup -q -n gevent-%{version}
|
|
%if 0%{?sle_version} <= 150100 && 0%{?is_opensuse}
|
|
%patch0 -p1
|
|
%endif
|
|
sed -i -e '1s!bin/env python!bin/python!' examples/*.py
|
|
sed -i -e '1{/bin.*python/d}' src/gevent/tests/*.py
|
|
|
|
%build
|
|
export LIBEV_EMBED=%{use_bundled_libev}
|
|
export CARES_EMBED=0
|
|
export CFLAGS="%{optflags} -fno-strict-aliasing"
|
|
%pyproject_wheel
|
|
|
|
%install
|
|
export LIBEV_EMBED=%{use_bundled_libev}
|
|
export CARES_EMBED=0
|
|
%pyproject_install
|
|
%{python_expand # fix script interpreter-line and exec bit
|
|
sed -i '1{s|^#!.*bin.*python.*$|#!%{__$python}|}' %{buildroot}%{$python_sitearch}/gevent/testing/testrunner.py
|
|
chmod +x %{buildroot}%{$python_sitearch}/gevent/testing/testrunner.py
|
|
}
|
|
%{?python_compileall}
|
|
%python_expand %fdupes %{buildroot}%{$python_sitearch}
|
|
|
|
%check
|
|
%{python_expand #
|
|
# create ignore list of tests, e.g. because they reach out to the net
|
|
cat << EOF > skip_tests.txt
|
|
test__core_stat.py
|
|
%if 0%{?sle_version} <= 150200 && 0%{?is_opensuse}
|
|
test__destroy_default_loop.py
|
|
test__example_echoserver.py
|
|
test_socket.py
|
|
%endif
|
|
test__examples.py
|
|
# this one fails occasionally with: Address already in use: ('127.0.0.1', 16000)
|
|
test__example_portforwarder.py
|
|
test__getaddrinfo_import.py
|
|
test__resolver_dnspython.py
|
|
test__socket_dns.py
|
|
test__issue1686.py
|
|
# Flaky tests in s390x architecture
|
|
%ifarch s390x
|
|
test__util.py
|
|
%endif
|
|
EOF
|
|
if [ %{$python_version_nodots} -lt 37 ]; then
|
|
echo "test__threading_2.py" >> skip_tests.txt
|
|
fi
|
|
export GEVENT_RESOLVER=thread
|
|
# Setting the TRAVIS environment variable makes some different configuration
|
|
# for tests that use the network so they don't fail on travis (or obs)
|
|
export TRAVIS=1
|
|
# Setting the APPVEYOR environment variable makes the tests use a workaround
|
|
# for Appveyor that we also need in obs for "wait_threads() failed to cleanup 1 threads"
|
|
export APPVEYOR=1
|
|
export LANG=en_US.UTF-8
|
|
# Relax the crypto policies for the test-suite
|
|
export OPENSSL_SYSTEM_CIPHERS_OVERRIDE=xyz_nonexistent_file
|
|
export OPENSSL_CONF=''
|
|
# don't bother with python2 tests
|
|
if [ "${python_flavor}" != "python2" ]; then
|
|
PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m gevent.tests --ignore skip_tests.txt
|
|
fi
|
|
}
|
|
|
|
%files %{python_files}
|
|
%doc AUTHORS README.rst TODO CHANGES.rst CONTRIBUTING.rst
|
|
%license LICENSE*
|
|
%{python_sitearch}/gevent-%{version}*-info
|
|
%{python_sitearch}/gevent
|
|
|
|
%if 0%{?suse_version} > 1500
|
|
%files -n python-gevent-doc
|
|
%license LICENSE*
|
|
%endif
|
|
%doc examples/
|
|
|
|
%changelog
|