Hi ports@, This is an update for www/py-gunicorn from 19.9.0 to 20.0.4. Here's a list of changes to the software:
20.0.4 * fix binding a socket using the file descriptor * remove support for the bdist_rpm build 20.0.3 * fixed load of a config file without a Python extension * fixed socketfromfd.fromfd when defaults are not set 20.0.2 * fix changelog 20.0.1 * fixed the way the config module is loaded. __file__ is now available * fixed wsgi.input_terminated. It is always true. * use the highest protocol version of openssl by default * only support Python >= 3.5 * added __repr__ method to Config instance * fixed support of AIX platform and musl libc in socketfromfd.fromfd function * fixed support of applications loaded from a factory function * fixed chunked encoding support to prevent any request smuggling <https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn>_ * Capture os.sendfile before patching in gevent and eventlet workers. * fix RecursionError. * removed locking in reloader when adding new files * load the WSGI application before the loader to pick up all files 20.0 * Fixed fdopen RuntimeWarning in Python 3.8 * Added check and exception for str type on value in Response process_headers method. * Ensure WSGI header value is string before conducting regex search on it. * Added pypy3 to list of tested environments * Grouped StopIteration and KeyboardInterrupt exceptions with same body together in Arbiter.run() * Added setproctitle module to extras_require in setup.py * Avoid unnecessary chown of temporary files * Logging: Handle auth type case insensitively * Removed util.import_module * Removed fallback for types.SimpleNamespace in tests utils * Use SourceFileLoader instead instead of execfile_ * Use importlib instead of __import__ and eval` * Fixed eventlet patching * Added optional datadog <https://www.datadoghq.com>_ tags for statsd metrics * Header values now are encoded using latin-1, not ascii. * Rewritten parse_address util added test * Removed redundant super() arguments * Simplify futures import in gthread module * Fixed worker_connections` setting to also affects the Gthread worker type * Fixed setting max_requests * Bump minimum Eventlet and Gevent versions to 0.24 and 1.4 * Use Python default SSL cipher list by default * handle wsgi.input_terminated extension * Simplify Paste Deployment documentation * Fix root logging: root and logger are same level. * Fixed typo in ssl_version documentation * Documented systemd deployement unit examples * Added systemd sd_notify support * Fixed typo in gthread.py * Added tornado <https://www.tornadoweb.org/>_ 5 and 6 support * Declare our setuptools dependency * Added support to --bind to open file descriptors * Document how to serve WSGI app modules from Gunicorn * Provide guidance on X-Forwarded-For access log in documentation * Add support for named constants in the --ssl-version flag * Clarify log format usage of header & environment in documentation * Fixed systemd documentation to properly setup gunicorn unix socket * Prevent removal unix socket for reuse_port * Fix ResourceWarning when reading a Python config module * Remove unnecessary call to dict keys method * Support str and bytes for UNIX socket addresses * fixed InotifyReloadeder: handle module.__file__ is None * /dev/shm as a convenient alternative to making your own tmpfs mount in fchmod FAQ * fix examples to work on python3 * Fix typo in --max-requests documentation * Clear tornado ioloop before os.fork * Miscellaneous fixes and improvement for linting using Pylint About the port itself, I made it py3 only, as the consumers are already py3 only. All tests pass for me on amd64. The consumers for this port both have NO_TEST=yes. For reference they are: * www/puppetboard * www/py-aiohttp (I tried to update this one and enable tests. I gave up because some tests try to contact secure.aiohttp.io which does not even resolve for me ...) Comments and/or ok welcome. Index: Makefile =================================================================== RCS file: /home/cvs/ports/www/py-gunicorn/Makefile,v retrieving revision 1.23 diff -u -p -r1.23 Makefile --- Makefile 12 Jul 2019 20:51:01 -0000 1.23 +++ Makefile 8 Mar 2020 17:53:18 -0000 @@ -2,11 +2,10 @@ COMMENT = Python WSGI HTTP server -MODPY_EGG_VERSION = 19.9.0 +MODPY_EGG_VERSION = 20.0.4 DISTNAME = gunicorn-${MODPY_EGG_VERSION} PKGNAME = py-${DISTNAME} CATEGORIES = www -REVISION = 0 HOMEPAGE = http://gunicorn.org/ @@ -16,26 +15,19 @@ PERMIT_PACKAGE = Yes MODULES = lang/python MODPY_PI = Yes MODPY_SETUPTOOLS = Yes +MODPY_PYTEST = Yes FLAVORS = python3 -FLAVOR ?= +FLAVOR = python3 -# py-aiohttp and py-multidict are python3 only -.if ${FLAVOR:Mpython3} RUN_DEPENDS += www/py-aiohttp \ www/py-multidict -.endif + TEST_DEPENDS = devel/py-coverage${MODPY_FLAVOR} \ devel/py-test${MODPY_FLAVOR} \ devel/py-test-cov${MODPY_FLAVOR} \ ${BASE_PKGPATH}=${MODPY_EGG_VERSION} -.if ! ${FLAVOR:Mpython3} -TEST_DEPENDS += devel/py-mock -.endif -post-install: - for i in ${PREFIX}/bin/*; do \ - mv $${i} $${i}${MODPY_BIN_SUFFIX} ;\ - done +TEST_DEPENDS += devel/py-mock .include <bsd.port.mk> Index: distinfo =================================================================== RCS file: /home/cvs/ports/www/py-gunicorn/distinfo,v retrieving revision 1.14 diff -u -p -r1.14 distinfo --- distinfo 24 Apr 2019 20:14:08 -0000 1.14 +++ distinfo 8 Mar 2020 17:56:07 -0000 @@ -1,2 +1,2 @@ -SHA256 (gunicorn-19.9.0.tar.gz) = +iZiCXxm+SD1P3BiHGxYyko8TTQ0IF5gjhIbWztx9PM= -SIZE (gunicorn-19.9.0.tar.gz) = 415774 +SHA256 (gunicorn-20.0.4.tar.gz) = GQS7K4pDZYgHEI1Zw/PVbCthIacBFh3g3fmtFABzxiY= +SIZE (gunicorn-20.0.4.tar.gz) = 373841 Index: patches/patch-requirements_test_txt =================================================================== RCS file: patches/patch-requirements_test_txt diff -N patches/patch-requirements_test_txt --- patches/patch-requirements_test_txt 24 Apr 2019 20:14:08 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -$OpenBSD: patch-requirements_test_txt,v 1.4 2019/04/24 20:14:08 sthen Exp $ - -Relax overly strict requirements - -Index: requirements_test.txt ---- requirements_test.txt.orig -+++ requirements_test.txt -@@ -1,3 +1,3 @@ --coverage>=4.0,<4.4 # TODO: https://github.com/benoitc/gunicorn/issues/1548 --pytest==3.2.5 # TODO: upgrade to latest version requires drop support to Python 2.6 --pytest-cov==2.5.1 -+coverage -+pytest -+pytest-cov Index: pkg/PLIST =================================================================== RCS file: /home/cvs/ports/www/py-gunicorn/pkg/PLIST,v retrieving revision 1.9 diff -u -p -r1.9 PLIST --- pkg/PLIST 24 Apr 2019 20:14:08 -0000 1.9 +++ pkg/PLIST 8 Mar 2020 18:04:58 -0000 @@ -1,6 +1,7 @@ @comment $OpenBSD: PLIST,v 1.9 2019/04/24 20:14:08 sthen Exp $ -bin/gunicorn${MODPY_BIN_SUFFIX} -bin/gunicorn_paster${MODPY_BIN_SUFFIX} +@conflict py-gunicorn-* +@pkgpath www/py-gunicorn +bin/gunicorn lib/python${MODPY_VERSION}/site-packages/gunicorn/ lib/python${MODPY_VERSION}/site-packages/gunicorn-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/ lib/python${MODPY_VERSION}/site-packages/gunicorn-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/PKG-INFO @@ -13,21 +14,16 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/gunicorn/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}_compat.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}arbiter.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}argparse_compat.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}config.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}debug.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}errors.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}glogging.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}pidfile.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}reloader.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}selectors.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}six.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}sock.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}systemd.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/${MODPY_PYCACHE}util.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/_compat.py lib/python${MODPY_VERSION}/site-packages/gunicorn/app/ lib/python${MODPY_VERSION}/site-packages/gunicorn/app/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/gunicorn/app/${MODPY_PYCACHE}/ @@ -39,7 +35,6 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/gunicorn/app/pasterapp.py lib/python${MODPY_VERSION}/site-packages/gunicorn/app/wsgiapp.py lib/python${MODPY_VERSION}/site-packages/gunicorn/arbiter.py -lib/python${MODPY_VERSION}/site-packages/gunicorn/argparse_compat.py lib/python${MODPY_VERSION}/site-packages/gunicorn/config.py lib/python${MODPY_VERSION}/site-packages/gunicorn/debug.py lib/python${MODPY_VERSION}/site-packages/gunicorn/errors.py @@ -48,14 +43,12 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/gunicorn/http/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}_sendfile.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}body.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}errors.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}message.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}parser.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}unreader.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/http/${MODPY_PYCACHE}wsgi.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/http/_sendfile.py lib/python${MODPY_VERSION}/site-packages/gunicorn/http/body.py lib/python${MODPY_VERSION}/site-packages/gunicorn/http/errors.py lib/python${MODPY_VERSION}/site-packages/gunicorn/http/message.py @@ -70,8 +63,6 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/gunicorn/instrument/statsd.py lib/python${MODPY_VERSION}/site-packages/gunicorn/pidfile.py lib/python${MODPY_VERSION}/site-packages/gunicorn/reloader.py -lib/python${MODPY_VERSION}/site-packages/gunicorn/selectors.py -lib/python${MODPY_VERSION}/site-packages/gunicorn/six.py lib/python${MODPY_VERSION}/site-packages/gunicorn/sock.py lib/python${MODPY_VERSION}/site-packages/gunicorn/systemd.py lib/python${MODPY_VERSION}/site-packages/gunicorn/util.py @@ -79,20 +70,16 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc -${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}_gaiohttp.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}base_async.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}gaiohttp.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}geventlet.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}ggevent.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}gthread.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}gtornado.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}sync.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/${MODPY_PYCACHE}workertmp.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/_gaiohttp.py lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/base.py lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/base_async.py -lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/gaiohttp.py lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/geventlet.py lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/ggevent.py lib/python${MODPY_VERSION}/site-packages/gunicorn/workers/gthread.py -- Paco Esteban. 0x5818130B8A6DBC03