summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/capturer/Manifest1
-rw-r--r--dev-python/capturer/capturer-3.0.ebuild27
-rw-r--r--dev-python/cffi-python2/cffi-python2-1.14.0-r3.ebuild (renamed from dev-python/cffi-python2/cffi-python2-1.14.0-r2.ebuild)2
-rw-r--r--dev-python/coloredlogs/Manifest1
-rw-r--r--dev-python/coloredlogs/coloredlogs-14.0.ebuild46
-rw-r--r--dev-python/coloredlogs/files/coloredlogs-14.0-fix-install-prefix.patch35
-rw-r--r--dev-python/cryptography-python2/cryptography-python2-2.9-r2.ebuild (renamed from dev-python/cryptography-python2/cryptography-python2-2.9-r1.ebuild)2
-rw-r--r--dev-python/cython/cython-0.29.21-r1.ebuild75
-rw-r--r--dev-python/deprecation/deprecation-2.1.0.ebuild2
-rw-r--r--dev-python/eyeD3/eyeD3-0.9.5.ebuild2
-rw-r--r--dev-python/faulthandler-python2/Manifest1
-rw-r--r--dev-python/faulthandler-python2/faulthandler-python2-3.0.ebuild32
-rw-r--r--dev-python/faulthandler-python2/metadata.xml12
-rw-r--r--dev-python/filetype/filetype-1.0.7.ebuild2
-rw-r--r--dev-python/flask-paginate/Manifest2
-rw-r--r--dev-python/flask-paginate/flask-paginate-0.7.0.ebuild (renamed from dev-python/flask-paginate/flask-paginate-0.5.3-r1.ebuild)15
-rw-r--r--dev-python/funcparserlib/funcparserlib-0.3.6-r1.ebuild2
-rw-r--r--dev-python/hpack/hpack-4.0.0.ebuild2
-rw-r--r--dev-python/humanfriendly/Manifest1
-rw-r--r--dev-python/humanfriendly/humanfriendly-8.2.ebuild35
-rw-r--r--dev-python/hyper-h2/hyper-h2-4.0.0.ebuild2
-rw-r--r--dev-python/lxml-python2/Manifest1
-rw-r--r--dev-python/lxml-python2/files/lxml-4.5.0-tests-pypy.patch434
-rw-r--r--dev-python/lxml-python2/lxml-python2-4.5.2-r1.ebuild68
-rw-r--r--dev-python/lxml-python2/metadata.xml11
-rw-r--r--dev-python/nose/nose-1.3.7-r7.ebuild86
-rw-r--r--dev-python/olefile/olefile-0.46-r1.ebuild19
-rw-r--r--dev-python/pip/pip-20.2.2-r1.ebuild2
-rw-r--r--dev-python/ply-python2/Manifest1
-rw-r--r--dev-python/ply-python2/files/3.6-picklefile-IOError.patch24
-rw-r--r--dev-python/ply-python2/metadata.xml24
-rw-r--r--dev-python/ply-python2/ply-python2-3.11.ebuild32
-rw-r--r--dev-python/pycairo-python2/Manifest1
-rw-r--r--dev-python/pycairo-python2/files/pycairo-1.19.1-py39.patch26
-rw-r--r--dev-python/pycairo-python2/metadata.xml8
-rw-r--r--dev-python/pycairo-python2/pycairo-python2-1.18.2.ebuild44
-rw-r--r--dev-python/pycparser-python2/Manifest1
-rw-r--r--dev-python/pycparser-python2/metadata.xml12
-rw-r--r--dev-python/pycparser-python2/pycparser-python2-2.20.ebuild55
-rw-r--r--dev-python/pygame_sdl2/pygame_sdl2-7.3.5-r2.ebuild40
-rw-r--r--dev-python/pykerberos/pykerberos-1.3.0-r1.ebuild45
-rw-r--r--dev-python/pylast/pylast-3.3.0.ebuild2
-rw-r--r--dev-python/pymongo/pymongo-3.11.0-r1.ebuild112
-rw-r--r--dev-python/pyopengl-python2/Manifest1
-rw-r--r--dev-python/pyopengl-python2/metadata.xml12
-rw-r--r--dev-python/pyopengl-python2/pyopengl-python2-3.1.0.ebuild33
-rw-r--r--dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0-r1.ebuild (renamed from dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0.ebuild)2
-rw-r--r--dev-python/pyyaml/pyyaml-5.3.1-r1.ebuild47
-rw-r--r--dev-python/ruamel-yaml-clib/ruamel-yaml-clib-0.2.2.ebuild2
-rw-r--r--dev-python/ruamel-yaml/ruamel-yaml-0.16.12.ebuild2
-rw-r--r--dev-python/selenium/selenium-3.141.0-r1.ebuild2
-rw-r--r--dev-python/setproctitle/setproctitle-1.1.10-r1.ebuild2
-rw-r--r--dev-python/six-python2/Manifest1
-rw-r--r--dev-python/six-python2/metadata.xml13
-rw-r--r--dev-python/six-python2/six-python2-1.15.0.ebuild32
-rw-r--r--dev-python/soaplib/soaplib-1.0.0-r4.ebuild (renamed from dev-python/soaplib/soaplib-1.0.0-r3.ebuild)2
-rw-r--r--dev-python/sphinx-aiohttp-theme/sphinx-aiohttp-theme-0.1.6.ebuild2
-rw-r--r--dev-python/sphinx-testing/sphinx-testing-1.0.1-r1.ebuild2
-rw-r--r--dev-python/sphinxcontrib-newsfeed/sphinxcontrib-newsfeed-0.1.4.ebuild2
-rw-r--r--dev-python/verboselogs/verboselogs-1.7.ebuild2
-rw-r--r--dev-python/wxpython2/Manifest1
-rw-r--r--dev-python/wxpython2/files/wxpython-2.8-no-preservatives-added.patch16
-rw-r--r--dev-python/wxpython2/files/wxpython-2.8.11-drop-editra.patch48
-rw-r--r--dev-python/wxpython2/files/wxpython-2.8.12.1-disable-egging-mode.patch34
-rw-r--r--dev-python/wxpython2/files/wxpython-3.0-wxversion-demo.patch10
-rw-r--r--dev-python/wxpython2/files/wxpython-3.0.0.0-wxversion-scripts.patch211
-rw-r--r--dev-python/wxpython2/files/wxpython-4.0.6-no-webkit.patch27
-rw-r--r--dev-python/wxpython2/files/wxpython-4.0.6-skip-broken-tests.patch91
-rw-r--r--dev-python/wxpython2/metadata.xml18
-rw-r--r--dev-python/wxpython2/wxpython2-3.0.2.0.ebuild141
70 files changed, 2070 insertions, 33 deletions
diff --git a/dev-python/capturer/Manifest b/dev-python/capturer/Manifest
index a875a3e6b22c..abfb134621bd 100644
--- a/dev-python/capturer/Manifest
+++ b/dev-python/capturer/Manifest
@@ -1 +1,2 @@
DIST capturer-2.4.tar.gz 16963 BLAKE2B 329e388059a033993cf2ac3744a8df273beea0239f3696d19aece57767b0b5cd3397fa095f860c4f00ef24e8cd6bf2e58aab4158a86cf8c0c09c89d2065de0da SHA512 d85614b0424ab8817df9475ac0d230d7151289a3353a3c043a7fa89dac0528265a4dee535cac9ad0a3c2fbb0cac18afa69cd0a405b1becab55f9a6be13df0c46
+DIST capturer-3.0.tar.gz 18146 BLAKE2B 345313fa9e58c4e0121c795bd99606f99e46459215ed239da56586da8f8ffab35d97f0bf655258abe9cc45d4abaf7cb0ad2e76054d8c1781be2531ca01b04381 SHA512 3c83c0eade27380304347bdc93df392b2cb84c084e50693993dcca5fd572b8f92d31de43b4a2ddd0a0e8c7eb097629127e86a4860918c507d13b0e2979a04098
diff --git a/dev-python/capturer/capturer-3.0.ebuild b/dev-python/capturer/capturer-3.0.ebuild
new file mode 100644
index 000000000000..4f206f6fa09e
--- /dev/null
+++ b/dev-python/capturer/capturer-3.0.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="Easily capture stdout/stderr of the current process and subprocesses"
+HOMEPAGE="https://capturer.readthedocs.io/en/latest/
+ https://pypi.org/project/capturer/
+ https://github.com/xolox/python-capturer"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+SLOT="0"
+LICENSE="MIT"
+KEYWORDS="~amd64 ~arm ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="dev-python/humanfriendly[${PYTHON_USEDEP}]"
+
+distutils_enable_sphinx docs
+distutils_enable_tests pytest
+
+python_test() {
+ pytest -vv ${PN}/tests.py || die "Tests fail with ${EPYTHON}"
+}
diff --git a/dev-python/cffi-python2/cffi-python2-1.14.0-r2.ebuild b/dev-python/cffi-python2/cffi-python2-1.14.0-r3.ebuild
index 912054989aee..7888fc5fc800 100644
--- a/dev-python/cffi-python2/cffi-python2-1.14.0-r2.ebuild
+++ b/dev-python/cffi-python2/cffi-python2-1.14.0-r3.ebuild
@@ -25,7 +25,7 @@ RESTRICT="test"
DEPEND="dev-libs/libffi:="
RDEPEND="${DEPEND}
!dev-python/cffi[python_targets_python2_7]
- dev-python/pycparser[${PYTHON_USEDEP}]"
+ dev-python/pycparser-python2[${PYTHON_USEDEP}]"
BDEPEND="${RDEPEND}
virtual/pkgconfig"
diff --git a/dev-python/coloredlogs/Manifest b/dev-python/coloredlogs/Manifest
index ed2a550127e3..7e04c31b3a25 100644
--- a/dev-python/coloredlogs/Manifest
+++ b/dev-python/coloredlogs/Manifest
@@ -1 +1,2 @@
DIST coloredlogs-10.0.tar.gz 273273 BLAKE2B 775b12718d780da396d74c7f960cdbbd4858c793bf3eefb53d29e9f6b415f682110ae2c7ac631be230578946a2fab8d75e0c3aa487ccd952bb05443f0a85700c SHA512 f4a51fd8fa92ea4e2ef0b58305dcc4bbe12851e722fc85cfd4f48a9388002efced52bcf027f6dc4c525b095f3f953970e73928fdce3245ab4f9d13ae36b9d498
+DIST coloredlogs-14.0.tar.gz 275863 BLAKE2B 0a8c026220955397378ad2b43a69c89c5710a09e2d9ed81a3f25408c60e171f4b8f78239696a0bc1b51fc3dd9bfca80df63e1f1d7afb6bee0046209a089e0d6d SHA512 3434a95f3216d19af5d7a48324e5afd5e975f92d9f6b99f40df2c0a635f1738e0bc6d7277a549a42a0fec5a8601f82908c4b0205ceeb3666f49210f66fe58671
diff --git a/dev-python/coloredlogs/coloredlogs-14.0.ebuild b/dev-python/coloredlogs/coloredlogs-14.0.ebuild
new file mode 100644
index 000000000000..872b9e02642f
--- /dev/null
+++ b/dev-python/coloredlogs/coloredlogs-14.0.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+
+inherit distutils-r1
+
+DESCRIPTION="Colored stream handler for the logging module"
+HOMEPAGE="
+ https://pypi.org/project/coloredlogs/
+ https://github.com/xolox/python-coloredlogs
+ https://coloredlogs.readthedocs.io/en/latest/
+"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="dev-python/humanfriendly[${PYTHON_USEDEP}]"
+BDEPEND="
+ test? (
+ dev-python/capturer[${PYTHON_USEDEP}]
+ dev-python/coverage[${PYTHON_USEDEP}]
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/verboselogs[${PYTHON_USEDEP}]
+ )
+"
+
+PATCHES=( "${FILESDIR}/${P}-fix-install-prefix.patch" )
+
+distutils_enable_sphinx docs
+distutils_enable_tests pytest
+
+python_test() {
+ # test_cli_conversion requires the package to be installed
+ distutils_install_for_testing
+ # test_auto_install fails because the pth file isn't being loaded
+ pytest -vv ${PN}/tests.py \
+ --deselect ${PN}/tests.py::ColoredLogsTestCase::test_auto_install \
+ || die "Tests fail with ${EPYTHON}"
+}
diff --git a/dev-python/coloredlogs/files/coloredlogs-14.0-fix-install-prefix.patch b/dev-python/coloredlogs/files/coloredlogs-14.0-fix-install-prefix.patch
new file mode 100644
index 000000000000..d6b60c3bdf57
--- /dev/null
+++ b/dev-python/coloredlogs/files/coloredlogs-14.0-fix-install-prefix.patch
@@ -0,0 +1,35 @@
+commit 6f566c799323feb3b8dc2b82e62953040a6a5129
+Author: Louis Sautier <sautier.louis@gmail.com>
+Date: Sat Sep 26 10:30:37 2020 +0200
+
+ setup.py: use absolute paths for pth files
+
+ On some systems (such as PyPy3 on Gentoo), distutils' `data` path is not
+ `sys.prefix`, which means that we cannot rely on relative paths.
+
+diff --git a/setup.py b/setup.py
+index 057dd80..7674adc 100755
+--- a/setup.py
++++ b/setup.py
+@@ -66,9 +66,9 @@ def find_pth_directory():
+ Determine the correct directory pathname for installing ``*.pth`` files.
+
+ To install a ``*.pth`` file using a source distribution archive (created
+- when ``python setup.py sdist`` is called) the relative directory pathname
+- ``lib/pythonX.Y/site-packages`` needs to be passed to the ``data_files``
+- option to ``setup()``.
++ when ``python setup.py sdist`` is called) the directory pathname
++ ``/usr/lib/pythonX.Y/site-packages`` needs to be passed to the ``data_files``
++ option of ``setup()``.
+
+ Unfortunately this breaks universal wheel archives (created when ``python
+ setup.py bdist_wheel --universal`` is called) because a specific Python
+@@ -81,7 +81,7 @@ def find_pth_directory():
+ directory without hard coding its location.
+ """
+ return ('/' if 'bdist_wheel' in sys.argv
+- else os.path.relpath(distutils.sysconfig.get_python_lib(), sys.prefix))
++ else distutils.sysconfig.get_python_lib())
+
+
+ setup(name='coloredlogs',
diff --git a/dev-python/cryptography-python2/cryptography-python2-2.9-r1.ebuild b/dev-python/cryptography-python2/cryptography-python2-2.9-r2.ebuild
index 9d93057b53ec..bd93c42f94d1 100644
--- a/dev-python/cryptography-python2/cryptography-python2-2.9-r1.ebuild
+++ b/dev-python/cryptography-python2/cryptography-python2-2.9-r2.ebuild
@@ -33,7 +33,7 @@ RDEPEND="
libressl? ( >=dev-libs/libressl-2.8:0= )
idna? ( >=dev-python/idna-2.1[${PYTHON_USEDEP}] )
dev-python/setuptools[${PYTHON_USEDEP}]
- >=dev-python/six-1.4.1[${PYTHON_USEDEP}]
+ >=dev-python/six-python2-1.4.1[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
dev-python/enum34[${PYTHON_USEDEP}]
dev-python/ipaddress[${PYTHON_USEDEP}]
diff --git a/dev-python/cython/cython-0.29.21-r1.ebuild b/dev-python/cython/cython-0.29.21-r1.ebuild
new file mode 100644
index 000000000000..be1756b682a0
--- /dev/null
+++ b/dev-python/cython/cython-0.29.21-r1.ebuild
@@ -0,0 +1,75 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 toolchain-funcs elisp-common
+
+DESCRIPTION="A Python to C compiler"
+HOMEPAGE="https://cython.org https://pypi.org/project/Cython/
+ https://github.com/cython/cython"
+SRC_URI="https://github.com/cython/cython/archive/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 arm arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris"
+IUSE="emacs test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ emacs? ( >=app-editors/emacs-23.1:* )
+"
+BDEPEND="${RDEPEND}
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ test? (
+ $(python_gen_cond_dep 'dev-python/numpy[${PYTHON_USEDEP}]' \
+ 'python3*')
+ )"
+
+PATCHES=(
+ "${FILESDIR}/cython-0.29.14-sphinx-update.patch"
+)
+
+SITEFILE=50cython-gentoo.el
+
+distutils_enable_sphinx docs
+
+python_compile() {
+ # Python gets confused when it is in sys.path before build.
+ local -x PYTHONPATH=
+
+ distutils-r1_python_compile
+}
+
+python_compile_all() {
+ use emacs && elisp-compile Tools/cython-mode.el
+}
+
+python_test() {
+ tc-export CC
+ # https://github.com/cython/cython/issues/1911
+ local -x CFLAGS="${CFLAGS} -fno-strict-overflow"
+ "${PYTHON}" runtests.py -vv --work-dir "${BUILD_DIR}"/tests \
+ || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ local DOCS=( CHANGES.rst README.rst ToDo.txt USAGE.txt )
+ distutils-r1_python_install_all
+
+ if use emacs; then
+ elisp-install ${PN} Tools/cython-mode.*
+ elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ fi
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+}
diff --git a/dev-python/deprecation/deprecation-2.1.0.ebuild b/dev-python/deprecation/deprecation-2.1.0.ebuild
index 2faa5dad0202..bfdaa924cc9f 100644
--- a/dev-python/deprecation/deprecation-2.1.0.ebuild
+++ b/dev-python/deprecation/deprecation-2.1.0.ebuild
@@ -13,7 +13,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc x86"
+KEYWORDS="amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc x86"
RDEPEND="dev-python/packaging[${PYTHON_USEDEP}]"
BDEPEND="
diff --git a/dev-python/eyeD3/eyeD3-0.9.5.ebuild b/dev-python/eyeD3/eyeD3-0.9.5.ebuild
index 9700963cbf23..b38e7aae83ea 100644
--- a/dev-python/eyeD3/eyeD3-0.9.5.ebuild
+++ b/dev-python/eyeD3/eyeD3-0.9.5.ebuild
@@ -15,7 +15,7 @@ SRC_URI="https://github.com/nicfit/eyeD3/archive/v${PV}.tar.gz -> ${P}.tar.gz
LICENSE="GPL-2"
SLOT="0.7"
-KEYWORDS="~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
RDEPEND="
dev-python/deprecation[${PYTHON_USEDEP}]
diff --git a/dev-python/faulthandler-python2/Manifest b/dev-python/faulthandler-python2/Manifest
new file mode 100644
index 000000000000..61405407f5ff
--- /dev/null
+++ b/dev-python/faulthandler-python2/Manifest
@@ -0,0 +1 @@
+DIST faulthandler-3.0.tar.gz 55577 BLAKE2B 8c4157393eb912d3f0e42ab6b942390a0ba2c068559ab8b66e6e3d961a2f7750f9cab000429feba46c0f9cc0a81ac2c8570d092ead1dcec8ea4e76e555cd1a8b SHA512 9e31682338e572e77e22a510637877c3e27440bc451854a898c5e58238d28a1bbf824cb2b44d1f1f11d8a4f491ddc299982a3d452eebec38bc2a03a824bac392
diff --git a/dev-python/faulthandler-python2/faulthandler-python2-3.0.ebuild b/dev-python/faulthandler-python2/faulthandler-python2-3.0.ebuild
new file mode 100644
index 000000000000..734cba92bf46
--- /dev/null
+++ b/dev-python/faulthandler-python2/faulthandler-python2-3.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+MY_PN=faulthandler
+MY_P=$MY_PN-$PV
+DESCRIPTION="functions to dump Python tracebacks explicitly (on fault, user signal, timeout)"
+HOMEPAGE="https://github.com/haypo/faulthandler https://pypi.org/project/faulthandler/"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="amd64 ppc ppc64 x86"
+IUSE=""
+RESTRICT="test"
+
+DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
+RDEPEND="
+ !dev-python/${MY_PN}[python_targets_python2_7]
+"
+
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+python_install_all() {
+ distutils-r1_python_install_all
+ rm -r ${D}/usr/share
+}
diff --git a/dev-python/faulthandler-python2/metadata.xml b/dev-python/faulthandler-python2/metadata.xml
new file mode 100644
index 000000000000..4f7b3ed58dda
--- /dev/null
+++ b/dev-python/faulthandler-python2/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">haypo/faulthandler</remote-id>
+ <remote-id type="pypi">faulthandler</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/filetype/filetype-1.0.7.ebuild b/dev-python/filetype/filetype-1.0.7.ebuild
index daf08c57a379..e025bac8ea90 100644
--- a/dev-python/filetype/filetype-1.0.7.ebuild
+++ b/dev-python/filetype/filetype-1.0.7.ebuild
@@ -13,7 +13,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
PATCHES=( "${FILESDIR}/${P}-examples.patch" )
diff --git a/dev-python/flask-paginate/Manifest b/dev-python/flask-paginate/Manifest
index 7419a5398356..3a28f339eaf8 100644
--- a/dev-python/flask-paginate/Manifest
+++ b/dev-python/flask-paginate/Manifest
@@ -1 +1 @@
-DIST flask-paginate-0.5.3.tar.gz 118570 BLAKE2B 0c6d1163dcd8144afa80b217ab3a714a39f4015aa732b4c32cf0feee0d7ee06968bd8549651f2941be9c60d3fd36a18e132dd4c174eb4148e63f83e461cbf519 SHA512 fe3cdc808459528c449611b2411c377d46bdef4995cd2851730e90dc0091da15479022f401e31113c4d39f766841d9701f285c81e0ec6293eddd4c8f0821567e
+DIST flask-paginate-0.7.0.tar.gz 119358 BLAKE2B 24c1f3bc77853c9c96bb72d3364e73845f8fd0870606dd96b4261861430bef864a6830dd793f4f6e8a9371c89342dda88c5f976d79ff4a1bec7d687614b2014a SHA512 11c335c08c6a9c32999e5b8ba7a76c1fb04769e5ab679b550efc87497446edbaa1e3ccb62a4c238a0b5585f7ba4067e43f158ae123c3b118db84b90cb5d4f219
diff --git a/dev-python/flask-paginate/flask-paginate-0.5.3-r1.ebuild b/dev-python/flask-paginate/flask-paginate-0.7.0.ebuild
index 755e97f0fe8a..101c541b63e3 100644
--- a/dev-python/flask-paginate/flask-paginate-0.5.3-r1.ebuild
+++ b/dev-python/flask-paginate/flask-paginate-0.7.0.ebuild
@@ -3,30 +3,21 @@
EAPI=7
+DISTUTILS_USE_SETUPTOOLS=bdepend
PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
-
inherit distutils-r1
-MY_COMMIT="510ad833106134711868653fb597bf75ea8ac34f"
-
DESCRIPTION="Pagination support for flask"
HOMEPAGE="https://flask-paginate.readthedocs.io"
-# https://github.com/lixxu/flask-paginate/issues/68
-SRC_URI="https://github.com/lixxu/flask-paginate/archive/${MY_COMMIT}.tar.gz -> ${P}.tar.gz"
+SRC_URI="https://github.com/lixxu/flask-paginate/archive/${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~x86"
-IUSE="test"
-RESTRICT="!test? ( test )"
RDEPEND="dev-python/flask[${PYTHON_USEDEP}]"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? ( dev-python/pytest[${PYTHON_USEDEP}] )
-"
-S="${WORKDIR}/${PN}-${MY_COMMIT}"
+distutils_enable_tests pytest
python_test() {
pytest -vv tests/tests.py || die "tests failed with ${EPYTHON}"
diff --git a/dev-python/funcparserlib/funcparserlib-0.3.6-r1.ebuild b/dev-python/funcparserlib/funcparserlib-0.3.6-r1.ebuild
index 675cfd05489e..d1e5c9d3dcb4 100644
--- a/dev-python/funcparserlib/funcparserlib-0.3.6-r1.ebuild
+++ b/dev-python/funcparserlib/funcparserlib-0.3.6-r1.ebuild
@@ -13,7 +13,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha amd64 ~arm arm64 ~ia64 ~ppc ~ppc64 ~sparc x86"
+KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc x86"
IUSE=""
RDEPEND=""
diff --git a/dev-python/hpack/hpack-4.0.0.ebuild b/dev-python/hpack/hpack-4.0.0.ebuild
index be8c3aae1e86..ccbb42ca4e32 100644
--- a/dev-python/hpack/hpack-4.0.0.ebuild
+++ b/dev-python/hpack/hpack-4.0.0.ebuild
@@ -14,7 +14,7 @@ SRC_URI="https://github.com/python-hyper/${PN}/archive/v${PV}.tar.gz -> ${P}.tar
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
# dev-python/pytest-relaxed causes tests to fail
BDEPEND="
diff --git a/dev-python/humanfriendly/Manifest b/dev-python/humanfriendly/Manifest
index 3a5643b6a47b..c0caf772e3cb 100644
--- a/dev-python/humanfriendly/Manifest
+++ b/dev-python/humanfriendly/Manifest
@@ -1 +1,2 @@
DIST humanfriendly-4.18.tar.gz 345853 BLAKE2B 9b03ea0679f787e216ee78efe8feb77f83562998813718845f4d21b7ce3f42cadff0e80b96f02da3cf6dc7f35cb0714f746940cf2ac0ec8e8981377989650c8a SHA512 01c7ee50d35154fe0b7ad39662ca6ff2dcd3e0f2a2eacc62f0184102c9db1c0fd99257273982aff56710b4e59024e8c20ee77ddd10c68e427c077ed4ca7e0022
+DIST humanfriendly-8.2.tar.gz 358747 BLAKE2B bc5824e94ea94df6ee93ea44d273ccb856f50b69e52ae6293afaedf06c9f00c67e064f0c85edd88be9954bb258334b1b9af4ab88efc5b352f3efe8d322fc55c1 SHA512 123d8592e6613a70421740648bb8998733b118927a0bd6182af848612e46eec8e35cae95168219c9b7672bed8e18e1c4a493a80248eabe47f8a4cb1813c8b591
diff --git a/dev-python/humanfriendly/humanfriendly-8.2.ebuild b/dev-python/humanfriendly/humanfriendly-8.2.ebuild
new file mode 100644
index 000000000000..6d102908edf0
--- /dev/null
+++ b/dev-python/humanfriendly/humanfriendly-8.2.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+
+inherit distutils-r1
+
+DESCRIPTION="Human friendly output for text interfaces using Python"
+HOMEPAGE="https://pypi.org/project/humanfriendly
+ https://github.com/xolox/python-humanfriendly
+ https://humanfriendly.readthedocs.org"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+SLOT="0"
+LICENSE="MIT"
+KEYWORDS="~amd64 ~arm ~x86 ~amd64-linux ~x86-linux"
+
+BDEPEND="
+ test? (
+ dev-python/capturer[${PYTHON_USEDEP}]
+ dev-python/coloredlogs[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+distutils_enable_sphinx docs
+
+python_test() {
+ pytest -vv ${PN}/tests.py || die "Tests fail with ${EPYTHON}"
+}
diff --git a/dev-python/hyper-h2/hyper-h2-4.0.0.ebuild b/dev-python/hyper-h2/hyper-h2-4.0.0.ebuild
index 284161100632..5937d1f73bda 100644
--- a/dev-python/hyper-h2/hyper-h2-4.0.0.ebuild
+++ b/dev-python/hyper-h2/hyper-h2-4.0.0.ebuild
@@ -12,7 +12,7 @@ SRC_URI="https://github.com/python-hyper/${PN}/archive/v${PV}.tar.gz -> ${P}.tar
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
RDEPEND="
>=dev-python/hyperframe-6.0[${PYTHON_USEDEP}]
diff --git a/dev-python/lxml-python2/Manifest b/dev-python/lxml-python2/Manifest
new file mode 100644
index 000000000000..d8a2572ecb2e
--- /dev/null
+++ b/dev-python/lxml-python2/Manifest
@@ -0,0 +1 @@
+DIST lxml-4.5.2.tar.gz 943480 BLAKE2B 11130d2507ff0d61637d7fef2f4b28c5fbbbfe8864504c8f3a231899be4db14e6be65edc6e780719686605663b0c5f76f161beb509dc58d16ee3a9158a7db59c SHA512 146dcb4414b7f0815c5930048d9dc89711bf0a3ee091c89f4475265cdd6f1690a20f82ec24a282a43cff8854f9b960f0cd4430cff79a7506d39ac1baf7770695
diff --git a/dev-python/lxml-python2/files/lxml-4.5.0-tests-pypy.patch b/dev-python/lxml-python2/files/lxml-4.5.0-tests-pypy.patch
new file mode 100644
index 000000000000..5f8cad9063fd
--- /dev/null
+++ b/dev-python/lxml-python2/files/lxml-4.5.0-tests-pypy.patch
@@ -0,0 +1,434 @@
+From 1804702b5e3c85c1a16014d62365a29d0a6d0c75 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 30 Jan 2020 06:15:27 +0100
+Subject: [PATCH] Skip tests failing on PyPy
+
+---
+ src/lxml/tests/test_elementtree.py | 3 +-
+ src/lxml/tests/test_errors.py | 3 +-
+ src/lxml/tests/test_http_io.py | 3 +-
+ src/lxml/tests/test_nsclasses.py | 3 +-
+ src/lxml/tests/test_objectify.py | 41 +++++++++++++++++++++++++--
+ src/lxml/tests/test_xpathevaluator.py | 7 +++--
+ src/lxml/tests/test_xslt.py | 7 +++--
+ 7 files changed, 56 insertions(+), 11 deletions(-)
+
+diff --git a/src/lxml/tests/test_elementtree.py b/src/lxml/tests/test_elementtree.py
+index 78d8964d..f3f28044 100644
+--- a/src/lxml/tests/test_elementtree.py
++++ b/src/lxml/tests/test_elementtree.py
+@@ -26,7 +26,7 @@ from .common_imports import (
+ BytesIO, etree, HelperTestCase,
+ ElementTree, cElementTree, ET_VERSION, CET_VERSION,
+ filter_by_version, fileInTestDir, canonicalize, tmpfile,
+- _str, _bytes, unicode, next, IS_PYTHON2
++ _str, _bytes, unicode, next, IS_PYTHON2, IS_PYPY
+ )
+
+ if cElementTree is not None and (CET_VERSION <= (1,0,7) or sys.version_info[0] >= 3):
+@@ -2956,6 +2956,7 @@ class _ETreeTestCaseBase(HelperTestCase):
+ self.assertEqual('TEST', root2[0].get('{%s}a' % ns_href))
+
+ required_versions_ET['test_register_namespace'] = (1,3)
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_register_namespace(self):
+ # ET 1.3+
+ Element = self.etree.Element
+diff --git a/src/lxml/tests/test_errors.py b/src/lxml/tests/test_errors.py
+index c0aee744..33111429 100644
+--- a/src/lxml/tests/test_errors.py
++++ b/src/lxml/tests/test_errors.py
+@@ -11,7 +11,7 @@ import unittest
+ import sys, gc, os.path
+ from lxml import etree
+
+-from .common_imports import HelperTestCase
++from .common_imports import HelperTestCase, IS_PYPY
+
+
+ class ErrorTestCase(HelperTestCase):
+@@ -25,6 +25,7 @@ class ErrorTestCase(HelperTestCase):
+ def test_empty_parse(self):
+ self.assertRaises(etree.XMLSyntaxError, etree.fromstring, '')
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_element_cyclic_gc_none(self):
+ # test if cyclic reference can crash etree
+ Element = self.etree.Element
+diff --git a/src/lxml/tests/test_http_io.py b/src/lxml/tests/test_http_io.py
+index f9eff39a..edf2bd81 100644
+--- a/src/lxml/tests/test_http_io.py
++++ b/src/lxml/tests/test_http_io.py
+@@ -11,10 +11,11 @@ import textwrap
+ import sys
+ import gzip
+
+-from .common_imports import etree, HelperTestCase, BytesIO, _bytes
++from .common_imports import etree, HelperTestCase, BytesIO, _bytes, IS_PYPY
+ from .dummy_http_server import webserver, HTTPRequestCollector
+
+
++@unittest.skipIf(IS_PYPY, "broken on pypy")
+ class HttpIOTestCase(HelperTestCase):
+ etree = etree
+
+diff --git a/src/lxml/tests/test_nsclasses.py b/src/lxml/tests/test_nsclasses.py
+index a0aa608d..5aa5dc48 100644
+--- a/src/lxml/tests/test_nsclasses.py
++++ b/src/lxml/tests/test_nsclasses.py
+@@ -9,7 +9,7 @@ from __future__ import absolute_import
+
+ import unittest
+
+-from .common_imports import etree, HelperTestCase, _bytes, make_doctest
++from .common_imports import etree, HelperTestCase, _bytes, make_doctest, IS_PYPY
+
+ class ETreeNamespaceClassesTestCase(HelperTestCase):
+
+@@ -46,6 +46,7 @@ class ETreeNamespaceClassesTestCase(HelperTestCase):
+ self.Namespace('ns02').clear()
+ self.Namespace('ns03').clear()
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_ns_classes(self):
+ bluff_dict = {'bluff' : self.bluff_class}
+ maeh_dict = {'maeh' : self.maeh_class}
+diff --git a/src/lxml/tests/test_objectify.py b/src/lxml/tests/test_objectify.py
+index a12ae7e1..83ba4ced 100644
+--- a/src/lxml/tests/test_objectify.py
++++ b/src/lxml/tests/test_objectify.py
+@@ -9,7 +9,8 @@ from __future__ import absolute_import
+ import unittest, operator
+
+ from .common_imports import (
+- etree, HelperTestCase, fileInTestDir, doctest, make_doctest, _bytes, _str, BytesIO
++ etree, HelperTestCase, fileInTestDir, doctest, make_doctest, _bytes, _str, BytesIO,
++ IS_PYPY
+ )
+
+ from lxml import objectify
+@@ -213,11 +214,13 @@ class ObjectifyTestCase(HelperTestCase):
+ expected.update(DEFAULT_NSMAP)
+ self.assertEqual(root.value.nsmap, expected)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_date_element_efactory_text(self):
+ # ObjectifiedDataElement can also be used as E-Factory
+ value = objectify.ObjectifiedDataElement('test', 'toast')
+ self.assertEqual(value.text, 'testtoast')
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_date_element_efactory_tail(self):
+ # ObjectifiedDataElement can also be used as E-Factory
+ value = objectify.ObjectifiedElement(objectify.ObjectifiedDataElement(), 'test', 'toast')
+@@ -374,6 +377,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual("4", getattr(root.c1, "{}c2").text)
+ self.assertEqual("0", getattr(root.c1, "c2").text)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_setattr(self):
+ for val in [
+ 2, 2**32, 1.2, "Won't get fooled again",
+@@ -809,6 +813,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual(3, len(root.findall(".//b")))
+ self.assertEqual(2, len(root.findall("b")))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_build_tree(self):
+ root = self.Element('root')
+ root.a = 5
+@@ -838,6 +843,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual(value, None)
+ self.assertEqual(value.get(XML_SCHEMA_NIL_ATTR), "true")
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_bool(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -871,6 +877,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertTrue(isinstance(value, objectify.BoolElement))
+ self.assertEqual(value, False)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -878,6 +885,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = "test"
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_intliteral(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -885,6 +893,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = "3"
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_floatliteral(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -892,6 +901,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = "3.72"
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_mul(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -904,6 +914,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertRaises(TypeError, operator.mul, root.s, "honk")
+ self.assertRaises(TypeError, operator.mul, "honk", root.s)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_add(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -914,6 +925,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual("test" + s, root.s + s)
+ self.assertEqual(s + "test", s + root.s)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_mod(self):
+ s = "%d %f %s %r"
+ el = objectify.DataElement(s)
+@@ -979,6 +991,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertTrue(isinstance(value, objectify.StringElement))
+ self.assertEqual(value, "3.20")
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_ustr(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -986,6 +999,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = _str("test")
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_ustr_intliteral(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -993,6 +1007,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = _str("3")
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_ustr_floatliteral(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -1000,6 +1015,7 @@ class ObjectifyTestCase(HelperTestCase):
+ root.s = _str("3.72")
+ self.assertTrue(isinstance(root.s, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_ustr_mul(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -1012,6 +1028,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertRaises(TypeError, operator.mul, root.s, _str("honk"))
+ self.assertRaises(TypeError, operator.mul, _str("honk"), root.s)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_ustr_add(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -1037,6 +1054,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertTrue(isinstance(value, objectify.StringElement))
+ self.assertEqual(value, _str("3.20"))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_int(self):
+ Element = self.Element
+ root = Element("{objectified}root")
+@@ -1053,6 +1071,7 @@ class ObjectifyTestCase(HelperTestCase):
+ value = objectify.DataElement(123)
+ self.assertEqual(hash(value), hash(123))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_float(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -1069,6 +1088,7 @@ class ObjectifyTestCase(HelperTestCase):
+ value = objectify.DataElement(5.5)
+ self.assertEqual(hash(value), hash(5.5))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_float_precision(self):
+ # test not losing precision by shortened float str() value
+ # repr(2.305064300557): '2.305064300557'
+@@ -1088,6 +1108,7 @@ class ObjectifyTestCase(HelperTestCase):
+ s = "2.305064300557"
+ self.assertEqual(objectify.FloatElement(s), float(s))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_float_precision_consistency(self):
+ # test consistent FloatElement values for the different instantiation
+ # possibilities
+@@ -1169,6 +1190,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual(value.text, None)
+ self.assertEqual(value.pyval, None)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_unregistered(self):
+ Element = self.Element
+ SubElement = self.etree.SubElement
+@@ -1331,6 +1353,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual(["why", "try"],
+ strs)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_str_cmp(self):
+ XML = self.XML
+ root = XML(_bytes('<root><b>test</b><b>taste</b><b></b><b/></root>'))
+@@ -1358,6 +1381,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertEqual(root.b, "")
+ self.assertEqual("", root.b)
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_int_cmp(self):
+ XML = self.XML
+ root = XML(_bytes('<root><b>5</b><b>6</b></root>'))
+@@ -1380,6 +1404,7 @@ class ObjectifyTestCase(HelperTestCase):
+
+ # float + long share the NumberElement implementation with int
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_type_bool_cmp(self):
+ XML = self.XML
+ root = XML(_bytes('<root><b>false</b><b>true</b></root>'))
+@@ -2049,6 +2074,7 @@ class ObjectifyTestCase(HelperTestCase):
+ before = [objectify.getRegisteredTypes()[0].name],
+ after = [objectify.getRegisteredTypes()[1].name])
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_registered_type_stringify(self):
+ from datetime import datetime
+ def parse_date(value):
+@@ -2519,46 +2545,55 @@ class ObjectifyTestCase(HelperTestCase):
+
+ # E-Factory tests, need to use sub-elements as root element is always
+ # type-looked-up as ObjectifiedElement (no annotations)
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_int(self):
+ E = objectify.E
+ root = E.root(E.val(23))
+ self.assertTrue(isinstance(root.val, objectify.IntElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_float(self):
+ E = objectify.E
+ root = E.root(E.val(233.23))
+ self.assertTrue(isinstance(root.val, objectify.FloatElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_str(self):
+ E = objectify.E
+ root = E.root(E.val("what?"))
+ self.assertTrue(isinstance(root.val, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_unicode(self):
+ E = objectify.E
+ root = E.root(E.val(_str("blöödy häll", encoding="ISO-8859-1")))
+ self.assertTrue(isinstance(root.val, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_bool(self):
+ E = objectify.E
+ root = E.root(E.val(True))
+ self.assertTrue(isinstance(root.val, objectify.BoolElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_none(self):
+ E = objectify.E
+ root = E.root(E.val(None))
+ self.assertTrue(isinstance(root.val, objectify.NoneElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_value_concatenation(self):
+ E = objectify.E
+ root = E.root(E.val(1, "foo", 2.0, "bar ", True, None))
+ self.assertTrue(isinstance(root.val, objectify.StringElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_attrib(self):
+ E = objectify.E
+ root = E.root(foo="bar")
+ self.assertEqual(root.get("foo"), "bar")
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_nested(self):
+ E = objectify.E
+ DataElement = objectify.DataElement
+@@ -2573,6 +2608,7 @@ class ObjectifyTestCase(HelperTestCase):
+ self.assertTrue(isinstance(root.value[0], objectify.IntElement))
+ self.assertTrue(isinstance(root.value[1], objectify.FloatElement))
+
++ @unittest.skipIf(IS_PYPY, "broken on pypy")
+ def test_efactory_subtype(self):
+ class Attribute(objectify.ObjectifiedDataElement):
+ def __init__(self):
+@@ -2674,7 +2710,8 @@ def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTests([unittest.makeSuite(ObjectifyTestCase)])
+ suite.addTests(doctest.DocTestSuite(objectify))
+- suite.addTests([make_doctest('../../../doc/objectify.txt')])
++ if not IS_PYPY:
++ suite.addTests([make_doctest('../../../doc/objectify.txt')])
+ return suite
+
+ if __name__ == '__main__':
+diff --git a/src/lxml/tests/test_xpathevaluator.py b/src/lxml/tests/test_xpathevaluator.py
+index 13ee97ec..6d162c6d 100644
+--- a/src/lxml/tests/test_xpathevaluator.py
++++ b/src/lxml/tests/test_xpathevaluator.py
+@@ -8,7 +8,7 @@ from __future__ import absolute_import
+
+ import unittest, sys
+
+-from .common_imports import etree, HelperTestCase, _bytes, BytesIO, doctest, make_doctest
++from .common_imports import etree, HelperTestCase, _bytes, BytesIO, doctest, make_doctest, IS_PYPY
+
+
+ class ETreeXPathTestCase(HelperTestCase):
+@@ -740,8 +740,9 @@ def test_suite():
+ suite.addTests([unittest.makeSuite(ETreeXPathExsltTestCase)])
+ suite.addTests([unittest.makeSuite(ETreeETXPathClassTestCase)])
+ suite.addTests([doctest.DocTestSuite()])
+- suite.addTests(
+- [make_doctest('../../../doc/xpathxslt.txt')])
++ if not IS_PYPY:
++ suite.addTests(
++ [make_doctest('../../../doc/xpathxslt.txt')])
+ return suite
+
+ if __name__ == '__main__':
+diff --git a/src/lxml/tests/test_xslt.py b/src/lxml/tests/test_xslt.py
+index cde23357..41f8d78b 100644
+--- a/src/lxml/tests/test_xslt.py
++++ b/src/lxml/tests/test_xslt.py
+@@ -17,6 +17,8 @@ from textwrap import dedent
+ from tempfile import NamedTemporaryFile, mkdtemp
+
+ is_python3 = sys.version_info[0] >= 3
++is_pypy = (getattr(sys, 'implementation', None) == 'pypy' or
++ getattr(sys, 'pypy_version_info', None) is not None)
+
+ try:
+ unicode
+@@ -2085,8 +2087,9 @@ def test_suite():
+ suite.addTests([unittest.makeSuite(Py3XSLTTestCase)])
+ suite.addTests(
+ [make_doctest('../../../doc/extensions.txt')])
+- suite.addTests(
+- [make_doctest('../../../doc/xpathxslt.txt')])
++ if not is_pypy:
++ suite.addTests(
++ [make_doctest('../../../doc/xpathxslt.txt')])
+ return suite
+
+ if __name__ == '__main__':
+--
+2.25.0
+
diff --git a/dev-python/lxml-python2/lxml-python2-4.5.2-r1.ebuild b/dev-python/lxml-python2/lxml-python2-4.5.2-r1.ebuild
new file mode 100644
index 000000000000..b8287e28f6ce
--- /dev/null
+++ b/dev-python/lxml-python2/lxml-python2-4.5.2-r1.ebuild
@@ -0,0 +1,68 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1 optfeature toolchain-funcs
+MY_PN=lxml
+MY_P=$MY_PN-$PV
+
+DESCRIPTION="A Pythonic binding for the libxml2 and libxslt libraries"
+HOMEPAGE="https://lxml.de/ https://pypi.org/project/lxml/ https://github.com/lxml/lxml"
+SRC_URI="https://github.com/lxml/lxml/archive/${MY_P}.tar.gz"
+S=${WORKDIR}/lxml-${MY_P}
+
+LICENSE="BSD ElementTree GPL-2 PSF-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~mips ppc ppc64 ~riscv s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="+threads"
+RESTRICT="test"
+
+# Note: lib{xml2,xslt} are used as C libraries, not Python modules.
+RDEPEND="
+ !dev-python/lxml[python_targets_python2_7]
+ >=dev-libs/libxml2-2.9.5
+ >=dev-libs/libxslt-1.1.28"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ dev-python/cython[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ "
+
+DISTUTILS_IN_SOURCE_BUILD=1
+
+PATCHES=(
+ "${FILESDIR}"/${MY_PN}-4.5.0-tests-pypy.patch
+)
+
+python_prepare_all() {
+ # avoid replacing PYTHONPATH in tests.
+ sed -i -e '/sys\.path/d' test.py || die
+
+ # don't use some random SDK on Darwin
+ sed -i -e '/_ldflags =/s/=.*isysroot.*darwin.*None/= None/' \
+ setupinfo.py || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_compile() {
+ if ! python_is_python3; then
+ local -x CFLAGS="${CFLAGS} -fno-strict-aliasing"
+ fi
+ tc-export PKG_CONFIG
+ distutils-r1_python_compile
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ rm -r ${D}/usr/share
+}
+
+pkg_postinst() {
+ optfeature "Support for BeautifulSoup as a parser backend" dev-python/beautifulsoup
+ optfeature "Translates CSS selectors to XPath 1.0 expressions" dev-python/cssselect
+}
diff --git a/dev-python/lxml-python2/metadata.xml b/dev-python/lxml-python2/metadata.xml
new file mode 100644
index 000000000000..c43eee29be03
--- /dev/null
+++ b/dev-python/lxml-python2/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <upstream>
+ <remote-id type="pypi">lxml</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/nose/nose-1.3.7-r7.ebuild b/dev-python/nose/nose-1.3.7-r7.ebuild
new file mode 100644
index 000000000000..b0bb6d0a158d
--- /dev/null
+++ b/dev-python/nose/nose-1.3.7-r7.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1
+
+DESCRIPTION="Unittest extension with automatic test suite discovery and easy test authoring"
+HOMEPAGE="
+ https://pypi.org/project/nose/
+ https://nose.readthedocs.io/en/latest/
+ https://github.com/nose-devs/nose"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="coverage examples test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ coverage? (
+ dev-python/coverage[${PYTHON_USEDEP}]
+ )"
+DEPEND="${RDEPEND}
+ test? (
+ dev-python/coverage[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/twisted[${PYTHON_USEDEP}]
+ ' 'python3*')
+ )"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-python-3.5-backport.patch
+
+ # Patch against master found in an upstream PR, backported:
+ # https://github.com/nose-devs/nose/pull/1004
+ "${FILESDIR}"/${P}-coverage-4.1-support.patch
+
+ "${FILESDIR}"/${P}-python-3.6-test.patch
+)
+
+python_prepare_all() {
+ # Tests need to be converted, and they don't respect BUILD_DIR.
+ use test && DISTUTILS_IN_SOURCE_BUILD=1
+
+ # Disable tests requiring network connection.
+ sed \
+ -e "s/test_resolve/_&/g" \
+ -e "s/test_raises_bad_return/_&/g" \
+ -e "s/test_raises_twisted_error/_&/g" \
+ -i unit_tests/test_twisted.py || die "sed failed"
+ # Disable versioning of nosetests script to avoid collision with
+ # versioning performed by the eclass.
+ sed -e "/'nosetests%s = nose:run_exit' % py_vers_tag,/d" \
+ -i setup.py || die "sed2 failed"
+
+ # fix manpage install path
+ sed -i -e 's:man/:share/&:' setup.py || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_compile() {
+ local add_targets=()
+
+ if use test; then
+ add_targets+=( egg_info )
+ python_is_python3 && add_targets+=( build_tests )
+ fi
+
+ distutils-r1_python_compile "${add_targets[@]}"
+}
+
+python_test() {
+ "${EPYTHON}" selftest.py -v || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ use examples && dodoc -r examples
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/olefile/olefile-0.46-r1.ebuild b/dev-python/olefile/olefile-0.46-r1.ebuild
new file mode 100644
index 000000000000..bc5bdc8e8c39
--- /dev/null
+++ b/dev-python/olefile/olefile-0.46-r1.ebuild
@@ -0,0 +1,19 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="Python package to parse, read and write Microsoft OLE2 files"
+HOMEPAGE="https://www.decalage.info/olefile"
+SRC_URI="https://github.com/decalage2/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ppc ppc64 sparc x86 ~amd64-linux ~x86-linux"
+
+distutils_enable_sphinx doc
+distutils_enable_tests unittest
diff --git a/dev-python/pip/pip-20.2.2-r1.ebuild b/dev-python/pip/pip-20.2.2-r1.ebuild
index f97b347d9b1e..21993ed3d9d1 100644
--- a/dev-python/pip/pip-20.2.2-r1.ebuild
+++ b/dev-python/pip/pip-20.2.2-r1.ebuild
@@ -25,7 +25,7 @@ SRC_URI="
# setuptools & wheel .whl files are required for testing, exact version is not very important.
LICENSE="MIT"
-KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ppc ppc64 ~riscv sparc x86"
+KEYWORDS="~alpha amd64 arm ~arm64 hppa ~ia64 ppc ppc64 ~riscv sparc x86"
SLOT="0"
IUSE="test -vanilla"
diff --git a/dev-python/ply-python2/Manifest b/dev-python/ply-python2/Manifest
new file mode 100644
index 000000000000..d81f6c1fe096
--- /dev/null
+++ b/dev-python/ply-python2/Manifest
@@ -0,0 +1 @@
+DIST ply-3.11.tar.gz 159130 BLAKE2B 58c50b9dad445ad83a64aaa8174ed4602b36f5c8df33a7d62590a92388c4a21c9800599c1d4e4db6f02630e8dee4c8482611e26498e4aa8ccdb2cf3453ae1db4 SHA512 37e39a4f930874933223be58a3da7f259e155b75135f1edd47069b3b40e5e96af883ebf1c8a1bbd32f914a9e92cfc12e29fec05cf61b518f46c1d37421b20008
diff --git a/dev-python/ply-python2/files/3.6-picklefile-IOError.patch b/dev-python/ply-python2/files/3.6-picklefile-IOError.patch
new file mode 100644
index 000000000000..85b39494a6fd
--- /dev/null
+++ b/dev-python/ply-python2/files/3.6-picklefile-IOError.patch
@@ -0,0 +1,24 @@
+From f50768b0b2176998675e728d84ac05f0eef19614 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Sun, 17 May 2015 12:14:16 -0400
+Subject: [PATCH] Catch/ignore IOError when opening picklefile for reading in
+ yacc.yacc()
+
+Should resolve #66.
+---
+ ply/yacc.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/ply/yacc.py b/ply/yacc.py
+index eb02cc2..2835c90 100644
+--- a/ply/yacc.py
++++ b/ply/yacc.py
+@@ -3265,6 +3265,8 @@ def yacc(method='LALR', debug=yaccdebug, module=None, tabmodule=tab_module, star
+ errorlog.warning(str(e))
+ except ImportError:
+ pass
++ except IOError:
++ pass
+
+ if debuglog is None:
+ if debug:
diff --git a/dev-python/ply-python2/metadata.xml b/dev-python/ply-python2/metadata.xml
new file mode 100644
index 000000000000..343b2a021172
--- /dev/null
+++ b/dev-python/ply-python2/metadata.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <longdescription>
+PLY is a Python-only implementation of the popular compiler construction
+tools lex and yacc. The implementation borrows ideas from a number of
+previous efforts; most notably John Aycock's SPARK toolkit. However,
+the overall flavor of the implementation is more closely modeled after
+the C version of lex and yacc. The other significant feature of PLY is
+that it provides extensive input validation and error reporting--much
+more so than other Python parsing tools.
+ </longdescription>
+ <longdescription lang="ja">
+PLYはLexとYaccの有名なコンパイラ・コンストラクション・ツールのPython言語実装です
+。この実装は以前の試みから幾つものアイディアを借りています。そのほとんどがJohn AycockのSPARKツールキットからです。しかしながら、実装の全体像はC言語によるLexとYaccにより近いモデルです。PLYの他の重要点は幅広い入力バリデーションとエラー報告を提供する点です。 -- その二点は他のPython言語パーサーより優れています。
+ </longdescription>
+ <upstream>
+ <remote-id type="pypi">ply</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/ply-python2/ply-python2-3.11.ebuild b/dev-python/ply-python2/ply-python2-3.11.ebuild
new file mode 100644
index 000000000000..9b659dea277b
--- /dev/null
+++ b/dev-python/ply-python2/ply-python2-3.11.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+MY_PN=ply
+MY_P=$MY_PN-$PV
+DESCRIPTION="Python Lex-Yacc library"
+HOMEPAGE="https://www.dabeaz.com/ply/ https://pypi.org/project/ply/"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0/$PV"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+RESTRICT="test"
+
+PATCHES=( "${FILESDIR}/3.6-picklefile-IOError.patch" )
+
+RDEPEND="
+ !dev-python/ply[python_targets_python2_7]
+"
+
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+python_install_all() {
+ distutils-r1_python_install_all
+ rm -r ${D}/usr/share
+}
diff --git a/dev-python/pycairo-python2/Manifest b/dev-python/pycairo-python2/Manifest
new file mode 100644
index 000000000000..131b894f4cab
--- /dev/null
+++ b/dev-python/pycairo-python2/Manifest
@@ -0,0 +1 @@
+DIST pycairo-1.18.2.tar.gz 200462 BLAKE2B 1f755dc90fe3ee50aa68273a0816752312f144831ff857709e1a4695a58646ffe6be518733480ed37231c213a11d4e5aaf8dfd1cfa68104873bc7d4192435b89 SHA512 279ea80413ba55d493d51455685da09afa1f5c45e2930c3fca3e417a8afe6645a0d8131201f79482de59e5ec56cfef62eac65ed88fe88866bfcc06503dcc59e0
diff --git a/dev-python/pycairo-python2/files/pycairo-1.19.1-py39.patch b/dev-python/pycairo-python2/files/pycairo-1.19.1-py39.patch
new file mode 100644
index 000000000000..97b20227ce8b
--- /dev/null
+++ b/dev-python/pycairo-python2/files/pycairo-1.19.1-py39.patch
@@ -0,0 +1,26 @@
+From 3ecf0a4060d6de3b92a77a393ece663455cf6add Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+Date: Sun, 10 May 2020 11:22:40 +0200
+Subject: [PATCH] tests: Fix syntax issue with Python 3.9
+
+https://bugs.python.org/issue40246
+
+I haven't actually tested with 3.9 yet, so this is just what I found
+with grep.
+---
+ tests/test_enums.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_enums.py b/tests/test_enums.py
+index 4bc2e3d..02756d0 100644
+--- a/tests/test_enums.py
++++ b/tests/test_enums.py
+@@ -79,7 +79,7 @@ def get_prefix(t):
+ # special case..
+ if name == "PathDataType":
+ name = "Path"
+- return"_".join([s.upper() for s in re.findall('[A-Z][^A-Z]*', name)])
++ return "_".join([s.upper() for s in re.findall('[A-Z][^A-Z]*', name)])
+
+ for t in types_:
+ for name in dir(t):
diff --git a/dev-python/pycairo-python2/metadata.xml b/dev-python/pycairo-python2/metadata.xml
new file mode 100644
index 000000000000..738be6193a4f
--- /dev/null
+++ b/dev-python/pycairo-python2/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/pycairo-python2/pycairo-python2-1.18.2.ebuild b/dev-python/pycairo-python2/pycairo-python2-1.18.2.ebuild
new file mode 100644
index 000000000000..979d581a7e54
--- /dev/null
+++ b/dev-python/pycairo-python2/pycairo-python2-1.18.2.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+PYTHON_COMPAT=( python2_7 )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1
+
+MY_PN=pycairo
+MY_P=$MY_PN-$PV
+DESCRIPTION="Python bindings for the cairo library"
+HOMEPAGE="https://www.cairographics.org/pycairo/ https://github.com/pygobject/pycairo"
+SRC_URI="https://github.com/pygobject/${MY_PN}/releases/download/v${PV}/${MY_P}.tar.gz"
+
+LICENSE="|| ( LGPL-2.1 MPL-1.1 )"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~mips ppc ppc64 s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
+IUSE=""
+RESTRICT="test"
+
+RDEPEND="
+ !dev-python/${MY_PN}[python_targets_python2_7]
+ >=x11-libs/cairo-1.13.1[svg]
+"
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+distutils_enable_sphinx docs \
+ dev-python/sphinx_rtd_theme
+distutils_enable_tests setup.py
+
+python_install() {
+ distutils-r1_python_install \
+ install_pkgconfig --pkgconfigdir="${EPREFIX}/usr/$(get_libdir)/pkgconfig"
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ rm -r ${D}/usr/share
+ rm -r ${D}/usr/lib*/pkgconfig
+ rm -r ${D}/usr/include
+}
diff --git a/dev-python/pycparser-python2/Manifest b/dev-python/pycparser-python2/Manifest
new file mode 100644
index 000000000000..5ec1265d1176
--- /dev/null
+++ b/dev-python/pycparser-python2/Manifest
@@ -0,0 +1 @@
+DIST pycparser-2.20.tar.gz 161330 BLAKE2B 9a114e4b73e6c3c495bd78c393957146ec425eb5b15d72266cbf424f15e8d2e2e6402ef36d60a9dff41b393aab80fe1356befd25549517f398e129836a76b037 SHA512 ff0853c9f981b43b4f2e879350715c07b02cf9dab223d4980d8fe0a3138c98041b5f848a9355ae4f1cb45e7f137c03a88843008e18d77af9250e0d9c55f5ca1b
diff --git a/dev-python/pycparser-python2/metadata.xml b/dev-python/pycparser-python2/metadata.xml
new file mode 100644
index 000000000000..3ce313a73023
--- /dev/null
+++ b/dev-python/pycparser-python2/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <upstream>
+ <remote-id type="pypi">pycparser</remote-id>
+ <remote-id type="github">eliben/pycparser</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/pycparser-python2/pycparser-python2-2.20.ebuild b/dev-python/pycparser-python2/pycparser-python2-2.20.ebuild
new file mode 100644
index 000000000000..1c7e54e380ea
--- /dev/null
+++ b/dev-python/pycparser-python2/pycparser-python2-2.20.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+MY_PN=pycparser
+MY_P=$MY_PN-$PV
+DESCRIPTION="C parser and AST generator written in Python"
+HOMEPAGE="https://github.com/eliben/pycparser"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+RESTRICT="test"
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+RDEPEND="
+ !dev-python/${MY_PN}[python_targets_python2_7]
+ dev-python/ply-python2:=[${PYTHON_USEDEP}]"
+BDEPEND="${RDEPEND}
+ dev-python/setuptools[${PYTHON_USEDEP}]"
+
+python_prepare_all() {
+ # remove the original files to guarantee their regen
+ rm pycparser/{c_ast,lextab,yacctab}.py || die
+
+ # kill sys.path manipulations to force the tests to use built files
+ sed -i -e '/sys\.path/d' tests/*.py || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_compile() {
+ distutils-r1_python_compile
+
+ # note: tables built by py3.5+ are incompatible with older versions
+ # because of 100 group limit of 're' module -- just generate them
+ # separately optimized for each target instead
+ pushd "${BUILD_DIR}"/lib/pycparser > /dev/null || die
+ "${PYTHON}" _build_tables.py || die
+ popd > /dev/null || die
+}
+
+python_install() {
+ distutils-r1_python_install
+
+ # setup.py generates {c_ast,lextab,yacctab}.py with bytecode disabled.
+ python_optimize
+ rm -r ${D}/usr/share
+}
diff --git a/dev-python/pygame_sdl2/pygame_sdl2-7.3.5-r2.ebuild b/dev-python/pygame_sdl2/pygame_sdl2-7.3.5-r2.ebuild
new file mode 100644
index 000000000000..e8153698796c
--- /dev/null
+++ b/dev-python/pygame_sdl2/pygame_sdl2-7.3.5-r2.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} )
+inherit distutils-r1
+
+PYSDL="${PN}-2.1.0"
+
+DESCRIPTION="Reimplementation of portions of the pygame API using SDL2"
+HOMEPAGE="https://github.com/renpy/pygame_sdl2"
+SRC_URI="https://www.renpy.org/dl/${PV}/${PYSDL}-for-renpy-${PV}.tar.gz"
+
+LICENSE="LGPL-2.1 ZLIB"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+BDEPEND="
+ dev-python/cython[${PYTHON_USEDEP}]"
+DEPEND="
+ dev-python/numpy[${PYTHON_USEDEP}]
+ media-libs/libpng:0=
+ media-libs/libsdl2:=[video]
+ media-libs/sdl2-image:=[png,jpeg]
+ >=media-libs/sdl2-mixer-2.0.2:=
+ media-libs/sdl2-ttf:=
+ virtual/jpeg:0"
+RDEPEND="${DEPEND}"
+
+S=${WORKDIR}/${PYSDL}-for-renpy-${PV}
+
+# PyGame distribution for this version has some pregenerated files;
+# we need to remove them
+python_prepare_all()
+{
+ rm -r gen{,3} || die
+ distutils-r1_python_prepare_all
+}
diff --git a/dev-python/pykerberos/pykerberos-1.3.0-r1.ebuild b/dev-python/pykerberos/pykerberos-1.3.0-r1.ebuild
new file mode 100644
index 000000000000..c44975f719af
--- /dev/null
+++ b/dev-python/pykerberos/pykerberos-1.3.0-r1.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+PYTHON_COMPAT=( python3_{5,6,7,8,9} )
+inherit distutils-r1
+
+MY_P=PyKerberos-${PV}
+DESCRIPTION="A high-level Python wrapper for Kerberos/GSSAPI operations"
+HOMEPAGE="
+ https://trac.calendarserver.org/wiki/PyKerberos
+ https://github.com/apple/ccs-pykerberos/
+ https://pypi.org/project/kerberos/"
+SRC_URI="
+ https://github.com/apple/ccs-pykerberos/archive/${MY_P}.tar.gz"
+S=${WORKDIR}/ccs-pykerberos-${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~hppa ~ppc64 x86"
+# test environment is non-trivial to set up, so just use docker
+# (see python_test below)
+# also for alpha/beta Python releases support:
+# https://github.com/apple/ccs-pykerberos/pull/83/commits/5f1130a1305b5f6e7d7d8b41067c4713f0c8950f
+RESTRICT="test"
+
+RDEPEND="app-crypt/mit-krb5"
+DEPEND="${RDEPEND}"
+
+python_test() {
+ set -- docker run \
+ -v "${PWD}:/app" \
+ -w /app \
+ -e PYENV=$("${EPYTHON}" -c 'import sys; print(sys.version.split()[0])') \
+ -e KERBEROS_USERNAME=administrator \
+ -e KERBEROS_PASSWORD=Password01 \
+ -e KERBEROS_REALM=example.com \
+ -e KERBEROS_PORT=80 \
+ ubuntu:16.04 \
+ /bin/bash .travis.sh
+ echo "${@}" >&2
+ "${@}" || die "Tests failed with ${EPYTHON}"
+}
diff --git a/dev-python/pylast/pylast-3.3.0.ebuild b/dev-python/pylast/pylast-3.3.0.ebuild
index d9a72e962865..468a83e39f04 100644
--- a/dev-python/pylast/pylast-3.3.0.ebuild
+++ b/dev-python/pylast/pylast-3.3.0.ebuild
@@ -13,7 +13,7 @@ SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc x86"
+KEYWORDS="amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc x86"
RDEPEND="dev-python/six[${PYTHON_USEDEP}]"
BDEPEND="
diff --git a/dev-python/pymongo/pymongo-3.11.0-r1.ebuild b/dev-python/pymongo/pymongo-3.11.0-r1.ebuild
new file mode 100644
index 000000000000..a8c88ad54b45
--- /dev/null
+++ b/dev-python/pymongo/pymongo-3.11.0-r1.ebuild
@@ -0,0 +1,112 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{5,6,7,8,9} )
+inherit check-reqs distutils-r1
+
+DESCRIPTION="Python driver for MongoDB"
+HOMEPAGE="https://github.com/mongodb/mongo-python-driver https://pypi.org/project/pymongo/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 ~hppa x86"
+IUSE="doc kerberos test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ kerberos? ( dev-python/pykerberos[${PYTHON_USEDEP}] )
+"
+BDEPEND="
+ test? (
+ >=dev-db/mongodb-2.6.0
+ dev-python/nose[${PYTHON_USEDEP}]
+ )
+"
+DISTUTILS_IN_SOURCE_BUILD=1
+
+distutils_enable_sphinx doc
+
+reqcheck() {
+ if use test; then
+ # During the tests, database size reaches 1.5G.
+ local CHECKREQS_DISK_BUILD=1536M
+
+ check-reqs_${1}
+ fi
+}
+
+pkg_pretend() {
+ reqcheck pkg_pretend
+}
+
+pkg_setup() {
+ reqcheck pkg_setup
+}
+
+src_prepare() {
+ # network-sandbox probably
+ rm test/test_srv_polling.py || die
+ sed -e 's:test_connection_timeout_ms_propagates_to_DNS_resolver:_&:' \
+ -i test/test_client.py || die
+ # relies on exact exception message
+ sed -e 's:abstract methods:abstract:' \
+ -i test/test_custom_types.py || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ # Yes, we need TCP/IP for that...
+ local DB_IP=127.0.0.1
+ local DB_PORT=27000
+
+ export DB_IP DB_PORT
+
+ local dbpath=${TMPDIR}/mongo.db
+ local logpath=${TMPDIR}/mongod.log
+
+ # Now, the hard part: we need to find a free port for mongod.
+ # We're just trying to run it random port numbers and check the log
+ # for bind errors. It shall be noted that 'mongod --fork' does not
+ # return failure when it fails to bind.
+
+ mkdir -p "${dbpath}" || die
+ while true; do
+ ebegin "Trying to start mongod on port ${DB_PORT}"
+
+ LC_ALL=C \
+ mongod --dbpath "${dbpath}" --nojournal \
+ --bind_ip ${DB_IP} --port ${DB_PORT} \
+ --unixSocketPrefix "${TMPDIR}" \
+ --logpath "${logpath}" --fork \
+ && sleep 2
+
+ # Now we need to check if the server actually started...
+ if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then
+ # yay!
+ eend 0
+ break
+ elif grep -q 'Address already in use' "${logpath}"; then
+ # ay, someone took our port!
+ eend 1
+ : $(( DB_PORT += 1 ))
+ continue
+ else
+ eend 1
+ eerror "Unable to start mongod for tests. See the server log:"
+ eerror " ${logpath}"
+ die "Unable to start mongod for tests."
+ fi
+ done
+
+ local failed
+ DB_PORT2=$(( DB_PORT + 1 )) DB_PORT3=$(( DB_PORT + 2 )) esetup.py test || failed=1
+
+ mongod --dbpath "${dbpath}" --shutdown || die
+
+ [[ ${failed} ]] && die "Tests fail with ${EPYTHON}"
+
+ rm -rf "${dbpath}" || die
+}
diff --git a/dev-python/pyopengl-python2/Manifest b/dev-python/pyopengl-python2/Manifest
new file mode 100644
index 000000000000..a8086067009d
--- /dev/null
+++ b/dev-python/pyopengl-python2/Manifest
@@ -0,0 +1 @@
+DIST PyOpenGL-3.1.0.tar.gz 1172688 BLAKE2B 9865a10e8b5d2756192077b4b079658c680b9f47bdaccb33285fb1942bc678b29f6a69359a1486ec023b1a73d714a7e0209b2f57776fe8b5e4a5e2d0803dba4f SHA512 f748017ab3734c7672c3fdbedcea80df297a91a78b111533e260feb0868ebb02935666c041f77db03841ee8f90057d9c53c53b00b097aae4cf67a52c7fc9c2eb
diff --git a/dev-python/pyopengl-python2/metadata.xml b/dev-python/pyopengl-python2/metadata.xml
new file mode 100644
index 000000000000..f4f0c3038702
--- /dev/null
+++ b/dev-python/pyopengl-python2/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <upstream>
+ <remote-id type="pypi">PyOpenGL</remote-id>
+ <remote-id type="sourceforge">pyopengl</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/pyopengl-python2/pyopengl-python2-3.1.0.ebuild b/dev-python/pyopengl-python2/pyopengl-python2-3.1.0.ebuild
new file mode 100644
index 000000000000..9c4029747bea
--- /dev/null
+++ b/dev-python/pyopengl-python2/pyopengl-python2-3.1.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+ORIG_PN=pyopengl
+MY_PN="PyOpenGL"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="Python OpenGL bindings"
+HOMEPAGE="https://sourceforge.net/projects/pyopengl/ https://pypi.org/project/PyOpenGL/"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+# mirror://sourceforge/pyopengl/${MY_P}.tar.gz" # broken mirror for this release
+LICENSE="BSD"
+
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~mips ppc ppc64 sparc x86 ~amd64-linux ~x86-linux"
+RESTRICT="test"
+IUSE=""
+
+RDEPEND="
+ !dev-python/${ORIG_PN}[python_targets_python2_7]
+ media-libs/freeglut
+ virtual/opengl
+ x11-libs/libXi
+ x11-libs/libXmu"
+DEPEND="${RDEPEND}
+ dev-python/setuptools[${PYTHON_USEDEP}]"
+
+S="${WORKDIR}/${MY_P}"
diff --git a/dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0.ebuild b/dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0-r1.ebuild
index 6803698451f3..64785748fb74 100644
--- a/dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0.ebuild
+++ b/dev-python/pyopenssl-python2/pyopenssl-python2-19.1.0-r1.ebuild
@@ -27,7 +27,7 @@ RESTRICT="test"
RDEPEND="
!dev-python/pyopenssl[python_targets_python2_7]
- >=dev-python/six-1.5.2[${PYTHON_USEDEP}]
+ >=dev-python/six-python2-1.5.2[${PYTHON_USEDEP}]
dev-python/cryptography-python2"
DEPEND="${RDEPEND}"
diff --git a/dev-python/pyyaml/pyyaml-5.3.1-r1.ebuild b/dev-python/pyyaml/pyyaml-5.3.1-r1.ebuild
new file mode 100644
index 000000000000..c49e6d472722
--- /dev/null
+++ b/dev-python/pyyaml/pyyaml-5.3.1-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DISTUTILS_USE_SETUPTOOLS=no
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="YAML parser and emitter for Python"
+HOMEPAGE="https://pyyaml.org/wiki/PyYAML
+ https://pypi.org/project/PyYAML/
+ https://github.com/yaml/pyyaml"
+SRC_URI="https://github.com/yaml/pyyaml/archive/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris"
+IUSE="examples +libyaml"
+
+RDEPEND="libyaml? ( dev-libs/libyaml:= )"
+DEPEND="${RDEPEND}
+ libyaml? (
+ $(python_gen_cond_dep '
+ dev-python/cython[${PYTHON_USEDEP}]
+ ' 'python*')
+ )"
+
+PATCHES=(
+ # bug #659348
+ "${FILESDIR}/pyyaml-5.1-cve-2017-18342.patch"
+)
+
+distutils_enable_tests setup.py
+
+python_configure_all() {
+ mydistutilsargs=( $(use_with libyaml) )
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ if use examples; then
+ dodoc -r examples
+ docompress -x /usr/share/doc/${PF}
+ fi
+}
diff --git a/dev-python/ruamel-yaml-clib/ruamel-yaml-clib-0.2.2.ebuild b/dev-python/ruamel-yaml-clib/ruamel-yaml-clib-0.2.2.ebuild
index d694c173f771..5f1c41620b8a 100644
--- a/dev-python/ruamel-yaml-clib/ruamel-yaml-clib-0.2.2.ebuild
+++ b/dev-python/ruamel-yaml-clib/ruamel-yaml-clib-0.2.2.ebuild
@@ -17,7 +17,7 @@ SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
RDEPEND="!<dev-python/ruamel-yaml-0.16.0"
diff --git a/dev-python/ruamel-yaml/ruamel-yaml-0.16.12.ebuild b/dev-python/ruamel-yaml/ruamel-yaml-0.16.12.ebuild
index f636ed8252aa..a3a9c437971b 100644
--- a/dev-python/ruamel-yaml/ruamel-yaml-0.16.12.ebuild
+++ b/dev-python/ruamel-yaml/ruamel-yaml-0.16.12.ebuild
@@ -17,7 +17,7 @@ SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
RDEPEND="dev-python/ruamel-yaml-clib[${PYTHON_USEDEP}]"
diff --git a/dev-python/selenium/selenium-3.141.0-r1.ebuild b/dev-python/selenium/selenium-3.141.0-r1.ebuild
index 9ff997888df8..2322b7ec06d8 100644
--- a/dev-python/selenium/selenium-3.141.0-r1.ebuild
+++ b/dev-python/selenium/selenium-3.141.0-r1.ebuild
@@ -16,7 +16,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz
-> ${P}.gh.tar.gz
)"
-KEYWORDS="~alpha amd64 arm arm64 ~ia64 ppc ppc64 ~riscv sparc x86"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ppc ppc64 ~riscv sparc x86"
LICENSE="Apache-2.0"
SLOT="0"
diff --git a/dev-python/setproctitle/setproctitle-1.1.10-r1.ebuild b/dev-python/setproctitle/setproctitle-1.1.10-r1.ebuild
index 93d8f03a5bab..b11dc2ba4dc4 100644
--- a/dev-python/setproctitle/setproctitle-1.1.10-r1.ebuild
+++ b/dev-python/setproctitle/setproctitle-1.1.10-r1.ebuild
@@ -12,7 +12,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~ia64 ppc ppc64 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ppc ppc64 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
python_configure_all() {
2to3 -w --no-diffs tests || die
diff --git a/dev-python/six-python2/Manifest b/dev-python/six-python2/Manifest
new file mode 100644
index 000000000000..0317468df3ef
--- /dev/null
+++ b/dev-python/six-python2/Manifest
@@ -0,0 +1 @@
+DIST six-1.15.0.tar.gz 33917 BLAKE2B 57e852b6c35dd19e256814c0371cfbc26141b0f25a31f79a1cbd1b0cdd7d3cacf1236b96f5452f968cc426e6dff4d1ad70a9f2432bc361ba3c8c17fd40fe7582 SHA512 eb840ac17f433f1fc4af56de75cfbfe0b54e6a737bb23c453bf09a4a13d768d153e46064880dc763f4c5cc2785b78ea6d3d3b4a41fed181cb9064837e3f699a9
diff --git a/dev-python/six-python2/metadata.xml b/dev-python/six-python2/metadata.xml
new file mode 100644
index 000000000000..1df82de81e96
--- /dev/null
+++ b/dev-python/six-python2/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <stabilize-allarches/>
+ <upstream>
+ <remote-id type="pypi">six</remote-id>
+ <remote-id type="github">benjaminp/six</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/six-python2/six-python2-1.15.0.ebuild b/dev-python/six-python2/six-python2-1.15.0.ebuild
new file mode 100644
index 000000000000..16859ad0a96b
--- /dev/null
+++ b/dev-python/six-python2/six-python2-1.15.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+MY_PN=six
+MY_P=$MY_PN-$PV
+DESCRIPTION="Python 2 and 3 compatibility library"
+HOMEPAGE="https://github.com/benjaminp/six https://pypi.org/project/six/"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+RESTRICT="test"
+
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+RDEPEND="
+ !dev-python/six[python_targets_python2_7]
+"
+
+distutils_enable_sphinx documentation --no-autodoc
+
+python_install_all() {
+ distutils-r1_python_install_all
+ rm -r ${D}/usr/share
+}
diff --git a/dev-python/soaplib/soaplib-1.0.0-r3.ebuild b/dev-python/soaplib/soaplib-1.0.0-r4.ebuild
index dfd908865447..b0ec1736be3b 100644
--- a/dev-python/soaplib/soaplib-1.0.0-r3.ebuild
+++ b/dev-python/soaplib/soaplib-1.0.0-r4.ebuild
@@ -17,7 +17,7 @@ KEYWORDS="~amd64 ~x86"
IUSE="examples"
RDEPEND="
- dev-python/lxml
+ dev-python/lxml-python2
dev-python/pytz-python2
"
DEPEND="${RDEPEND}
diff --git a/dev-python/sphinx-aiohttp-theme/sphinx-aiohttp-theme-0.1.6.ebuild b/dev-python/sphinx-aiohttp-theme/sphinx-aiohttp-theme-0.1.6.ebuild
index c4d16dd8b120..d33342f69029 100644
--- a/dev-python/sphinx-aiohttp-theme/sphinx-aiohttp-theme-0.1.6.ebuild
+++ b/dev-python/sphinx-aiohttp-theme/sphinx-aiohttp-theme-0.1.6.ebuild
@@ -15,7 +15,7 @@ SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~riscv ~sparc x86"
+KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~sparc x86"
IUSE=""
RDEPEND="dev-python/sphinx[${PYTHON_USEDEP}]"
diff --git a/dev-python/sphinx-testing/sphinx-testing-1.0.1-r1.ebuild b/dev-python/sphinx-testing/sphinx-testing-1.0.1-r1.ebuild
index 178435c21f6f..bf87519b4141 100644
--- a/dev-python/sphinx-testing/sphinx-testing-1.0.1-r1.ebuild
+++ b/dev-python/sphinx-testing/sphinx-testing-1.0.1-r1.ebuild
@@ -12,7 +12,7 @@ SRC_URI="mirror://pypi/${P:0:1}/${PN}/${P}.tar.gz"
LICENSE="BSD-2"
SLOT="0"
-KEYWORDS="~alpha amd64 ~arm arm64 ~ia64 ~ppc ~ppc64 ~sparc x86"
+KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-python/sphinxcontrib-newsfeed/sphinxcontrib-newsfeed-0.1.4.ebuild b/dev-python/sphinxcontrib-newsfeed/sphinxcontrib-newsfeed-0.1.4.ebuild
index c5a43a34ccc0..a75d08c9c9c1 100644
--- a/dev-python/sphinxcontrib-newsfeed/sphinxcontrib-newsfeed-0.1.4.ebuild
+++ b/dev-python/sphinxcontrib-newsfeed/sphinxcontrib-newsfeed-0.1.4.ebuild
@@ -12,7 +12,7 @@ SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="BSD-2"
SLOT="0"
-KEYWORDS="~alpha amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux"
+KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux"
IUSE="examples"
DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
diff --git a/dev-python/verboselogs/verboselogs-1.7.ebuild b/dev-python/verboselogs/verboselogs-1.7.ebuild
index 701e6ed85c44..007d0f1dcf41 100644
--- a/dev-python/verboselogs/verboselogs-1.7.ebuild
+++ b/dev-python/verboselogs/verboselogs-1.7.ebuild
@@ -3,7 +3,7 @@
EAPI=7
-PYTHON_COMPAT=( python3_{5,6,7,8,9} )
+PYTHON_COMPAT=( python3_{5,6,7,8,9} pypy3 )
inherit distutils-r1
diff --git a/dev-python/wxpython2/Manifest b/dev-python/wxpython2/Manifest
new file mode 100644
index 000000000000..00c2abfef9e6
--- /dev/null
+++ b/dev-python/wxpython2/Manifest
@@ -0,0 +1 @@
+DIST wxPython-src-3.0.2.0.tar.bz2 58304944 BLAKE2B 1144acf2cfa0a18aa2f90aabe81aaeca54d3fe6139818267dbc031accbae38035478a64ec084fe8bb8b89126fb70ff96e68981026df8ad3fc82e81c6d0e22d1a SHA512 a3798e89ff19344253aac7d771971e519f7fa9723e82bd97e98f16fd7f1572e513170b02295b872dae0b1ae3fa95efc4ef34d078045b839694b4fdad3a27c9e4
diff --git a/dev-python/wxpython2/files/wxpython-2.8-no-preservatives-added.patch b/dev-python/wxpython2/files/wxpython-2.8-no-preservatives-added.patch
new file mode 100644
index 000000000000..5e4221d51506
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-2.8-no-preservatives-added.patch
@@ -0,0 +1,16 @@
+Portage preserve-libs removes the linker name (.so) of a library but leaves
+the soname (.so.4) and realname (.so.4.0) installed. findLib searches for
+mywxlibname.* and returns true if anything is found. Disaster ensues.
+
+
+--- a/wxPython/config.py
++++ b/wxPython/config.py
+@@ -612,7 +612,7 @@ def findLib(name, libdirs):
+ dirs = libdirs[:]
+ for d in dirs:
+ p = os.path.join(d, name)
+- if glob.glob(p+'*') != []:
++ if glob.glob(p+'*.so') != []:
+ return True
+ return False
+
diff --git a/dev-python/wxpython2/files/wxpython-2.8.11-drop-editra.patch b/dev-python/wxpython2/files/wxpython-2.8.11-drop-editra.patch
new file mode 100644
index 000000000000..9555bb57ef44
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-2.8.11-drop-editra.patch
@@ -0,0 +1,48 @@
+--- a/wxPython/setup.py
++++ b/wxPython/setup.py
+@@ -887,13 +887,6 @@ WX_PKGLIST = [ 'wx',
+ 'wx.tools',
+ 'wx.tools.XRCed',
+ 'wx.tools.XRCed.plugins',
+- 'wx.tools.Editra',
+- 'wx.tools.Editra.src',
+- 'wx.tools.Editra.src.autocomp',
+- 'wx.tools.Editra.src.eclib',
+- 'wx.tools.Editra.src.ebmlib',
+- 'wx.tools.Editra.src.extern',
+- 'wx.tools.Editra.src.syntax',
+ ]
+
+ if not EGGing:
+@@ -920,7 +913,6 @@ else:
+ opj('scripts/pywrap'),
+ opj('scripts/pywxrc'),
+ opj('scripts/xrced'),
+- opj('scripts/editra'),
+ ]
+ if os.name == 'nt':
+ SCRIPTS.append( opj('scripts/genaxmodule') )
+@@ -934,15 +926,6 @@ DATA_FILES += find_data_files('wx/tools/XRCed', '*.txt', '*.xrc', '*.htb')
+ DATA_FILES += find_data_files('wx/tools/XRCed/plugins', '*.crx')
+ DATA_FILES += find_data_files('wx/tools/XRCed/plugins/bitmaps', '*.png')
+
+-DATA_FILES += find_data_files('wx/tools/Editra/docs', '*.txt')
+-DATA_FILES += find_data_files('wx/tools/Editra/locale', '*.mo')
+-DATA_FILES += find_data_files('wx/tools/Editra/pixmaps',
+- '*.png', '*.icns', '*.ico', 'README', 'AUTHORS', 'COPYING')
+-DATA_FILES += find_data_files('wx/tools/Editra/plugins', '*.egg')
+-DATA_FILES += find_data_files('wx/tools/Editra/src', 'README')
+-DATA_FILES += find_data_files('wx/tools/Editra/styles', '*.ess')
+-DATA_FILES += find_data_files('wx/tools/Editra/tests/syntax', '*')
+-DATA_FILES += find_data_files('wx/tools/Editra', '[A-Z]*', recursive=False)
+
+
+ ## import pprint
+@@ -993,7 +976,6 @@ if EGGing:
+ 'pyshell = wx.py.PyShell:main',
+ 'pywrap = wx.py.PyWrap:main',
+ 'helpviewer = wx.tools.helpviewer:main',
+- 'editra = wx.tools.Editra.launcher:main',
+ 'xrced = wx.tools.XRCed.xrced:main',
+ ],
+ },
diff --git a/dev-python/wxpython2/files/wxpython-2.8.12.1-disable-egging-mode.patch b/dev-python/wxpython2/files/wxpython-2.8.12.1-disable-egging-mode.patch
new file mode 100644
index 000000000000..1497a2c70761
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-2.8.12.1-disable-egging-mode.patch
@@ -0,0 +1,34 @@
+From c4072ed7bc923039e544319f52d0761b7a4600a4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Mon, 22 Apr 2013 18:02:37 +0200
+Subject: [PATCH] Trigger 'EGGing' mode only by 'bdist_egg' and not 'egg_info'.
+
+We use the 'egg_info' command to explicitly enforce temporary EGG file
+location outside the source tree on Gentoo. As a result, our build
+command activates the 'EGGing' mode and wxPython is not installed
+properly.
+
+I believe that the 'EGGing' mode should be activated only by an explicit
+call to 'bdist_egg' command where the expected files are actually
+created. The 'egg_info' command is a more broad one and is often used
+implicitly, e.g. by the 'install' command.
+---
+ config.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/config.py b/config.py
+index 4fbd83f..b45707d 100644
+--- a/config.py
++++ b/config.py
+@@ -23,7 +23,7 @@
+ import sys, os, glob, fnmatch, tempfile
+ import subprocess
+
+-EGGing = 'bdist_egg' in sys.argv or 'egg_info' in sys.argv
++EGGing = 'bdist_egg' in sys.argv
+ if not EGGing:
+ from distutils.core import setup, Extension
+ else:
+--
+1.8.1.5
+
diff --git a/dev-python/wxpython2/files/wxpython-3.0-wxversion-demo.patch b/dev-python/wxpython2/files/wxpython-3.0-wxversion-demo.patch
new file mode 100644
index 000000000000..a4f6b0b07a3c
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-3.0-wxversion-demo.patch
@@ -0,0 +1,10 @@
+--- demo/demo.org
++++ demo/demo.py
+@@ -1,4 +1,7 @@
+ #!/usr/bin/env python
+
++import wxversion
++wxversion.select("3.0")
++
+ import Main
+ Main.main()
diff --git a/dev-python/wxpython2/files/wxpython-3.0.0.0-wxversion-scripts.patch b/dev-python/wxpython2/files/wxpython-3.0.0.0-wxversion-scripts.patch
new file mode 100644
index 000000000000..9f0cb8922267
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-3.0.0.0-wxversion-scripts.patch
@@ -0,0 +1,211 @@
+--- a/distrib/PyAlaMode.desktop
++++ b/distrib/PyAlaMode.desktop
+@@ -1,8 +1,8 @@
+ [Desktop Entry]
+-Name=PyAlaMode
++Name=PyAlaMode (3.0)
+ Comment=GUI Python Shell with Filling and editor windows
+-Exec=pyalamode
+-Icon=PyCrust
++Exec=pyalamode-3.0
++Icon=PyCrust-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/distrib/PyCrust.desktop
++++ b/distrib/PyCrust.desktop
+@@ -1,8 +1,8 @@
+ [Desktop Entry]
+-Name=PyCrust
++Name=PyCrust (3.0)
+ Comment=GUI Python Shell with Filling
+-Exec=pycrust
+-Icon=PyCrust
++Exec=pycrust-3.0
++Icon=PyCrust-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/distrib/PyShell.desktop
++++ b/distrib/PyShell.desktop
+@@ -1,8 +1,8 @@
+ [Desktop Entry]
+-Name=PyShell
++Name=PyShell (3.0)
+ Comment=GUI Python Shell
+-Exec=pyshell
+-Icon=PyCrust
++Exec=pyshell-3.0
++Icon=PyCrust-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/distrib/PySlices.desktop
++++ b/distrib/PySlices.desktop
+@@ -1,8 +1,8 @@
+ [Desktop Entry]
+-Name=PySlices
++Name=PySlices (3.0)
+ Comment=GUI Python Shell with Filling
+-Exec=pyslices
+-Icon=PySlices
++Exec=pyslices-3.0
++Icon=PySlices-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/distrib/PySlicesShell.desktop
++++ b/distrib/PySlicesShell.desktop
+@@ -1,9 +1,8 @@
+-
+ [Desktop Entry]
+-Name=PySlicesShell
++Name=PySlicesShell (3.0)
+ Comment=GUI Python Shell
+-Exec=pysliceshell
+-Icon=PySlices
++Exec=pysliceshell-3.0
++Icon=PySlices-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/distrib/XRCed.desktop
++++ b/distrib/XRCed.desktop
+@@ -1,8 +1,8 @@
+ [Desktop Entry]
+-Name=XRCed
++Name=XRCed (3.0)
+ Comment=wxPython XRC resource editor
+-Exec=xrced
+-Icon=XRCed
++Exec=xrced-3.0
++Icon=XRCed-3.0
+ Terminal=false
+ Type=Application
+ Categories=Development;
+--- a/scripts/genaxmodule
++++ b/scripts/genaxmodule
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.genaxmodule import main
+ main()
+--- a/scripts/helpviewer
++++ b/scripts/helpviewer
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.helpviewer import main
+ main()
+--- a/scripts/img2png
++++ b/scripts/img2png
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.img2png import main
+ main()
+--- a/scripts/img2py
++++ b/scripts/img2py
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.img2py import main
+ main()
+--- a/scripts/img2xpm
++++ b/scripts/img2xpm
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.img2xpm import main
+ main()
+--- a/scripts/pyalacarte
++++ b/scripts/pyalacarte
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PyAlaCarte import main
+ main()
+--- a/scripts/pyalamode
++++ b/scripts/pyalamode
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PyAlaMode import main
+ main()
+--- a/scripts/pycrust
++++ b/scripts/pycrust
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PyCrust import main
+ main()
+--- a/scripts/pyshell
++++ b/scripts/pyshell
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PyShell import main
+ main()
+--- a/scripts/pyslices
++++ b/scripts/pyslices
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PySlices import main
+ main()
+--- a/scripts/pysliceshell
++++ b/scripts/pysliceshell
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PySlicesShell import main
+ main()
+--- a/scripts/pywrap
++++ b/scripts/pywrap
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.py.PyWrap import main
+ main()
+--- a/scripts/pywxrc
++++ b/scripts/pywxrc
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.pywxrc import main
+ main()
+--- a/scripts/xrced
++++ b/scripts/xrced
+@@ -1,4 +1,6 @@
+ #!/usr/bin/env python
++import wxversion
++wxversion.select("3.0")
+
+ from wx.tools.XRCed.xrced import main
+ main()
diff --git a/dev-python/wxpython2/files/wxpython-4.0.6-no-webkit.patch b/dev-python/wxpython2/files/wxpython-4.0.6-no-webkit.patch
new file mode 100644
index 000000000000..795de3a933ff
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-4.0.6-no-webkit.patch
@@ -0,0 +1,27 @@
+diff -ru wxPython-4.0.5-orig/wscript wxPython-4.0.5/wscript
+--- wxPython-4.0.5-orig/wscript 2019-05-18 22:03:12.000000000 -0400
++++ wxPython-4.0.5/wscript 2019-05-22 07:59:46.522966555 -0400
+@@ -230,15 +230,6 @@
+ uselib_store='WXGL', mandatory=True,
+ msg='Finding libs for WXGL')
+
+- if cfg.checkSetup(wxConfigDir, 'wxUSE_WEBVIEW'):
+- wv_libs = '--libs webview,core,net'
+- else:
+- wv_libs = '--libs core,net'
+- conf.check_cfg(path=conf.options.wx_config, package='',
+- args='--cxxflags ' + wv_libs + rpath,
+- uselib_store='WXWEBVIEW', mandatory=True,
+- msg='Finding libs for WXWEBVIEW')
+-
+ if isDarwin:
+ conf.check_cfg(path=conf.options.wx_config, package='',
+ args='--cxxflags --libs core,net' + rpath,
+@@ -591,7 +582,6 @@
+ makeETGRule(bld, 'etg/_stc.py', '_stc', 'WXSTC')
+ makeETGRule(bld, 'etg/_html.py', '_html', 'WXHTML')
+ makeETGRule(bld, 'etg/_glcanvas.py', '_glcanvas', 'WXGL')
+- makeETGRule(bld, 'etg/_html2.py', '_html2', 'WXWEBVIEW')
+ makeETGRule(bld, 'etg/_xml.py', '_xml', 'WXXML')
+ makeETGRule(bld, 'etg/_xrc.py', '_xrc', 'WXXRC')
+ makeETGRule(bld, 'etg/_richtext.py', '_richtext', 'WXHTML WXRICHTEXT')
diff --git a/dev-python/wxpython2/files/wxpython-4.0.6-skip-broken-tests.patch b/dev-python/wxpython2/files/wxpython-4.0.6-skip-broken-tests.patch
new file mode 100644
index 000000000000..22a56162726b
--- /dev/null
+++ b/dev-python/wxpython2/files/wxpython-4.0.6-skip-broken-tests.patch
@@ -0,0 +1,91 @@
+diff -ru wxPython-4.0.6-orig/unittests/test_frame.py wxPython-4.0.6/unittests/test_frame.py
+--- wxPython-4.0.6-orig/unittests/test_frame.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_frame.py 2019-05-24 10:15:51.350004356 -0400
+@@ -50,7 +50,7 @@
+ f.Close()
+
+
+- def test_frameRestore(self):
++ def xtest_frameRestore(self):
+ f = wx.Frame(self.frame, title="Title", pos=(50,50), size=(100,100))
+ f.Show()
+ f.Maximize()
+diff -ru wxPython-4.0.6-orig/unittests/test_graphics.py wxPython-4.0.6/unittests/test_graphics.py
+--- wxPython-4.0.6-orig/unittests/test_graphics.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_graphics.py 2019-05-24 10:16:06.520256643 -0400
+@@ -23,7 +23,7 @@
+ gc = wx.GraphicsContext.Create(img)
+ self.assertTrue(gc.IsOk())
+
+- def test_gcCreate4(self):
++ def xtest_gcCreate4(self):
+ class MyPanel(wx.Panel):
+ def __init__(self, parent):
+ super(MyPanel, self).__init__(parent)
+diff -ru wxPython-4.0.6-orig/unittests/test_lib_pubsub_provider.py wxPython-4.0.6/unittests/test_lib_pubsub_provider.py
+--- wxPython-4.0.6-orig/unittests/test_lib_pubsub_provider.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_lib_pubsub_provider.py 2019-05-24 10:16:49.649969339 -0400
+@@ -49,7 +49,7 @@
+
+ class lib_pubsub_Except(wtc.PubsubTestCase):
+
+- def test1(self):
++ def xtest1(self):
+
+ self.pub.addTopicDefnProvider(my_topics, self.pub.TOPIC_TREE_FROM_CLASS)
+
+diff -ru wxPython-4.0.6-orig/unittests/test_lib_pubsub_topicmgr.py wxPython-4.0.6/unittests/test_lib_pubsub_topicmgr.py
+--- wxPython-4.0.6-orig/unittests/test_lib_pubsub_topicmgr.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_lib_pubsub_topicmgr.py 2019-05-24 10:17:18.276438743 -0400
+@@ -215,7 +215,7 @@
+ assert 1 == topicMgr.getNumDefnProviders()
+ topicMgr.clearDefnProviders()
+
+- def test20_UseProvider(self):
++ def xtest20_UseProvider(self):
+ #
+ # Test the use of definition providers for topics. We create
+ # two so we can check that more than one can work together.
+diff -ru wxPython-4.0.6-orig/unittests/test_sizer.py wxPython-4.0.6/unittests/test_sizer.py
+--- wxPython-4.0.6-orig/unittests/test_sizer.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_sizer.py 2019-05-24 10:18:03.937181671 -0400
+@@ -71,7 +71,7 @@
+ self.assertTrue(items[1].IsSpacer())
+ self.assertTrue(items[2].Border == 5)
+
+- def test_iter(self):
++ def xtest_iter(self):
+ bs = wx.BoxSizer()
+ widgetlist = [wx.Panel(self.frame) for _ in range(5)]
+
+diff -ru wxPython-4.0.6-orig/unittests/test_utils.py wxPython-4.0.6/unittests/test_utils.py
+--- wxPython-4.0.6-orig/unittests/test_utils.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_utils.py 2019-05-24 11:14:09.399035368 -0400
+@@ -34,7 +34,7 @@
+ with wx.BusyCursor():
+ self.myYield()
+
+- def test_utilsSomeOtherStuff(self):
++ def xtest_utilsSomeOtherStuff(self):
+ wx.GetBatteryState()
+ wx.GetPowerType()
+ wx.GetKeyState(wx.WXK_F1)
+diff -ru wxPython-4.0.6-orig/unittests/test_windowid.py wxPython-4.0.6/unittests/test_windowid.py
+--- wxPython-4.0.6-orig/unittests/test_windowid.py 2019-05-21 19:12:12.000000000 -0400
++++ wxPython-4.0.6/unittests/test_windowid.py 2019-05-24 10:18:24.158508491 -0400
+@@ -28,12 +28,12 @@
+ assert isinstance(ref, wx.WindowIDRef)
+
+
+- def test_newIdRef03(self):
++ def xtest_newIdRef03(self):
+ """Check that Auto ID Management is enabled (--enable-autoidman)"""
+ # This test is expected to fail if autoID mangagement is turned on
+- # because a reference to the ID is not being saved, so it will be
++ # because a reference to the ID is not being saved, so it will be
+ # unreserved when the first widget is destroyed.
+-
++
+ id = wx.Window.NewControlId()
+ b = wx.Button(self.frame, id, 'button')
+ b.Destroy()
diff --git a/dev-python/wxpython2/metadata.xml b/dev-python/wxpython2/metadata.xml
new file mode 100644
index 000000000000..7443753b081b
--- /dev/null
+++ b/dev-python/wxpython2/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <herd>maintainer-wanted</herd>
+ </maintainer>
+ <maintainer type="project">
+ <email>python@gentoo.org</email>
+ <name>Python</name>
+ </maintainer>
+ <use>
+ <flag name="examples">Install interactive demo module browser and sample applets.</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">wxWidgets/Phoenix</remote-id>
+ </upstream>
+ <origin>calculatelinux-overlay</origin>
+</pkgmetadata>
diff --git a/dev-python/wxpython2/wxpython2-3.0.2.0.ebuild b/dev-python/wxpython2/wxpython2-3.0.2.0.ebuild
new file mode 100644
index 000000000000..a713033de8ea
--- /dev/null
+++ b/dev-python/wxpython2/wxpython2-3.0.2.0.ebuild
@@ -0,0 +1,141 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+
+PYTHON_COMPAT=( python2_7 )
+WX_GTK_VER="3.0"
+
+inherit alternatives distutils-r1 eutils fdo-mime flag-o-matic wxwidgets
+
+ORIG_PN="wxpython"
+MY_PN="wxPython-src"
+
+DESCRIPTION="A blending of the wxWindows C++ class library with Python"
+HOMEPAGE="https://www.wxpython.org/"
+SRC_URI="
+ mirror://sourceforge/wxpython/${MY_PN}-${PV}.tar.bz2"
+
+LICENSE="wxWinLL-3"
+SLOT="3.0"
+KEYWORDS="~alpha amd64 arm arm64 ppc ppc64 ~sparc x86"
+IUSE="cairo libnotify opengl"
+RESTRICT="test"
+
+RDEPEND="
+ !dev-python/${ORIG_PN}[python_targets_python2_7]
+ dev-lang/python-exec:2[${PYTHON_USEDEP}]
+ >=x11-libs/wxGTK-${PV}:${WX_GTK_VER}=[libnotify=,opengl?,tiff,X]
+ dev-libs/glib:2
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ media-libs/libpng:0=
+ media-libs/tiff:0
+ virtual/jpeg
+ x11-libs/gtk+:2
+ x11-libs/pango[X]
+ cairo? ( >=dev-python/pycairo-python2-1.8.4[${PYTHON_USEDEP}] )
+ opengl? ( dev-python/pyopengl-python2[${PYTHON_USEDEP}] )"
+
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+S="${WORKDIR}/${MY_PN}-${PV}/wxPython"
+DOC_S="${WORKDIR}/wxPython-${PV}"
+
+# The hacky build system seems to be broken with out-of-source builds,
+# and installs 'wx' package globally.
+DISTUTILS_IN_SOURCE_BUILD=1
+
+python_prepare_all() {
+ sed -i "s:cflags.append('-O3'):pass:" config.py || die "sed failed"
+
+ cd "${S}"
+ local PATCHES=(
+ "${FILESDIR}"/${ORIG_PN}-3.0.0.0-wxversion-scripts.patch
+ # drop editra - we have it as a separate package now
+ "${FILESDIR}"/${ORIG_PN}-2.8.11-drop-editra.patch
+ "${FILESDIR}"/${ORIG_PN}-2.8-no-preservatives-added.patch
+ # fix handling egg_info command
+ "${FILESDIR}"/${ORIG_PN}-2.8.12.1-disable-egging-mode.patch
+ )
+
+ distutils-r1_python_prepare_all
+}
+
+src_configure() {
+ need-wxwidgets unicode
+
+ mydistutilsargs=(
+ WX_CONFIG="${WX_CONFIG}"
+ WXPORT=gtk2
+ UNICODE=1
+ BUILD_GLCANVAS=$(usex opengl 1 0)
+ )
+}
+
+python_compile() {
+ # We need to have separate libdirs due to hackery, bug #455332.
+ distutils-r1_python_compile \
+ build --build-purelib "${BUILD_DIR}"/lib.common
+}
+
+python_install() {
+ distutils-r1_python_install \
+ build --build-purelib "${BUILD_DIR}"/lib.common
+
+ # adjust the filenames for wxPython slots.
+ local file
+ for file in "${D}$(python_get_sitedir)"/wx{version.*,.pth}; do
+ mv "${file}" "${file}-${SLOT}" || die
+ done
+ cd "${ED}"usr/lib/python-exec/"${EPYTHON}" || die
+ for file in *; do
+ mv "${file}" "${file}-${SLOT}" || die
+
+ # wrappers are common to all impls, so a parallel run may
+ # move it for us. ln+rm is more failure-proof.
+ ln -fs ../lib/python-exec/python-exec2 "${ED}usr/bin/${file}-${SLOT}" || die
+ rm -f "${ED}usr/bin/${file}"
+ done
+}
+
+python_install_all() {
+ dodoc docs/{CHANGES,PyManual,README,wxPackage,wxPythonManual}.txt
+
+ for x in {Py{AlaMode,Crust,Shell},XRCed}; do
+ newmenu distrib/${x}.desktop ${x}-${SLOT}.desktop
+ done
+ newicon wx/py/PyCrust_32.png PyCrust-${SLOT}.png
+ newicon wx/py/PySlices_32.png PySlices-${SLOT}.png
+ newicon wx/tools/XRCed/XRCed_32.png XRCed-${SLOT}.png
+
+ distutils-r1_python_install_all
+
+ rm -r ${D}/usr/share
+}
+
+pkg_postinst() {
+ fdo-mime_desktop_database_update
+
+ create_symlinks() {
+ alternatives_auto_makesym "$(python_get_sitedir)/wx.pth" "$(python_get_sitedir)/wx.pth-[0-9].[0-9]"
+ alternatives_auto_makesym "$(python_get_sitedir)/wxversion.py" "$(python_get_sitedir)/wxversion.py-[0-9].[0-9]"
+ }
+ python_foreach_impl create_symlinks
+
+ echo
+ elog "Gentoo uses the Multi-version method for SLOT'ing."
+ elog "Developers, see this site for instructions on using"
+ elog "it with your apps:"
+ elog "http://wiki.wxpython.org/MultiVersionInstalls"
+}
+
+pkg_postrm() {
+ fdo-mime_desktop_database_update
+
+ update_symlinks() {
+ alternatives_auto_makesym "$(python_get_sitedir)/wx.pth" "$(python_get_sitedir)/wx.pth-[0-9].[0-9]"
+ alternatives_auto_makesym "$(python_get_sitedir)/wxversion.py" "$(python_get_sitedir)/wxversion.py-[0-9].[0-9]"
+ }
+ python_foreach_impl update_symlinks
+}