aboutsummaryrefslogtreecommitdiffstats
path: root/community
diff options
context:
space:
mode:
Diffstat (limited to 'community')
-rw-r--r--community/py3-argparse/APKBUILD31
-rw-r--r--community/py3-asn1-modules/APKBUILD30
-rw-r--r--community/py3-click/APKBUILD31
-rw-r--r--community/py3-constantly/APKBUILD27
-rw-r--r--community/py3-curl/APKBUILD28
-rw-r--r--community/py3-dateutil/APKBUILD27
-rw-r--r--community/py3-exifread/APKBUILD33
-rw-r--r--community/py3-hiredis/APKBUILD35
-rw-r--r--community/py3-hiredis/hiredis-0.14-compat.patch31
-rw-r--r--community/py3-hiredis/system-hiredis.patch14
-rw-r--r--community/py3-hoedown/APKBUILD26
-rw-r--r--community/py3-httplib2/APKBUILD27
-rw-r--r--community/py3-icu/APKBUILD29
-rw-r--r--community/py3-importlib-metadata/APKBUILD31
-rw-r--r--community/py3-incremental/APKBUILD25
-rw-r--r--community/py3-ipaddress/APKBUILD27
-rw-r--r--community/py3-itsdangerous/APKBUILD27
-rw-r--r--community/py3-jwt/APKBUILD44
-rw-r--r--community/py3-jwt/no-cov-report.patch12
-rw-r--r--community/py3-libvirt/APKBUILD32
-rw-r--r--community/py3-libvirt/musl-gnuc-prereq.patch18
-rw-r--r--community/py3-lockfile/APKBUILD32
-rw-r--r--community/py3-lxml/APKBUILD31
-rw-r--r--community/py3-munkres/APKBUILD32
-rw-r--r--community/py3-musicbrainzngs/APKBUILD27
-rw-r--r--community/py3-nose/APKBUILD59
-rw-r--r--community/py3-nose/coverage4-compat.patch41
-rw-r--r--community/py3-nose/fix-crashing-from-UnicodeDecodeError.patch152
-rw-r--r--community/py3-nose/fix-doctests-unicode.patch21
-rw-r--r--community/py3-nose/python3.5-compat.patch42
-rw-r--r--community/py3-nose/python3.6-compat.patch61
-rw-r--r--community/py3-oauth2/APKBUILD34
-rw-r--r--community/py3-oauth2client/APKBUILD32
-rw-r--r--community/py3-oauthlib/APKBUILD33
-rw-r--r--community/py3-openssl/APKBUILD32
-rw-r--r--community/py3-purl/APKBUILD30
-rw-r--r--community/py3-pycountry/APKBUILD32
-rw-r--r--community/py3-pylast/APKBUILD31
-rw-r--r--community/py3-redis/APKBUILD35
-rw-r--r--community/py3-roman/APKBUILD31
-rw-r--r--community/py3-rsa/APKBUILD27
-rw-r--r--community/py3-simpleparse/APKBUILD24
-rw-r--r--community/py3-unidecode/APKBUILD35
-rw-r--r--community/py3-uritemplate/APKBUILD28
-rw-r--r--community/py3-urlgrabber/APKBUILD33
-rw-r--r--community/py3-vobject/APKBUILD29
-rw-r--r--community/py3-werkzeug/APKBUILD28
-rw-r--r--community/py3-wtforms/APKBUILD31
-rw-r--r--community/py3-zope-interface/APKBUILD28
49 files changed, 1636 insertions, 0 deletions
diff --git a/community/py3-argparse/APKBUILD b/community/py3-argparse/APKBUILD
new file mode 100644
index 0000000000..36810929a0
--- /dev/null
+++ b/community/py3-argparse/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Francesco Colista <fcolista@alpinelinux.org>
+# Maintainer: Francesco Colista <fcolista@alpinelinux.org>
+pkgname=py3-argparse
+_pkgname=argparse
+pkgver=1.4.0
+pkgrel=5
+pkgdesc="Python3 command-line parsing library"
+url="https://pypi.python.org/pypi/argparse/"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-argparse" # Backwards compatibility
+provides="py-argparse=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py check
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="9941f9d26c43169f947c9efadda6239349e1f9df80ff5fcdba3070bc7b43c43ab6bb4b7f0c7eee8e5d06231a17a7e9ee9eb73c7a9bb68ebe5d13f879686d61b2 argparse-1.4.0.tar.gz"
diff --git a/community/py3-asn1-modules/APKBUILD b/community/py3-asn1-modules/APKBUILD
new file mode 100644
index 0000000000..a261b7d6d0
--- /dev/null
+++ b/community/py3-asn1-modules/APKBUILD
@@ -0,0 +1,30 @@
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-asn1-modules
+_pkgname=pyasn1-modules
+pkgver=0.2.7
+pkgrel=1
+pkgdesc="A collection of ASN.1-based protocols modules"
+url="https://pypi.python.org/pypi/pyasn1-modules"
+arch="noarch"
+license="BSD-2-Clause"
+depends="py3-asn1<0.5.0"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-asn1-modules" # Backwards compatibility
+provides="py-asn1-modules=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="5854cb2eebe7ef7eaae701fba8c8b847f84115c699037d9cd29ddbfb8f0142172031155404d34f004a454227659b8726631f0e3082c856f6311544148768655f pyasn1-modules-0.2.7.tar.gz"
diff --git a/community/py3-click/APKBUILD b/community/py3-click/APKBUILD
new file mode 100644
index 0000000000..137a51e0a6
--- /dev/null
+++ b/community/py3-click/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-click
+pkgver=7.1.1
+pkgrel=0
+pkgdesc="Simple wrapper around optparse for powerful command line utilities"
+url="https://click.palletsprojects.com"
+arch="noarch"
+license="BSD-3-Clause"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest"
+source="https://files.pythonhosted.org/packages/source/c/click/click-$pkgver.tar.gz"
+builddir="$srcdir/click-$pkgver"
+
+replaces="py-click" # Backwards compatibility
+provides="py-click=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ PYTHONPATH="$PWD"/build/lib pytest -v tests
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="421450e4a3c9baa562ae9f3af602cefe70dfd7273aaa5ea47c7feb4d38b03e5b28c13d5e63a6fc5e7bfc89c9997a60836e79c51397509970726d2b832ced68e6 click-7.1.1.tar.gz"
diff --git a/community/py3-constantly/APKBUILD b/community/py3-constantly/APKBUILD
new file mode 100644
index 0000000000..00e35e3023
--- /dev/null
+++ b/community/py3-constantly/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: prspkt <prspkt@protonmail.com>
+# Maintainer: prspkt <prspkt@protonmail.com>
+pkgname=py3-constantly
+_pkgname=constantly
+pkgver=15.1.0
+pkgrel=3
+pkgdesc="Library that provides symbolic constant support"
+url="https://github.com/twisted/constantly"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-constantly" # Backwards compatibility
+provides="py-constantly=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="ccc6f41b0bd552d2bb5346cc9d64cd7b91a59dd30e0cf66b01e82f7e0e079c01c34bc6c66b69c5fee9d2eed35ae5455258d309e66278d708d5f576ddf2e00ac3 constantly-15.1.0.tar.gz"
diff --git a/community/py3-curl/APKBUILD b/community/py3-curl/APKBUILD
new file mode 100644
index 0000000000..f11b638723
--- /dev/null
+++ b/community/py3-curl/APKBUILD
@@ -0,0 +1,28 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-curl
+_pkgname=pycurl
+pkgver=7.43.0.5
+pkgrel=0
+pkgdesc="Python3 interface to libcurl"
+url="http://pycurl.io/"
+arch="all"
+license="LGPL-2.0-or-later MIT"
+makedepends="curl-dev openssl-dev python3-dev py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-curl" # Backwards compatibility
+provides="py-curl=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ export PYCURL_SSL_LIBRARY=openssl
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+ rm -Rf "$pkgdir"/usr/share # remove docs
+}
+
+sha512sums="835ed6cca25d2dd3e7084f905f3b0b082d4af04761fa9d4dc4714865863a97c095c08e6f55ada91b9f60ccad7838328a82fb2add8108aea12056200cf1f12845 pycurl-7.43.0.5.tar.gz"
diff --git a/community/py3-dateutil/APKBUILD b/community/py3-dateutil/APKBUILD
new file mode 100644
index 0000000000..c6c2865bbb
--- /dev/null
+++ b/community/py3-dateutil/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor:
+# Maintainer:
+pkgname=py3-dateutil
+_pkgname=python-dateutil
+pkgver=2.8.1
+pkgrel=0
+pkgdesc="Python3 extensions for datetime module"
+url="https://dateutil.readthedocs.io"
+arch="noarch"
+license="Apache-2.0 AND BSD-3-Clause"
+depends="python3 py3-six"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-dateutil" # Backwards compatibility
+provides="py-dateutil=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="337000216e0f8ce32d6363768444144183ab9268f69082f20858f2b3322b1c449e53b2f2b5dcb3645be22294659ce7838f74ace2fd7a7c4f2adc6cf806a9fa2c python-dateutil-2.8.1.tar.gz"
diff --git a/community/py3-exifread/APKBUILD b/community/py3-exifread/APKBUILD
new file mode 100644
index 0000000000..2baba9b03d
--- /dev/null
+++ b/community/py3-exifread/APKBUILD
@@ -0,0 +1,33 @@
+# Maintainer:
+pkgname=py3-exifread
+_pkgname=ExifRead
+pkgver=2.2.0
+pkgrel=1
+pkgdesc="Read Exif metadata from tiff and jpeg files"
+options="!check" # No testsuite
+url="https://github.com/ianare/exif-py"
+arch="noarch"
+license="BSD-3-Clause"
+depends="python3"
+makedepends="py3-setuptools"
+source="$pkgname-$pkgver.tar.gz::https://github.com/ianare/exif-py/archive/$pkgver.tar.gz"
+
+builddir="$srcdir"/exif-py-$pkgver
+
+replaces="py-exifread" # Backwards compatibility
+provides="py-exifread=$pkgver-r$pkgrel" # Backwards compatibility
+
+prepare() {
+ default_prepare
+ sed -i "s/2.1.2/$version/" exifread/__init__.py
+}
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="a1e6b27e7092ef8ce8c1a6c5fe095f0641ff942aa4bcd2a9f96eda688fe8cf7544bd6b9e48b4b29586906dac95ed717578de6b8bb691d8a4a1864992da0e00f5 py3-exifread-2.2.0.tar.gz"
diff --git a/community/py3-hiredis/APKBUILD b/community/py3-hiredis/APKBUILD
new file mode 100644
index 0000000000..52de17544b
--- /dev/null
+++ b/community/py3-hiredis/APKBUILD
@@ -0,0 +1,35 @@
+# Maintainer: Eivind Uggedal <eu@eju.no>
+pkgname=py3-hiredis
+_pkgname=${pkgname#py3-}
+pkgver=1.0.1
+pkgrel=0
+pkgdesc="Python extension that wraps hiredis"
+url="https://github.com/redis/hiredis-py"
+arch="all"
+license="BSD-3-Clause"
+makedepends="python3-dev py3-setuptools hiredis-dev"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz
+ system-hiredis.patch
+ hiredis-0.14-compat.patch"
+
+# keep these til after alpine v3.11
+provides="py-$_pkgname=$pkgver-r$pkgrel" # for backward compatibility
+replaces="py-$_pkgname" # for backward compatibility
+
+builddir="$srcdir"/$_pkgname-$pkgver
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 test.py
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="8aa5e29b09f42826d746857d55b8042b40ffa3977386b0f8b2ea1b2ede0c28337f3df4bbd177192d8873570810bc9d0987f1f2b29f094f27adaa4aaf409c3a6b hiredis-1.0.1.tar.gz
+4be1599851215547b4b994a966087024cc86b495dbfdcb9807dabcffb5505509f25398c55a07b2a8fb7221cf9c5d27738a38f8c87fe2e37d991a2de3cfa38451 system-hiredis.patch
+a066ceab985be6ae87f0c30b98a496e6929909ac5d94b21fac9544bc8f649b0c1f0b66760441a90dc8bc50f4d748775f3d3a042fe8a4b466b5371bfb49b16f7a hiredis-0.14-compat.patch"
diff --git a/community/py3-hiredis/hiredis-0.14-compat.patch b/community/py3-hiredis/hiredis-0.14-compat.patch
new file mode 100644
index 0000000000..86e0d3f585
--- /dev/null
+++ b/community/py3-hiredis/hiredis-0.14-compat.patch
@@ -0,0 +1,31 @@
+--- hiredis-1.0.0/src/reader.c
++++ hiredis-1.0.0_p/src/reader.c
+@@ -167,7 +167,7 @@
+ static void Reader_dealloc(hiredis_ReaderObject *self) {
+ // we don't need to free self->encoding as the buffer is managed by Python
+ // https://docs.python.org/3/c-api/arg.html#strings-and-buffers
+- redisReplyReaderFree(self->reader);
++ redisReaderFree(self->reader);
+ Py_XDECREF(self->protocolErrorClass);
+ Py_XDECREF(self->replyErrorClass);
+
+@@ -272,7 +272,7 @@
+ goto error;
+ }
+
+- redisReplyReaderFeed(self->reader, (char *)buf.buf + off, len);
++ redisReaderFeed(self->reader, (char *)buf.buf + off, len);
+ PyBuffer_Release(&buf);
+ Py_RETURN_NONE;
+
+@@ -291,8 +291,8 @@
+ return NULL;
+ }
+
+- if (redisReplyReaderGetReply(self->reader, (void**)&obj) == REDIS_ERR) {
+- errstr = redisReplyReaderGetError(self->reader);
++ if (redisReaderGetReply(self->reader, (void**)&obj) == REDIS_ERR) {
++ errstr = redisReaderGetError(self->reader);
+ /* protocolErrorClass might be a callable. call it, then use it's type */
+ err = createError(self->protocolErrorClass, errstr, strlen(errstr));
+ if (err != NULL) {
diff --git a/community/py3-hiredis/system-hiredis.patch b/community/py3-hiredis/system-hiredis.patch
new file mode 100644
index 0000000000..e5aaa28bc4
--- /dev/null
+++ b/community/py3-hiredis/system-hiredis.patch
@@ -0,0 +1,14 @@
+--- hiredis-1.0.0/setup.py
++++ hiredis-1.0.0_p/setup.py
+@@ -11,9 +11,8 @@
+ return module.__version__
+
+ ext = Extension("hiredis.hiredis",
+- sources=sorted(glob.glob("src/*.c") +
+- ["vendor/hiredis/%s.c" % src for src in ("read", "sds")]),
+- include_dirs=["vendor"])
++ sources=sorted(glob.glob("src/*.c")),
++ libraries=["hiredis"])
+
+ setup(
+ name="hiredis",
diff --git a/community/py3-hoedown/APKBUILD b/community/py3-hoedown/APKBUILD
new file mode 100644
index 0000000000..58cf134095
--- /dev/null
+++ b/community/py3-hoedown/APKBUILD
@@ -0,0 +1,26 @@
+# Contributor: Leo <thinkabit.ukim@gmail.com>
+# Contributor: Eivind Uggedal <eu@eju.no>
+# Maintainer:
+pkgname=py3-hoedown
+_pkgname=hoedown
+pkgver=0.3.0
+pkgrel=1
+pkgdesc="Python binding for hoedown, a markdown parsing library"
+options="!check" # PyPi has no tests in tarball, github releases have broken versioning
+url="https://github.com/hhatto/python-hoedown"
+arch="all"
+license="MIT"
+makedepends="python3-dev py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+
+builddir="$srcdir"/$_pkgname-$pkgver
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="e0a51566ad19c1ee774b93b81092d8ab3c8de335e4789ac08f415fdf6f2aa3441ded88f165089cd7874e5dcf5ac1276dcafbb9481ec70d4d89b5d751a905fe18 hoedown-0.3.0.tar.gz"
diff --git a/community/py3-httplib2/APKBUILD b/community/py3-httplib2/APKBUILD
new file mode 100644
index 0000000000..532085771f
--- /dev/null
+++ b/community/py3-httplib2/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: Peter Bui <pnutzh4x0r@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-httplib2
+_pkgname=httplib2
+pkgver=0.15.0
+pkgrel=0
+pkgdesc="Python3 HTTP client library"
+url="https://github.com/httplib2/httplib2"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-httplib2" # Backwards compatibility
+provides="py-httplib2=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="be6884238fee6c2a75093204fb3c760da33d5ac04ebbb86f6a09f48ec70d44d8dbfccfe20b5d9c72745f42afedaf56bb783200b982dd2853b6bc91922961d390 httplib2-0.15.0.tar.gz"
diff --git a/community/py3-icu/APKBUILD b/community/py3-icu/APKBUILD
new file mode 100644
index 0000000000..4726a556f7
--- /dev/null
+++ b/community/py3-icu/APKBUILD
@@ -0,0 +1,29 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-icu
+_pkgname=PyICU
+pkgver=2.4.3
+pkgrel=1
+pkgdesc="Python3 binding for ICU"
+url="https://pypi.org/project/PyICU/"
+arch="all"
+license="MIT"
+makedepends="py3-setuptools python3-dev icu-dev"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-icu" # Backwards compatibility
+provides="py-icu=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py check
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="77b81b0e9a17972696967ebc0421d05c1119a43c7e853f8d939390dddefa4a2a35dd316e08c10c10a283472bb64738016e47c5f45c7c6191d9dba296057740a0 PyICU-2.4.3.tar.gz"
diff --git a/community/py3-importlib-metadata/APKBUILD b/community/py3-importlib-metadata/APKBUILD
new file mode 100644
index 0000000000..114c810174
--- /dev/null
+++ b/community/py3-importlib-metadata/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: prspkt <prspkt@protonmail.com>
+# Maintainer: prspkt <prspkt@protonmail.com>
+pkgname=py3-importlib-metadata
+_pkgname=importlib_metadata
+pkgver=1.6.0
+pkgrel=0
+pkgdesc="Tool to read metadata from Python packages"
+url="https://gitlab.com/python-devs/importlib_metadata"
+arch="noarch"
+license="Apache-2.0"
+depends="py3-zipp"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-importlib-metadata" # Backwards compatibility
+provides="py-importlib-metadata=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py check
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="4108d84a39da3c892a3b448027cca2835f6a68ac790b51b7cc4eb4ec925f5e8322847d86d8e89fbcec474258f592220f283116c82c536130aab70b96cea0435c importlib_metadata-1.6.0.tar.gz"
diff --git a/community/py3-incremental/APKBUILD b/community/py3-incremental/APKBUILD
new file mode 100644
index 0000000000..44d70e865a
--- /dev/null
+++ b/community/py3-incremental/APKBUILD
@@ -0,0 +1,25 @@
+# Contributor: prspkt <prspkt@protonmail.com>
+# Maintainer: prspkt <prspkt@protonmail.com>
+pkgname=py3-incremental
+_pkgname=incremental
+pkgver=17.5.0
+pkgrel=3
+pkgdesc="Library that versions your Python3 projects"
+url="https://github.com/twisted/incremental"
+arch="noarch"
+license="MIT"
+makedepends="python3-dev py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+replaces="py-incremental" # Backwards compatibility
+provides="py-incremental=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="91443205f7c92ec8f6502f38379c5ac2fe441435ff9490af01e5420d6bb05bb1c666dd612fc45204199a34afd533fd3de1390ca482bb554dfec7d3a22958a4bc incremental-17.5.0.tar.gz"
diff --git a/community/py3-ipaddress/APKBUILD b/community/py3-ipaddress/APKBUILD
new file mode 100644
index 0000000000..f9d0a5977a
--- /dev/null
+++ b/community/py3-ipaddress/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer: Francesco Colista <fcolista@alpinelinux.org>
+pkgname=py3-ipaddress
+_pkgname=ipaddress
+pkgver=1.0.23
+pkgrel=1
+pkgdesc="IPv4/IPv6 manipulation library"
+url="https://github.com/phihag/ipaddress"
+arch="noarch"
+license="Python-2.0"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-ipaddress" # Backwards compatibility
+provides="py-ipaddress=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="340e2a8698df1868038f55889671442eba17f06ec3f493759d8d0a9bf406eefbe1f67c14ca616f52e5bf2280942dcece7e89fb19de0923bee1ee20e60f48896e ipaddress-1.0.23.tar.gz"
diff --git a/community/py3-itsdangerous/APKBUILD b/community/py3-itsdangerous/APKBUILD
new file mode 100644
index 0000000000..316e26fd22
--- /dev/null
+++ b/community/py3-itsdangerous/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer:
+pkgname=py3-itsdangerous
+_pkgname=itsdangerous
+pkgver=0.24
+pkgrel=6
+pkgdesc="Python3 helper to pass trusted data to untrusted environments"
+url="https://github.com/mitsuhiko/itsdangerous"
+arch="noarch"
+license="BSD-3-Clause"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-itsdangerous" # Backwards compatibility
+provides="py-itsdangerous=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="2863b6e5fda178db59bd214c6d24d04422c1021bb41bf11598aba1cbc43053aff3bb1e0539940b5769de04b68c03e8bd01d728dcbfc4bd0ba05867688574a297 itsdangerous-0.24.tar.gz"
diff --git a/community/py3-jwt/APKBUILD b/community/py3-jwt/APKBUILD
new file mode 100644
index 0000000000..98f1c74247
--- /dev/null
+++ b/community/py3-jwt/APKBUILD
@@ -0,0 +1,44 @@
+# Contributor: Eivind Uggedal <eu@eju.no>
+# Maintainer:
+pkgname=py3-jwt
+_pkgname=PyJWT
+pkgver=1.7.1
+pkgrel=3
+pkgdesc="Python3 JSON Web Token implementation"
+url="https://github.com/jpadilla/pyjwt"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest"
+subpackages="$pkgname-cli"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz
+ no-cov-report.patch
+ "
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-jwt" # Backwards compatibility
+provides="py-jwt=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 -m pytest .
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+cli() {
+ pkgdesc="$pkgdesc (CLI utility)"
+ depends="py3-jwt=$pkgver-r$pkgrel"
+
+ mkdir -p "$subpkgdir"/usr/
+ mv "$pkgdir"/usr/bin "$subpkgdir"/usr/
+}
+
+sha512sums="70cd38127b6848933992c8b88303725ef71bfb430ad42eb63247e549b0bdab2a194137349d43ab02a1c97212dbc89f447ee3f0c5403dd14632b8b4b6b9235fc4 PyJWT-1.7.1.tar.gz
+886877c4e40005d254abf6f00389e7e69e1a781119c29da7632e3f475b526e15b2387ab1bc5bade07234932c3a7396c06298540bdd1596a79a4a5e62b64517fc no-cov-report.patch"
diff --git a/community/py3-jwt/no-cov-report.patch b/community/py3-jwt/no-cov-report.patch
new file mode 100644
index 0000000000..9efb3d2219
--- /dev/null
+++ b/community/py3-jwt/no-cov-report.patch
@@ -0,0 +1,12 @@
+Avoid installing additional test dependencies.
+
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -8,7 +8,6 @@
+ universal = 1
+
+ [tool:pytest]
+-addopts = --cov-report term-missing --cov-config=.coveragerc --cov .
+
+ [aliases]
+ test = pytest
diff --git a/community/py3-libvirt/APKBUILD b/community/py3-libvirt/APKBUILD
new file mode 100644
index 0000000000..0a3fbdb4e2
--- /dev/null
+++ b/community/py3-libvirt/APKBUILD
@@ -0,0 +1,32 @@
+# Maintainer: Francesco Colista <fcolista@alpinelinux.org>
+pkgname=py3-libvirt
+_pkgname=libvirt-python
+pkgver=6.1.0
+pkgrel=0
+pkgdesc="The libvirt virtualization API python binding"
+url="http://libvirt.org"
+arch="all"
+license="LGPL-2.0-or-later"
+makedepends="py3-setuptools python3-dev libvirt-dev"
+source="https://libvirt.org/sources/python/$_pkgname-$pkgver.tar.gz
+ musl-gnuc-prereq.patch
+ "
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-libvirt" # Backwards compatibility
+provides="py-libvirt=$pkgver" # Backwards compatibility
+
+check() {
+ python3 setup.py check
+}
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="a7994e21cbd5aa9c16aa4baa0e314ab3d71b15692e50da8f243994aee7393cc4dd2a27b39def87599ecfc32764980c71069ce4c904edc379219bd76a6344ce1e libvirt-python-6.1.0.tar.gz
+8aa1d814f8388ebff0736ee138c780323381cd4cf39b4a4faed2e2a1fe5911facc34505a85b0977d8b4240b8ce2f4a6d0414790693c4f45ff7d9592e9d6a3ff8 musl-gnuc-prereq.patch"
diff --git a/community/py3-libvirt/musl-gnuc-prereq.patch b/community/py3-libvirt/musl-gnuc-prereq.patch
new file mode 100644
index 0000000000..2e3c95e3f4
--- /dev/null
+++ b/community/py3-libvirt/musl-gnuc-prereq.patch
@@ -0,0 +1,18 @@
+--- libvirt-python-1.2.0.orig/libvirt-utils.h
++++ libvirt-python-1.2.0/libvirt-utils.h
+@@ -28,6 +28,15 @@
+ # define MIN(a,b) (((a) < (b)) ? (a) : (b))
+ # endif
+
++# ifndef __GNUC_PREREQ
++# if defined __GNUC__ && defined __GNUC_MINOR__
++# define __GNUC_PREREQ(maj, min) \
++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
++# else
++# define __GNUC_PREREQ(maj, min) 0
++# endif
++#endif
++
+ /**
+ * libvirt.h provides this as of version 1.2.0, but we want to be able
+ * to support older versions of libvirt so copy and paste the macro from
diff --git a/community/py3-lockfile/APKBUILD b/community/py3-lockfile/APKBUILD
new file mode 100644
index 0000000000..c18384937a
--- /dev/null
+++ b/community/py3-lockfile/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-lockfile
+_pkgname=lockfile
+pkgver=0.12.2
+pkgrel=3
+pkgdesc="A Python file locking module"
+url="https://github.com/openstack/pylockfile"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-pbr py3-setuptools"
+checkdepends="py3-nose"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces=py-lockfile # Backwards compatibility
+provides=py-lockfile=$pkgver-r$pkgrel # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ nosetests
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="67b7d651d7e963a497c2604912c61eed90181cdd09c744a0ceaa26e6bbe09d1a871ce48be3949b7da7ea6b366b15492c8c8de589edeca2641ca5e6cb3804df07 lockfile-0.12.2.tar.gz"
diff --git a/community/py3-lxml/APKBUILD b/community/py3-lxml/APKBUILD
new file mode 100644
index 0000000000..e62e5e974b
--- /dev/null
+++ b/community/py3-lxml/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Francesco Colista <fcolista@alpinelinux.org>
+# Contributor: Jakub Jirutka <jakub@jirutka.cz>
+# Maintainer: Francesco Colista <fcolista@alpinelinux.org>
+pkgname=py3-lxml
+_pkgname=lxml
+pkgver=4.5.0
+pkgrel=0
+pkgdesc="Python3 LXML Library"
+url="https://lxml.de/"
+arch="all"
+license="BSD-3-Clause AND ZPL-2.0 AND ElementTree"
+makedepends="python3-dev libxml2-dev libxslt-dev py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-lxml" # Backwards compatibility
+provides="py-lxml=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py check
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="7cb957b2ab9931c32984ad0808f51e650e82e2d9b14df3fd8df2dd8f2c5c261d26ebf2c672b723e89b00b867a0a8dbb9130023e48a5f302fd02d5409e1c8cd6c lxml-4.5.0.tar.gz"
diff --git a/community/py3-munkres/APKBUILD b/community/py3-munkres/APKBUILD
new file mode 100644
index 0000000000..9b73594da6
--- /dev/null
+++ b/community/py3-munkres/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-munkres
+_pkgname=munkres
+pkgver=1.1.2
+pkgrel=1
+pkgdesc="Munkres algorithm for the assignment problem"
+url="http://software.clapper.org/munkres/"
+arch="noarch"
+license="BSD"
+makedepends="py3-setuptools"
+checkdepends="py3-nose"
+source="$_pkgname-$pkgver.tar.gz::https://github.com/bmc/munkres/archive/release-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-release-$pkgver"
+
+replaces="py-munkres" # Backwards compatibility
+provides="py-munkres=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+
+sha512sums="4a8b698f53812303f5020b4fc357f859a63d97370fe311d16ae959addd9cacee65667e430cd0d00496e423c1f0c7a3c8d4219ba49600a982de323fadd2c03bec munkres-1.1.2.tar.gz"
diff --git a/community/py3-musicbrainzngs/APKBUILD b/community/py3-musicbrainzngs/APKBUILD
new file mode 100644
index 0000000000..ad038bc84d
--- /dev/null
+++ b/community/py3-musicbrainzngs/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer:
+pkgname=py3-musicbrainzngs
+_pkgname=musicbrainzngs
+pkgver=0.7.1
+pkgrel=0
+pkgdesc="Bindings for the MusicBrainz NGS service"
+url="https://github.com/alastair/python-musicbrainzngs"
+arch="noarch"
+license="BSD-2-Clause AND ISC"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/m/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-musicbrainzngs" # Backwards compatibility
+provides="py-musicbrainzngs=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="df4a8aa184831301adae66f00638667a4a1c7124f61a7e00ef9051c33e35f2acf7aaf304ac4fcdf113566abd3164abe924f2cee91ca2015343b5bae308b91b9d musicbrainzngs-0.7.1.tar.gz"
diff --git a/community/py3-nose/APKBUILD b/community/py3-nose/APKBUILD
new file mode 100644
index 0000000000..6ebb4574e4
--- /dev/null
+++ b/community/py3-nose/APKBUILD
@@ -0,0 +1,59 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Contributor: Eivind Uggedal <eu@eju.no>
+# Maintainer:
+pkgname=py3-nose
+_pkgname=nose
+pkgver=1.3.7
+pkgrel=5
+pkgdesc="Python3 unittest module"
+url="http://readthedocs.org/docs/nose/"
+arch="noarch"
+license="LGPL-2.0-or-later"
+depends="python3"
+makedepends="py3-setuptools"
+subpackages="$pkgname-doc"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz
+ coverage4-compat.patch
+ python3.5-compat.patch
+ fix-crashing-from-UnicodeDecodeError.patch
+ fix-doctests-unicode.patch
+ python3.6-compat.patch"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-nose" # Backwards compatiblity
+provides="py-nose=$pkgver-r$pkgrel" # Backwards compatiblity
+
+prepare() {
+ default_prepare
+
+ cd "$builddir"/examples
+ cat attrib_plugin.py | tr -d '\r' > attrib_plugin.py.fixed
+ mv attrib_plugin.py.fixed attrib_plugin.py
+}
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ (
+ export PYTHONPATH="$(pwd)/build/lib"
+ python3 setup.py build_tests
+ python3 selftest.py
+ )
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+
+ # setup.py installs to "$pkgdir"/usr/man/man1
+ install -D -m 644 nosetests.1 "$pkgdir"/usr/share/man/man1/nosetests.1
+ rm -rf "$pkgdir"/usr/man
+}
+
+sha512sums="e65c914f621f8da06b9ab11a0ff2763d6e29b82ce2aaed56da0e3773dc899d9deb1f20015789d44c65a5dad7214520f5b659b3f8d7695fb207ad3f78e5cf1b62 nose-1.3.7.tar.gz
+90238837b7d67a425c816e2160641aa55b8b0193d8b86c46efdd3d15b2d73880c8d6ad658bac40216bc9d8104de491bcec629cf7bfcf9f7a2022b7deec668f39 coverage4-compat.patch
+68693cda7a9d5787f56a26bd98949817e67d8795c324c968cb8af599e1e5f190531f80fc71de1233b88918f21f558f4d81f92dde529f908a0a66e5dd80b7ec21 python3.5-compat.patch
+741b97c6f8e33a8a712bb9db148cf869189065d0ea0c07b361356470b370a78e5075e6f631eb7fc714ace29c6904ee0324494b86cfe3414a6bb97193b5d77e52 fix-crashing-from-UnicodeDecodeError.patch
+bcc01fb8283ea097739db5d52be6c1835cbc6f8a14a235f921d1b2b1d70ac0d91a039781e40dba55d5b5380aa963409223cf79a636fce756fe100a37e500503b fix-doctests-unicode.patch
+9c47a73a16766e77d086c1a0bb1cc59064eb5755c0d46bfd1814b1aa90dc90c672dda03547abff389f5a05633eff7a3991e41c5e61c12cf51080a08a71f79199 python3.6-compat.patch"
diff --git a/community/py3-nose/coverage4-compat.patch b/community/py3-nose/coverage4-compat.patch
new file mode 100644
index 0000000000..e77a080f24
--- /dev/null
+++ b/community/py3-nose/coverage4-compat.patch
@@ -0,0 +1,41 @@
+From: Dmitry Shachnev <mitya57@gmail.com>
+Date: Wed, 29 Jun 2016 13:15:16 +0300
+Subject: [PATCH] Make coverage plugin compatible with Coverage.py 4.1
+
+According to the Coverage.py 4.1 changelog:
+
+- The `Coverage.report` function had two parameters with non-None defaults,
+ which have been changed. `show_missing` used to default to True, but now
+ defaults to None. If you had been calling `Coverage.report` without
+ specifying `show_missing`, you'll need to explicitly set it to True to keep
+ the same behavior.
+
+Without that option, four tests in nose fail:
+
+- test_coverage_plugin.TestCoverageMinPercentagePlugin
+- test_coverage_plugin.TestCoverageMinPercentageSinglePackagePlugin
+- test_coverage_plugin.TestCoverageMinPercentageSinglePackageWithBranchesPlugin
+- test_coverage_plugin.TestCoveragePlugin
+
+Patch-Source: https://github.com/nose-devs/nose/pull/1004
+
+--- a/nose/plugins/cover.py
++++ b/nose/plugins/cover.py
+@@ -187,7 +187,7 @@
+ for name, module in sys.modules.items()
+ if self.wantModuleCoverage(name, module)]
+ log.debug("Coverage report will cover modules: %s", modules)
+- self.coverInstance.report(modules, file=stream)
++ self.coverInstance.report(modules, file=stream, show_missing=True)
+
+ import coverage
+ if self.coverHtmlDir:
+@@ -207,7 +207,7 @@
+ # make sure we have minimum required coverage
+ if self.coverMinPercentage:
+ f = StringIO.StringIO()
+- self.coverInstance.report(modules, file=f)
++ self.coverInstance.report(modules, file=f, show_missing=True)
+
+ multiPackageRe = (r'-------\s\w+\s+\d+\s+\d+(?:\s+\d+\s+\d+)?'
+ r'\s+(\d+)%\s+\d*\s{0,1}$')
diff --git a/community/py3-nose/fix-crashing-from-UnicodeDecodeError.patch b/community/py3-nose/fix-crashing-from-UnicodeDecodeError.patch
new file mode 100644
index 0000000000..9154ab0862
--- /dev/null
+++ b/community/py3-nose/fix-crashing-from-UnicodeDecodeError.patch
@@ -0,0 +1,152 @@
+From: Jordan Moldow <jmoldow@box.com>
+Date: Wed, 23 Mar 2016 01:42:37 -0700
+Subject: [PATCH] Prevent crashing from UnicodeDecodeError
+
+On Python 2, `sys.stdout` and `print` can normally handle any
+combination of `str` and `unicode` objects. However,
+`StringIO.StringIO` can only safely handle one or the other. If
+the program writes both a `unicode` string, and a non-ASCII
+`str` string, then the `getvalue()` method will fail with
+`UnicodeDecodeError` [1].
+
+In nose, that causes the script to suddenly abort, with the
+cryptic `UnicodeDecodeError`.
+
+This fix catches `UnicodeError` when trying to get the captured
+output, and will replace the captured output with a warning
+message.
+
+Fixes #816
+
+[1] <https://github.com/python/cpython/blob/2.7/Lib/StringIO.py#L258>
+
+Patch-Source: https://github.com/nose-devs/nose/pull/988
+
+diff --git a/nose/plugins/capture.py b/nose/plugins/capture.py
+index c81f21ec..e7bbdd55 100644
+--- a/nose/plugins/capture.py
++++ b/nose/plugins/capture.py
+@@ -12,6 +12,7 @@
+ import logging
+ import os
+ import sys
++import traceback
+ from nose.plugins.base import Plugin
+ from nose.pyversion import exc_to_unicode, force_unicode
+ from nose.util import ln
+@@ -71,26 +72,56 @@ def beforeTest(self, test):
+ def formatError(self, test, err):
+ """Add captured output to error report.
+ """
+- test.capturedOutput = output = self.buffer
++ test.capturedOutput = output = ''
++ output_exc_info = None
++ try:
++ test.capturedOutput = output = self.buffer
++ except UnicodeError:
++ # python2's StringIO.StringIO [1] class has this warning:
++ #
++ # The StringIO object can accept either Unicode or 8-bit strings,
++ # but mixing the two may take some care. If both are used, 8-bit
++ # strings that cannot be interpreted as 7-bit ASCII (that use the
++ # 8th bit) will cause a UnicodeError to be raised when getvalue()
++ # is called.
++ #
++ # This exception handler is a protection against issue #816 [2].
++ # Capturing the exception info allows us to display it back to the
++ # user.
++ #
++ # [1] <https://github.com/python/cpython/blob/2.7/Lib/StringIO.py#L258>
++ # [2] <https://github.com/nose-devs/nose/issues/816>
++ output_exc_info = sys.exc_info()
+ self._buf = None
+- if not output:
++ if (not output) and (not output_exc_info):
+ # Don't return None as that will prevent other
+ # formatters from formatting and remove earlier formatters
+ # formats, instead return the err we got
+ return err
+ ec, ev, tb = err
+- return (ec, self.addCaptureToErr(ev, output), tb)
++ return (ec, self.addCaptureToErr(ev, output, output_exc_info=output_exc_info), tb)
+
+ def formatFailure(self, test, err):
+ """Add captured output to failure report.
+ """
+ return self.formatError(test, err)
+
+- def addCaptureToErr(self, ev, output):
++ def addCaptureToErr(self, ev, output, output_exc_info=None):
++ # If given, output_exc_info should be a 3-tuple from sys.exc_info(),
++ # from an exception raised while trying to get the captured output.
+ ev = exc_to_unicode(ev)
+ output = force_unicode(output)
+- return u'\n'.join([ev, ln(u'>> begin captured stdout <<'),
+- output, ln(u'>> end captured stdout <<')])
++ error_text = [ev, ln(u'>> begin captured stdout <<'),
++ output, ln(u'>> end captured stdout <<')]
++ if output_exc_info:
++ error_text.extend([u'OUTPUT ERROR: Could not get captured output.',
++ # <https://github.com/python/cpython/blob/2.7/Lib/StringIO.py#L258>
++ # <https://github.com/nose-devs/nose/issues/816>
++ u"The test might've printed both 'unicode' strings and non-ASCII 8-bit 'str' strings.",
++ ln(u'>> begin captured stdout exception traceback <<'),
++ u''.join(traceback.format_exception(*output_exc_info)),
++ ln(u'>> end captured stdout exception traceback <<')])
++ return u'\n'.join(error_text)
+
+ def start(self):
+ self.stdout.append(sys.stdout)
+diff --git a/unit_tests/test_capture_plugin.py b/unit_tests/test_capture_plugin.py
+index edab7de0..90125d3e 100644
+--- a/unit_tests/test_capture_plugin.py
++++ b/unit_tests/test_capture_plugin.py
+@@ -4,6 +4,12 @@
+ from optparse import OptionParser
+ from nose.config import Config
+ from nose.plugins.capture import Capture
++from nose.pyversion import force_unicode
++
++if sys.version_info[0] == 2:
++ py2 = True
++else:
++ py2 = False
+
+ class TestCapturePlugin(unittest.TestCase):
+
+@@ -62,6 +68,35 @@ def test_captures_nonascii_stdout(self):
+ c.end()
+ self.assertEqual(c.buffer, "test 日本\n")
+
++ def test_does_not_crash_with_mixed_unicode_and_nonascii_str(self):
++ class Dummy:
++ pass
++ d = Dummy()
++ c = Capture()
++ c.start()
++ printed_nonascii_str = force_unicode("test 日本").encode('utf-8')
++ printed_unicode = force_unicode("Hello")
++ print printed_nonascii_str
++ print printed_unicode
++ try:
++ raise Exception("boom")
++ except:
++ err = sys.exc_info()
++ formatted = c.formatError(d, err)
++ _, fev, _ = formatted
++
++ if py2:
++ for string in [force_unicode(printed_nonascii_str, encoding='utf-8'), printed_unicode]:
++ assert string not in fev, "Output unexpectedly found in error message"
++ assert d.capturedOutput == '', "capturedOutput unexpectedly non-empty"
++ assert "OUTPUT ERROR" in fev
++ assert "captured stdout exception traceback" in fev
++ assert "UnicodeDecodeError" in fev
++ else:
++ for string in [repr(printed_nonascii_str), printed_unicode]:
++ assert string in fev, "Output not found in error message"
++ assert string in d.capturedOutput, "Output not attached to test"
++
+ def test_format_error(self):
+ class Dummy:
+ pass
diff --git a/community/py3-nose/fix-doctests-unicode.patch b/community/py3-nose/fix-doctests-unicode.patch
new file mode 100644
index 0000000000..a788ed9c43
--- /dev/null
+++ b/community/py3-nose/fix-doctests-unicode.patch
@@ -0,0 +1,21 @@
+Patch-Source: https://src.fedoraproject.org/cgit/rpms/python-nose.git/tree/python-nose-coverage4.patch
+
+--- a/nose/plugins/doctests.py
++++ b/nose/plugins/doctests.py
+@@ -49,6 +49,7 @@ test.
+ """
+ from __future__ import generators
+
++import codecs
+ import logging
+ import os
+ import sys
+@@ -259,7 +260,7 @@ class Doctest(Plugin):
+ """
+ if self.extension and anyp(filename.endswith, self.extension):
+ name = os.path.basename(filename)
+- dh = open(filename)
++ dh = codecs.open(filename, encoding='utf-8')
+ try:
+ doc = dh.read()
+ finally:
diff --git a/community/py3-nose/python3.5-compat.patch b/community/py3-nose/python3.5-compat.patch
new file mode 100644
index 0000000000..2eb58e085c
--- /dev/null
+++ b/community/py3-nose/python3.5-compat.patch
@@ -0,0 +1,42 @@
+From: Dmitry Shachnev <mitya57@gmail.com>
+Date: Mon, 1 Feb 2016 00:05:30 +0300
+Subject: [PATCH] Set __qualname__ equal to __name__ on derived classes
+
+To make output on Python ≥ 3.5 the same as on previous Python versions.
+
+This fixes #928.
+
+Patch-Source: https://github.com/nose-devs/nose/pull/983
+
+index 42f8563d..13d0c8a2 100644
+--- a/functional_tests/test_load_tests_from_test_case.py
++++ b/functional_tests/test_load_tests_from_test_case.py
+@@ -29,6 +29,7 @@ def setUp(self):
+ pass
+ def tearDown(self):
+ pass
++ Derived.__qualname__ = Derived.__name__
+ # must use nose loader here because the default loader in 2.3
+ # won't load tests from base classes
+ l = loader.TestLoader()
+index bfe16589..80ab1d4e 100644
+--- a/nose/util.py
++++ b/nose/util.py
+@@ -643,6 +643,7 @@ class C(cls):
+ pass
+ C.__module__ = module
+ C.__name__ = cls.__name__
++ C.__qualname__ = cls.__name__
+ return C
+
+
+index 944d2859..261436b0 100644
+--- a/unit_tests/test_xunit.py
++++ b/unit_tests/test_xunit.py
+@@ -16,6 +16,7 @@ def mktest():
+ class TC(unittest.TestCase):
+ def runTest(self):
+ pass
++ TC.__qualname__ = TC.__name__
+ test = TC()
+ return test
diff --git a/community/py3-nose/python3.6-compat.patch b/community/py3-nose/python3.6-compat.patch
new file mode 100644
index 0000000000..e6831bce80
--- /dev/null
+++ b/community/py3-nose/python3.6-compat.patch
@@ -0,0 +1,61 @@
+From: Tomas Orsava <torsava@redhat.com>
+Date: Mon, 12 Dec 2016 14:35:50 +0100
+Subject: [PATCH] Fix compatibility with Python 3.6
+
+Python 3.6 returns ModuleNotFoundError instead of the previous ImportError.
+
+Patch-Source: https://github.com/nose-devs/nose/pull/1029
+
+index 104f2209..906e2ba2 100644
+--- a/functional_tests/test_loader.py
++++ b/functional_tests/test_loader.py
+@@ -372,7 +372,7 @@ def test_failed_import_module_name(self):
+ assert res.errors, "Expected errors but got none"
+ assert not res.failures, res.failures
+ err = res.errors[0][0].test.exc_class
+- assert err is ImportError, \
++ assert issubclass(err, ImportError), \
+ "Expected import error, got %s" % err
+
+ def test_load_nonsense_name(self):
+index cf09d4fb..cb20886b 100644
+--- a/functional_tests/test_withid_failures.rst
++++ b/functional_tests/test_withid_failures.rst
+@@ -7,16 +7,16 @@
+ >>> support = os.path.join(os.path.dirname(__file__), 'support', 'id_fails')
+ >>> argv = [__file__, '-v', '--with-id', '--id-file', idfile, support]
+ >>> run(argv=argv, plugins=[TestId()]) # doctest: +ELLIPSIS
+- #1 Failure: ImportError (No module ...apackagethatdoesntexist...) ... ERROR
++ #1 Failure: ... (No module ...apackagethatdoesntexist...) ... ERROR
+ #2 test_b.test ... ok
+ #3 test_b.test_fail ... FAIL
+ <BLANKLINE>
+ ======================================================================
+- ERROR: Failure: ImportError (No module ...apackagethatdoesntexist...)
++ ERROR: Failure: ... (No module ...apackagethatdoesntexist...)
+ ----------------------------------------------------------------------
+ Traceback (most recent call last):
+ ...
+- ImportError: No module ...apackagethatdoesntexist...
++ ...: No module ...apackagethatdoesntexist...
+ <BLANKLINE>
+ ======================================================================
+ FAIL: test_b.test_fail
+@@ -35,14 +35,14 @@ Addressing failures works (sometimes).
+ >>> argv.append('1')
+ >>> _junk = sys.modules.pop('test_a', None) # 2.3 requires
+ >>> run(argv=argv, plugins=[TestId()]) #doctest: +ELLIPSIS
+- #1 Failure: ImportError (No module ...apackagethatdoesntexist...) ... ERROR
++ #1 Failure: ... (No module ...apackagethatdoesntexist...) ... ERROR
+ <BLANKLINE>
+ ======================================================================
+- ERROR: Failure: ImportError (No module ...apackagethatdoesntexist...)
++ ERROR: Failure: ... (No module ...apackagethatdoesntexist...)
+ ----------------------------------------------------------------------
+ Traceback (most recent call last):
+ ...
+- ImportError: No module ...apackagethatdoesntexist...
++ ...: No module ...apackagethatdoesntexist...
+ <BLANKLINE>
+ ----------------------------------------------------------------------
+ Ran 1 test in ...s
diff --git a/community/py3-oauth2/APKBUILD b/community/py3-oauth2/APKBUILD
new file mode 100644
index 0000000000..bb3929a026
--- /dev/null
+++ b/community/py3-oauth2/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Peter Bui <pnutzh4x0r@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-oauth2
+_pkgname=oauth2
+pkgver=1.9.0
+pkgrel=2
+pkgdesc="Python3 library for OAuth"
+url="https://github.com/simplegeo/python-oauth2"
+arch="noarch"
+license="MIT"
+depends="python3 py3-httplib2"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.post1.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver.post1
+
+replaces="py-oauth2" # Bakcwards compatibility
+provides="py-oauth2=$pkgver-r$pkgrel" # Bakcwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+
+ # Tests don't need to be installed
+ rm -rf "$pkgdir"/usr/lib/python3*/site-packages/tests/
+}
+
+sha512sums="a3b64eef331d4c4f59c275f14efb2dfb48ad60de47a59a88106f60d64428a09b76d8bedf08c98c113493968d83708b1478b4b61b2b5528b5b01fa22777daff4c oauth2-1.9.0.post1.tar.gz"
diff --git a/community/py3-oauth2client/APKBUILD b/community/py3-oauth2client/APKBUILD
new file mode 100644
index 0000000000..64a1824d32
--- /dev/null
+++ b/community/py3-oauth2client/APKBUILD
@@ -0,0 +1,32 @@
+# Maintainer:
+pkgname=py3-oauth2client
+_pkgname=oauth2client
+pkgver=4.1.3
+pkgrel=2
+pkgdesc="A client library for OAuth 2.0"
+options="!check" # Requires 'sqlalchemy' , 'fasteners' and 'flask'
+url="https://github.com/google/oauth2client"
+arch="noarch"
+license="Apache-2.0"
+depends="python3 py3-asn1 py3-httplib2 py3-asn1-modules py3-rsa py3-six"
+makedepends="py3-setuptools"
+checkdepends="py3-mock py3-openssl py3-django"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-oauth2client" # Backwards compatibility
+provides="py-oauth2client=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="6ca6830c0461295b60598ef3e7ee047aa9fa463d1d2c19c18d6b8606a5b30b11f0798e06c51bd5be63afd8d408442fd846c2867f112655186f55c7dc8e0b7786 oauth2client-4.1.3.tar.gz"
diff --git a/community/py3-oauthlib/APKBUILD b/community/py3-oauthlib/APKBUILD
new file mode 100644
index 0000000000..f767d8b8f8
--- /dev/null
+++ b/community/py3-oauthlib/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Eivind Uggedal <eu@eju.no>
+# Maintainer:
+pkgname=py3-oauthlib
+_pkgname=oauthlib
+pkgver=2.1.0
+pkgrel=3
+pkgdesc="Python3 implementation of the OAuth request-signing logic"
+options="!check" # requires 'blinker' that is in testing/
+url="https://github.com/idan/oauthlib"
+arch="noarch"
+license="BSD"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-nose py3-cryptography py3-jwt" # py3-blinker"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-oauthlib" # Backwards compatibility
+provides="py-oauthlib=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="bd749c7b65de00cc0c371053577623aca5767a0b20e41b2d5e3e20f8246e84bf360472b4ec983023227d6164ecd7ed4647c41cd8f425fe21200a2c25a9049ffd oauthlib-2.1.0.tar.gz"
diff --git a/community/py3-openssl/APKBUILD b/community/py3-openssl/APKBUILD
new file mode 100644
index 0000000000..6860582f45
--- /dev/null
+++ b/community/py3-openssl/APKBUILD
@@ -0,0 +1,32 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-openssl
+_pkgname=pyOpenSSL
+pkgver=19.1.0
+pkgrel=0
+pkgdesc="Python3 wrapper module around the OpenSSL library"
+url="https://github.com/pyca/pyopenssl"
+arch="noarch"
+license="Apache-2.0"
+depends="python3 py3-cryptography py3-six"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+options="!check" # depends on flaky
+
+replaces="py-openssl" # Backwards compatibility
+provides="py-openssl=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="4acd96f287d72eb11bd812697d28cd6eb6a96a4653248b65f967187830a6b17cc1254775a18a3405469f3d45abdae6f02d165f2f35f035f3174c2826fba82916 pyOpenSSL-19.1.0.tar.gz"
diff --git a/community/py3-purl/APKBUILD b/community/py3-purl/APKBUILD
new file mode 100644
index 0000000000..1c2f963606
--- /dev/null
+++ b/community/py3-purl/APKBUILD
@@ -0,0 +1,30 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-purl
+_pkgname=purl
+pkgver=1.5
+pkgrel=3
+pkgdesc="An immutable Python3 URL class for easy URL-building and manipulation"
+url="https://github.com/codeinthehole/purl"
+arch="noarch"
+license="MIT"
+depends="py3-six"
+# Tests are not included in the tarball
+options="!check"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-purl" # Backwards compatibility
+provides="py-purl=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="e7ef3dbe51117c2807a5cd472967d90c9f16fc1090f2edcaf3c4fe0bbc95b8ef8d612d5ca98401caf5a94c5b0335949ac0ac490bc694e571ff516b7bf53fae32 purl-1.5.tar.gz"
diff --git a/community/py3-pycountry/APKBUILD b/community/py3-pycountry/APKBUILD
new file mode 100644
index 0000000000..17f3694d3f
--- /dev/null
+++ b/community/py3-pycountry/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Francesco Colista <francesco.colista@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-pycountry
+_pkgname=pycountry
+pkgver=19.8.18
+pkgrel=1
+pkgdesc="ISO country, subdivision, language, currency and script definitions and their translations"
+url="https://pypi.org/project/pycountry"
+arch="noarch"
+license="LGPL-2.1-only"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-country py-pycountry" # Backwards compatibility
+provides="py-country=$pkgver-r$pkgrel py-pycountry=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ PYTHONPATH="$builddir/build/lib" py.test-3 -v
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="39ba06629eeea55460424d06992ca5f1e5bf6168b219dc4880ec326f6aa0c92a4fdc54d4143a8b8bb1490149af793e760e291c6d704104a57ba91e88228ab669 pycountry-19.8.18.tar.gz"
diff --git a/community/py3-pylast/APKBUILD b/community/py3-pylast/APKBUILD
new file mode 100644
index 0000000000..2ddb3bb776
--- /dev/null
+++ b/community/py3-pylast/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-pylast
+pkgver=3.2.1
+pkgrel=0
+pkgdesc="A Python interface to the last.fm API"
+url="https://github.com/pylast/pylast"
+arch="noarch"
+license="Apache"
+replaces="py-pylast"
+# Requires unpackaged flaky
+options="!check"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/p/pylast/pylast-$pkgver.tar.gz"
+builddir="$srcdir"/pylast-$pkgver
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+
+sha512sums="982324745c92adaaed6be94c2d947fbc4a3d716e56cbd84c797ba85b4160a169e19ccb6b735a6904665b346aa41cef851e2756b9620055f4e441aae3fb245372 pylast-3.2.1.tar.gz"
diff --git a/community/py3-redis/APKBUILD b/community/py3-redis/APKBUILD
new file mode 100644
index 0000000000..c797496d6f
--- /dev/null
+++ b/community/py3-redis/APKBUILD
@@ -0,0 +1,35 @@
+# Maintainer: Eivind Uggedal <eu@eju.no>
+pkgname=py3-redis
+_pkgname=redis
+pkgver=3.2.1
+pkgrel=2
+pkgdesc="Python3 client for Redis key-value store"
+url="https://github.com/andymccurdy/redis-py"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest py3-mock redis"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-redis" # Backwards compatibility
+provides="py-redis=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ redis-server --dir "$builddir"&
+ local _redispid=$!
+
+ python3 setup.py test || (kill $_redispid && false)
+ kill $_redispid
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="be51642a8895325c3c61993dd83c3299a9e2cefc1010e04f182833f720ff161bea43d3a57d28afba991949fcf6e967c4f778002967641bffe651d5db384f2e08 redis-3.2.1.tar.gz"
diff --git a/community/py3-roman/APKBUILD b/community/py3-roman/APKBUILD
new file mode 100644
index 0000000000..4c854067fe
--- /dev/null
+++ b/community/py3-roman/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Matt Smith <mcs@darkregion.net>
+# Maintainer: Matt Smith <mcs@darkregion.net>
+pkgname=py3-roman
+_pkgname=roman
+pkgver=3.2
+pkgrel=2
+pkgdesc="Integer to Roman numerals converter"
+url="https://pypi.python.org/pypi/roman"
+arch="noarch"
+license="Python-2.0"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-roman" # Backwards compatibility
+provides="py-roman=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="142904551745c8b7874d52c8d04f483b0c18b18ba8bc3d3a51fcf509e09b3a3f8a28d0b88bdd8282957bf3d698b1bab86de7fb4808cde9b0e5cfb910deca35ab roman-3.2.tar.gz"
diff --git a/community/py3-rsa/APKBUILD b/community/py3-rsa/APKBUILD
new file mode 100644
index 0000000000..724270bed7
--- /dev/null
+++ b/community/py3-rsa/APKBUILD
@@ -0,0 +1,27 @@
+# Maintainer:
+# Contributor: Valery Kartel <valery.kartel@gmail.com>
+pkgname=py3-rsa
+_pkgname=rsa
+pkgver=3.4.2
+pkgrel=5
+pkgdesc="Pure-Python3 RSA implementation"
+url="https://stuvel.eu/rsa"
+arch="noarch"
+license="Apache-2.0"
+depends="python3 py3-asn1"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-rsa" # Backwards compatibility
+provides="py-rsa=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="62b0ff31fb3b9c18ae65bd102329e69726b853560576b1b66b9b89b26d3ff79154239af7e7a581b6a27c7017cc013f738762cd9662777ef594cc11c5b1f8e267 rsa-3.4.2.tar.gz"
diff --git a/community/py3-simpleparse/APKBUILD b/community/py3-simpleparse/APKBUILD
new file mode 100644
index 0000000000..6d8654b1c4
--- /dev/null
+++ b/community/py3-simpleparse/APKBUILD
@@ -0,0 +1,24 @@
+# Maintainer: Leonardo Arena <rnalrd@alpinelinux.org>
+pkgname=py3-simpleparse
+_pkgname=SimpleParse
+pkgver=2.2.0
+pkgrel=2
+pkgdesc="Python library providing simple and fast parser generator"
+url="https://launchpad.net/simpleparse"
+arch="all"
+license="eGenix ISC"
+depends="python3"
+makedepends="python3-dev"
+options="!check" # no test suite
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.zip"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --skip-build --root="$pkgdir"
+}
+
+sha512sums="90956843384739b52a0dc5397633f089c519b4acf922ad953dba49686a4e2c243f8bff6586c1f54c84cdef0c9555fbf6681c41ca70a4bf0f716f2892ae913b0e SimpleParse-2.2.0.zip"
diff --git a/community/py3-unidecode/APKBUILD b/community/py3-unidecode/APKBUILD
new file mode 100644
index 0000000000..30beed8c44
--- /dev/null
+++ b/community/py3-unidecode/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-unidecode
+_pkgname=Unidecode
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="Python3 ASCII transliterations of Unicode text"
+url="https://pypi.python.org/pypi/Unidecode"
+arch="noarch"
+license="GPL-2.0-or-later"
+depends="python3 py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+
+ # Add version suffix to executable files.
+ local path; for path in "$pkgdir"/usr/bin/*; do
+ mv "$path" "$path"-3
+ done
+
+ mkdir -p "$pkgdir"/usr/bin
+ ln -s unidecode-3 "$pkgdir"/usr/bin/unidecode
+}
+
+sha512sums="5474f04be843ed94ddceb1a7e5f1ca986ee5f2e88ee35bd9347784c7a11b51e1d94d61e1a2a10dd2e71b3587c5b7b76717756f6cf4e2446d83222178c2360696 Unidecode-1.1.1.tar.gz"
diff --git a/community/py3-uritemplate/APKBUILD b/community/py3-uritemplate/APKBUILD
new file mode 100644
index 0000000000..39bf0a632b
--- /dev/null
+++ b/community/py3-uritemplate/APKBUILD
@@ -0,0 +1,28 @@
+# Contributor: Peter Bui <pnutzh4x0r@gmail.com>
+# Maintainer: Fabian Affolter <fabian@affolter-engineering.ch>
+pkgname=py3-uritemplate
+_pkgname=uritemplate
+pkgver=3.0.1
+pkgrel=0
+pkgdesc="Python3 module to use URO templates"
+url="https://uritemplate.readthedocs.org"
+arch="noarch"
+license="BSD-3-Clause OR Apache-2.0"
+options="!check"
+depends="python3"
+makedepends="py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-uritemplate" # Backwards compatibility
+provides="py-uritemplate=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="260da5901d28ca2354d972e00ed468c9bcf2901f948cb7759ff3e9d3a7b67da90ba754e555d6695c5095801b106ffd422459f0860b901a75e01575e159eb8f48 uritemplate-3.0.1.tar.gz"
diff --git a/community/py3-urlgrabber/APKBUILD b/community/py3-urlgrabber/APKBUILD
new file mode 100644
index 0000000000..6759d4d319
--- /dev/null
+++ b/community/py3-urlgrabber/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-urlgrabber
+pkgver=4.1.0
+pkgrel=1
+pkgdesc="Python3 module for fetching files"
+url="http://urlgrabber.baseurl.org/"
+arch="noarch"
+license="LGPL-2.0-or-later"
+depends="python3 py3-curl py3-six"
+makedepends="py3-setuptools"
+subpackages="$pkgname-doc"
+source="https://github.com/rpm-software-management/urlgrabber/releases/download/urlgrabber-${pkgver//./-}/urlgrabber-$pkgver.tar.gz"
+
+# keep those til after alpine v3.11
+provides="py-urlgrabber=$pkgver-r$pkgrel" # for backward compatibility
+replaces="py-urlgrabber" # for backward compatibility
+
+builddir="$srcdir"/urlgrabber-$pkgver
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="ab2e2707eb45cf460e2d7cebb0669ea1d20d9edc33ba526c19961314b76a3d8dd2bd932627c17756eac773e2f8bc63e8c9bba35a26487fc50735066c6404611a urlgrabber-4.1.0.tar.gz"
diff --git a/community/py3-vobject/APKBUILD b/community/py3-vobject/APKBUILD
new file mode 100644
index 0000000000..f8a984f8b7
--- /dev/null
+++ b/community/py3-vobject/APKBUILD
@@ -0,0 +1,29 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-vobject
+pkgver=0.9.6.1
+pkgrel=3
+pkgdesc="Module for parsing and generating vCard and vCalendar files"
+url="http://eventable.github.io/vobject/"
+arch="noarch"
+license="Apache-2.0"
+depends="python3 py3-dateutil"
+makedepends="py3-setuptools"
+source="$pkgname-$pkgver.tar.gz::https://github.com/eventable/vobject/archive/$pkgver.tar.gz"
+builddir="$srcdir"/vobject-$pkgver
+
+replaces="py-vobject" # Backwards compatibility
+provides="py-vobject=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+check() {
+ python3 tests.py
+}
+
+sha512sums="499f22a1a9e60398a89d3d6fa472a0b4c9dd00b98440a4ce873da824f83cef1b0a5eb9e5051267931707a3eef00a1d3fb83ff63ffe857b403c4ac3a131f18dff py3-vobject-0.9.6.1.tar.gz"
diff --git a/community/py3-werkzeug/APKBUILD b/community/py3-werkzeug/APKBUILD
new file mode 100644
index 0000000000..3ac83bc5e9
--- /dev/null
+++ b/community/py3-werkzeug/APKBUILD
@@ -0,0 +1,28 @@
+# Contributor:
+# Maintainer: prspkt <prspkt@protonmail.com>
+pkgname=py3-werkzeug
+_pkgname=Werkzeug
+pkgver=0.16.1
+pkgrel=0
+pkgdesc="The WSGI swiss-army knife"
+url="http://werkzeug.pocoo.org/"
+arch="noarch"
+license="MIT"
+depends="python3"
+makedepends="py3-setuptools"
+options="!check" # doesn't find its own modules even with PYTHONPATH set
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+replaces="py-werkzeug" # Backwards compatibility
+provides="py-werkzeug=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="1f27ea5b890c10df67726299c7656bab492e356021beec8f7a08413b386b7a884b64aaa16b80b60d7060a59c8c8e497ccc4c1e1e9104e8800dbfd7cf8b5b0d9c Werkzeug-0.16.1.tar.gz"
diff --git a/community/py3-wtforms/APKBUILD b/community/py3-wtforms/APKBUILD
new file mode 100644
index 0000000000..99bfda27d4
--- /dev/null
+++ b/community/py3-wtforms/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Leo <thinkabit.ukim@gmail.com>
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Contributor: Eivind Uggedal <eivind@uggedal.com>
+# Maintainer:
+pkgname=py3-wtforms
+_pkgname=WTForms
+pkgver=2.2.1
+pkgrel=3
+pkgdesc="A flexible forms validation and rendering Python library"
+options="!check" # No tests for python3
+url="http://wtforms.simplecodes.com/"
+arch="noarch"
+license="BSD-3-Clause"
+depends="python3"
+makedepends="py3-setuptools"
+checkdepends="py3-pytest"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+replaces="py-wtforms" # Backwards compatibility
+provides="py-wtforms=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="06478790a8a4bf728e5436edaa63c7c0e596f71d63b273e1f296f9255d9fa3e31a7bfa95971c214a8cea684034ac3c77b05371f4b4e14da9d9ef2c5afadabde0 WTForms-2.2.1.tar.gz"
diff --git a/community/py3-zope-interface/APKBUILD b/community/py3-zope-interface/APKBUILD
new file mode 100644
index 0000000000..4669e02902
--- /dev/null
+++ b/community/py3-zope-interface/APKBUILD
@@ -0,0 +1,28 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=py3-zope-interface
+_pkgname=zope.interface
+pkgver=5.0.2
+pkgrel=0
+pkgdesc="Separate distribution of the zope.interface package used in Zope"
+url="https://zopeinterface.readthedocs.io"
+arch="all"
+license="ZPL-2.1"
+makedepends="python3-dev py3-setuptools"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+replaces="py-zope-interface" # Backwards compatibility
+provides="py-zope-interface=$pkgver-r$pkgrel" # Backwards compatibility
+
+build() {
+ python3 setup.py build
+}
+
+check() {
+ python3 setup.py test
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="3e7ae0b6f8410a5baa8ade4728dde45af262584d3057149070fe025ae544d22b980fe566b0f18ff2c247a91256b2f84f0a8fbd0656e6528476b538efdd2f2520 zope.interface-5.0.2.tar.gz"