dev-python/csv23: Fix pypy3 compat
authorMichał Górny <mgorny@gentoo.org>
Thu, 30 Apr 2020 10:48:01 +0000 (12:48 +0200)
committerMichał Górny <mgorny@gentoo.org>
Thu, 30 Apr 2020 11:06:03 +0000 (13:06 +0200)
Signed-off-by: Michał Górny <mgorny@gentoo.org>
dev-python/csv23/csv23-0.3.ebuild
dev-python/csv23/files/csv23-0.3-pypy3.patch [new file with mode: 0644]

index 4bb3e2569a878551023215d89fe89b87b4e558be..82aab4ad6287693a2bfbed05fc71f9db12744f67 100644 (file)
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-PYTHON_COMPAT=( python{2_7,3_{6,7,8}} )
+PYTHON_COMPAT=( python{2_7,3_{6,7,8}} pypy3 )
 inherit distutils-r1
 
 DESCRIPTION="Python 2/3 unicode CSV compatibility layer"
@@ -24,6 +24,10 @@ BDEPEND="
 
 distutils_enable_tests pytest
 
+PATCHES=(
+       "${FILESDIR}"/${P}-pypy3.patch
+)
+
 src_prepare() {
        sed -i -e '/--cov/d' setup.cfg || die
        distutils-r1_src_prepare
diff --git a/dev-python/csv23/files/csv23-0.3-pypy3.patch b/dev-python/csv23/files/csv23-0.3-pypy3.patch
new file mode 100644 (file)
index 0000000..2e1e3b2
--- /dev/null
@@ -0,0 +1,44 @@
+From cb9a4519b81daccbb54ea767829d888a6b97855a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 30 Apr 2020 11:54:31 +0200
+Subject: [PATCH] fix hashlib usage compatibility with pypy3
+
+PyPy3's hashlib fails when passed a memoryview object (i.e.
+BytesIO.getbuffer()).  Convert it to bytes instead in order to fix
+compatibility.  While this isn't necessary for CPython, it should not
+cause any issues.
+
+Also enabling testing with pypy3.  I had to switch to the newer Ubuntu
+version as well in order to avoid more bugs in old PyPy versions.
+
+PyPy3 bug: https://foss.heptapod.net/pypy/pypy/issues/3217
+---
+ .travis.yml        | 2 ++
+ csv23/shortcuts.py | 2 +-
+ tox.ini            | 2 +-
+ 3 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/csv23/shortcuts.py b/csv23/shortcuts.py
+index 6eeb248..7bdb013 100644
+--- a/csv23/shortcuts.py
++++ b/csv23/shortcuts.py
+@@ -206,7 +206,7 @@ def write_csv(file, rows, header=None, dialect=DIALECT, encoding=ENCODING,
+                 buf = f.buffer
+                 for rows in iterslices(rows, 1000):
+                     writer.writerows(rows)
+-                    hashsum.update(buf.getbuffer())
++                    hashsum.update(bytes(buf.getbuffer()))
+                     # NOTE: f.truncate(0) would prepend zero-bytes
+                     f.seek(0)
+                     f.truncate()
+diff --git a/tox.ini b/tox.ini
+index 2a234b3..89a4432 100644
+--- a/tox.ini
++++ b/tox.ini
+@@ -1,5 +1,5 @@
+ [tox]
+-envlist = py{27,35,36,37,38}
++envlist = py{27,35,36,37,38},pypy3
+ skip_missing_interpreters = true
+ [testenv]