dev-python/pyjwt: Fix tests, add py3.8 & pypy3
authorMichał Górny <mgorny@gentoo.org>
Tue, 11 Feb 2020 07:04:26 +0000 (08:04 +0100)
committerMichał Górny <mgorny@gentoo.org>
Tue, 11 Feb 2020 07:04:26 +0000 (08:04 +0100)
Signed-off-by: Michał Górny <mgorny@gentoo.org>
dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch [new file with mode: 0644]
dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild [new file with mode: 0644]

diff --git a/dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch b/dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch
new file mode 100644 (file)
index 0000000..ebd9236
--- /dev/null
@@ -0,0 +1,27 @@
+From 36a3f9bd0cc7029e5150b1931efbd62da975e8b9 Mon Sep 17 00:00:00 2001
+From: StefanBruens <stefan.bruens@rwth-aachen.de>
+Date: Mon, 21 Oct 2019 02:07:19 +0200
+Subject: [PATCH] Catch BadSignatureError raised by ecdsa 0.13.3 on
+ verification errors (#448)
+
+The new ecdsa no longer uses AssertionError when the signature is too long.
+This happens in the test suite, where "123" is appended to the signature.
+
+Fixes #447
+---
+ jwt/contrib/algorithms/py_ecdsa.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/jwt/contrib/algorithms/py_ecdsa.py b/jwt/contrib/algorithms/py_ecdsa.py
+index bf0dea5..f1170a6 100644
+--- a/jwt/contrib/algorithms/py_ecdsa.py
++++ b/jwt/contrib/algorithms/py_ecdsa.py
+@@ -56,5 +56,7 @@ def verify(self, msg, key, sig):
+         try:
+             return key.verify(sig, msg, hashfunc=self.hash_alg,
+                               sigdecode=ecdsa.util.sigdecode_string)
+-        except AssertionError:
++        # ecdsa <= 0.13.2 raises AssertionError on too long signatures,
++        # ecdsa >= 0.13.3 raises BadSignatureError for verification errors.
++        except (AssertionError, ecdsa.BadSignatureError):
+             return False
diff --git a/dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild b/dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild
new file mode 100644 (file)
index 0000000..1cb2f6e
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+PYTHON_COMPAT=( python{2_7,3_{6,7,8}} pypy3 )
+
+inherit distutils-r1 eutils
+
+MY_PN="PyJWT"
+DESCRIPTION="JSON Web Token implementation in Python"
+HOMEPAGE="https://github.com/progrium/pyjwt https://pypi.org/project/PyJWT/"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_PN}-${PV}.tar.gz"
+S="${WORKDIR}"/${MY_PN}-${PV}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND=""
+DEPEND="
+       test? (
+               >=dev-python/cryptography-1.4.0[${PYTHON_USEDEP}]
+       )"
+
+distutils_enable_tests pytest
+
+python_prepare_all() {
+       find . -name '__pycache__' -prune -exec rm -rf {} + || die
+       find . -name '*.pyc' -delete || die
+
+       # enables coverage, we don't need that
+       rm setup.cfg || die
+       # kill tests using pycrypto that break with pycryptodome
+       sed -i -e '/has_pycrypto/s:True:False:' \
+               tests/contrib/test_algorithms.py || die
+
+       local PATCHES=(
+               "${FILESDIR}"/pyjwt-1.7.1-ecdsa-fix.patch
+       )
+
+       distutils-r1_python_prepare_all
+}
+
+python_test() {
+       pytest -vv || die "Tests fail with ${EPYTHON}"
+}
+
+pkg_postinst() {
+       elog "Available optional features:"
+       optfeature "cryptography" dev-python/cryptography
+       optfeature "flake8" dev-python/flake8{,-import-order}
+
+       ewarn "flake8 feature requires 'pep8-naming' which is not packaged yet"
+}