From b284a3168fa91a038925d2ecf5e4791011ea5e7d Mon Sep 17 00:00:00 2001
From: V3n3RiX <venerix@redcorelinux.org>
Date: Mon, 18 Nov 2019 10:15:03 +0000
Subject: gentoo resync : 18.11.2019

---
 dev-python/py/Manifest                      |  13 +-
 dev-python/py/files/py-1.8.0-pytest-4.patch | 580 ++++++++++++++++++++++++++++
 dev-python/py/py-1.4.30.ebuild              |   1 +
 dev-python/py/py-1.4.34.ebuild              |   1 +
 dev-python/py/py-1.5.2.ebuild               |   1 +
 dev-python/py/py-1.5.3.ebuild               |   1 +
 dev-python/py/py-1.5.4.ebuild               |   1 +
 dev-python/py/py-1.8.0.ebuild               |  51 +++
 8 files changed, 644 insertions(+), 5 deletions(-)
 create mode 100644 dev-python/py/files/py-1.8.0-pytest-4.patch
 create mode 100644 dev-python/py/py-1.8.0.ebuild

(limited to 'dev-python/py')

diff --git a/dev-python/py/Manifest b/dev-python/py/Manifest
index 018f24d0599b..ef8ecfbcb037 100644
--- a/dev-python/py/Manifest
+++ b/dev-python/py/Manifest
@@ -1,13 +1,16 @@
 AUX py-1.4.34-skip-broken-pytest3.patch 3991 BLAKE2B 4bb850c5e89d3ddc88a70c055b0e909ef26d692f721138a756b9bac6c2714c26546a89b58615d419cce72f6e205d38679724cc2ca651eeca3d759d585ba96aa2 SHA512 c2070aef37a410a0a8f9cd273396a1820170578f19fe1a8aeaf355171a7c83717aa91fd7b4121d429169a3cb496de498763cdc347f7553b799040ebce6ac76f0
 AUX py-1.5.2-skip-apiwarn-pytest31.patch 517 BLAKE2B a086d8130c1ead322461e7d89249f07e2dd9a6eee4f7e878bd8c01cf19df695a6a5698ec0cc50770f0514cbedbd2aa88e3fc356a72c78eab4b6bc378b5d1f590 SHA512 01da1bb928fe3b22a69a439481a1ebdac790811da781b7ee497ffa1b7362270628527b33f2d5dc0e83ebc2e57cdaf9fbd2974735f580931222f33e543fd69762
+AUX py-1.8.0-pytest-4.patch 21458 BLAKE2B bfc44034bc01a7ada894bbddf8989705ea96d5b455f0eb45f14f63999e73ac94dfa1eb42698e13b5867d0fadfb58c75fbe1c9cc7e40f290145552c625b938b38 SHA512 cabfdb8cd2e229bfbd5e770a145dde60f9e649f683f8e3d57d2cf393a4d246fcb0eae4596cbbee010de97bfca26470a5dd4280d0f9e34d7f30df19b09f5ea8b6
 DIST py-1.4.30.tar.gz 191796 BLAKE2B 1d908f5f29788868cb7c4da49bc8a9343176030df4549a992e06245d1d56d74ddf0477048992d282aa59e6ace1ff695a7e2c2c6f00b55f185bc91d0df8b6a6dd SHA512 dd9d92f8eaf8e5fc61bfb7feb4b07df5ae1745ebf88bcbe9d62589caa9e1f7d8beae5b2d20b407520919e47391cd50cf2d5323556fa5bd90a37e120b1d394d7a
 DIST py-1.4.34.tar.gz 194450 BLAKE2B 3e5733bb53d4f7eb8e6d43a5140f2ddf692d4272b564a9dd4fe8ede2cb4d0296e7c8764957bf4615f5cc4272d07997d126133dfce8ac8837f01d91bf557023d2 SHA512 2e19c82c8315274bffe0ba2c7e20ae3af95f942c40c16121ec953af186f8ff33e8f427c070e137bb04b7cc6dcc6779e35df3911c08595fd3294b5ec9897706e1
 DIST py-1.5.2.tar.gz 189542 BLAKE2B f0c5995121492ebca7bab9e73b7db61edf014be8e7d76822c72ded9ea19dd647dc0a83cbbcbf732c4ddae9070126cecb00958b623ca43d2219b7be8519b5b58e SHA512 ad92110d56caba2be44c6759350b05ceb882165ad0f58e6cce8361273be874b20b01856d685b142a83edff77b41bcce2911cf5797db5253b4f3e9b36e703c07d
 DIST py-1.5.3.tar.gz 202335 BLAKE2B 6a7ef206bddd641cb5e2fe04966ae93db96a7ff757fcde604f8fd2d36c4a03ce5955c2f445a866dd5cd83026ab2a9fa17feeb0da0df3d40d9746c19d865f6325 SHA512 243c0da94c439163257c525ef00b30fd6d8add5897121ee0b1f19476b50f18823ce2b99a5ab27a9cf47598b538758d0534060123dce0820d2a65d98046548c96
 DIST py-1.5.4.tar.gz 201448 BLAKE2B 3d9f71ba53c8004d4745be984e0a3b81c98f38fdcd7703c39286c53bb167a803aa92b3b0897e407f6ee98d2b870838a27b507ad8e6cceab7b22c8e7229bb6581 SHA512 45424b133be3e78ccab48e74daa6ca6a76fca283bd3a51d50c91e911c509a2c45de4fcc7c8c15f33620d61ee16dfc3969fdd78d8839e96f52897e97b1ad624c4
-EBUILD py-1.4.30.ebuild 1247 BLAKE2B 76d9514fd6e23471a8231983c8bb5b7f634179345763067999426e8f24ba25bcf5eb3d0a84a18a322c44aeb3da3ddc9982e3b29c5cdda8376faeec1a7b6e9cbb SHA512 84cc2a3c9b76fd19be0cf03f333fbee31b14bcb0ac69367e634e873276dc4ebc9fe12c071bf90c9a711d71da0dfd3dae6fd008a661abd710d31900409e7eb71d
-EBUILD py-1.4.34.ebuild 1315 BLAKE2B ecfd6a79bca44f8910d0ad75bcc9525d903437963c828bf44746843896527941e4c00d5e0a13a1aeae847340075b387733549878607b560509e0c4237bf4a7a2 SHA512 6f08f7408c9f7c76b11ba7faf382fc1265f7e26cf226d2ce9afa7312f04d8201a9946505dd486e89ebd0da36071dbdef3c87c7379a60c754ffb747feb3c1c558
-EBUILD py-1.5.2.ebuild 1320 BLAKE2B e25f535c7bb53371a3690be26908562a26517f648af32382fd6e71d295ffa4b6ee7c79f5824363a8f11df6643759c66515708d7da483e4be45659b4525666e93 SHA512 82bf96cb7a9ae2748714adf523fde21ec5e847f0b02a0b90b5862e98ea6100af6cf0e30b6403f144042dab418097a4b849ce1c813d50d26b85c6c1cbbf6af4cd
-EBUILD py-1.5.3.ebuild 1329 BLAKE2B ed56cebaa28619c202b1fbc38bb08252982b0cac731da02f01496c2eb9aa403f7cc02df15b28fe8cb0e1d80147b8b5a93f53f573b885814397eb731baaac2736 SHA512 20ed16aa009735f9c543aa3ea12183906774bf292bbcbbc99187e0260ddba41612f8032cb4f82100e884c840628ebf649b29a1affa01f5bfd1b08b560871d550
-EBUILD py-1.5.4.ebuild 1419 BLAKE2B 254ddbf014a4e4ceaaf0c0b8ea5fdb6b5b01dd6bcbec304804998c7578978754f501cc322d51a8e2a4f34c4fa74901c9e1aa659ce1a343848ac72c6412dcd342 SHA512 ba35f68eb64c0b53cbb2573b4d424fb2498a202895a284a044d08c9334d2c0dfe24b3df1c7471fad241495f9869ae15497eb4887cef9490ecdf878b9ecfd31c3
+DIST py-1.8.0.tar.gz 205096 BLAKE2B e08554fc3e0bae2e2d4515f075991707af29aa5c39e1387e8f8a7dab25e78c7340d389c79936ddea27b1fb0438ebdee8b5e218bbb48c62089d7fb656b1b6dbe8 SHA512 37b9a66229b834a034d9ba6769a46addf098380b494c1eb863607a52d00b7ec5b9157dd7ac6ffc52535a05006648c775c78716d7f85cf44966065b225be6e95b
+EBUILD py-1.4.30.ebuild 1274 BLAKE2B c7341c3f4d7cfded91f44af7d0fd3fc500b57f80b030e68d3babec8fdcb2d53f9ba79937dd4ea65b63efa0786cbaf15911819a4927e31ce1959ea04c38e5c986 SHA512 71f53b56b4774a70c41ee64f60082db143163ee345a4e44384da085baa411e23a242342ba88bfd23938b61fc1d7ca784bace2420da43134449869bda1d853caf
+EBUILD py-1.4.34.ebuild 1342 BLAKE2B 19982fe33c68c6045c70453f63e38364ba705bcd9137aa4fc5633dde43ddd97ecbc859d1957b466e499f656c8f35e5cea1a7c62d4ccb39865ead7c49c53f5832 SHA512 9adb3eaf529960d588de30b30f6cbf3b2512ababba3f4824169465c9ea7ec6a49841b9892a4252355f9693f1ac4864aa9e23226a3c8642bd8fe535f77bf6548a
+EBUILD py-1.5.2.ebuild 1347 BLAKE2B c928c85c5a4d959faf05dd48eff670d464794582fd463ab8eeefa5b2fe854e71f50729822711e8163891c7b167ff775aab5076b500ce516c5c5bb4cfdfc2689c SHA512 cf264f905453cc1e06dda9203d2b233a386cdd1909aa665a0ec1948d4111badc29f5f835a755f0dd38c2b3f984764abe79d421d29556a9aafb80cd9c97bc28f1
+EBUILD py-1.5.3.ebuild 1356 BLAKE2B d74458f2c0d1723566b536c41c47bacaed293b2089a1f738e6dcb022f0aa96518f62e2ba1aeb00b6d38b8ef337b0fb06ed04998b3518953f2f0fa7068772ae93 SHA512 7d6b28bb3b9ff871e18b9e1dd230077309479daddd79602dc63a442ef61caaad0701c34681a8cb36b0ac92eaf31ca5954f758d16e29db291843f53efb0b00286
+EBUILD py-1.5.4.ebuild 1446 BLAKE2B 17ef105867edca750d188a3e6c61ee2c00bf3212702abce41ffde6c3375b0fd1fc813a445555529eda4388b87aff5ebf469f395bea598e5ef9376e0f180b3fcd SHA512 5c5ed11dfcdf9ab023253975b8f622f4123fffbad9d54566bf2d8062d14ad8879eebf1080009f93dc1cd71fed8fc687ba6dbe82d80c258c4a3fdda3a934582f6
+EBUILD py-1.8.0.ebuild 1450 BLAKE2B ca2956a47c4b9e125e9d6f844085ca48a2ea179e6b29a2b70be56ff519e439a9ca6d0bd8c593f5be87ed61e998b211ef73ec15fed66036894670451ac4cde95c SHA512 e117a4c6e36b6cc8baea7fb06685069495b35c7cab341eab1fefd22ecbf61d0c059bd3b1fff815d6564bcaacab45266c61a855355c98aab33c94c10931d050ac
 MISC metadata.xml 315 BLAKE2B 3154c92be7826e4b562d5172b792f652ede8fff96b3fd3abebea5d6107eca432718bd0c8be7934a9f90a34891ce6e9b74d02c82881976cc86ed9635a0457b2da SHA512 e2ede56189d791c18b64d1db6615249e6ae5a3afd31f17b9ae6d23e9123d4c68a22bc61b7935deb284d2fa7e6732679e2286a271854dc818e7f651e9daa54fbe
diff --git a/dev-python/py/files/py-1.8.0-pytest-4.patch b/dev-python/py/files/py-1.8.0-pytest-4.patch
new file mode 100644
index 000000000000..d9d5cfa5b650
--- /dev/null
+++ b/dev-python/py/files/py-1.8.0-pytest-4.patch
@@ -0,0 +1,580 @@
+From f4ed62ad39f289d09b3efdfed7305f935ce60bfc Mon Sep 17 00:00:00 2001
+From: Stanislav Levin <slev@altlinux.org>
+Date: Tue, 4 Jun 2019 14:33:36 +0300
+Subject: [PATCH] Fix Pytest4.x compatibility errors
+
+This patch should fix such errors/warnings as:
+
+- raises / warns with a string as the second argument
+Deprecated since version 4.1.
+
+- pytest_funcarg__ prefix
+Removed in version 4.0.
+
+- getfuncargvalue
+
+- Metafunc.addcall
+Removed in version 4.0.
+
+Fixes: https://github.com/pytest-dev/py/issues/209
+Signed-off-by: Stanislav Levin <slev@altlinux.org>
+---
+ doc/faq.txt                                  | 14 -------------
+ testing/code/test_assertion.py               |  9 +++------
+ testing/code/test_code.py                    |  3 ++-
+ testing/code/test_excinfo.py                 | 12 ++++++-----
+ testing/code/test_source.py                  | 18 ++++++++---------
+ testing/io_/test_capture.py                  | 15 +++++++++-----
+ testing/io_/test_terminalwriter.py           | 17 ++++++++--------
+ testing/io_/test_terminalwriter_linewidth.py |  6 ++++++
+ testing/log/test_log.py                      |  6 ++++--
+ testing/path/common.py                       |  7 ++++---
+ testing/path/conftest.py                     | 16 +++++++--------
+ testing/path/test_cacheutil.py               |  6 ++++--
+ testing/path/test_svnauth.py                 |  6 ++++--
+ testing/path/test_svnurl.py                  | 21 +++++++++++++-------
+ testing/path/test_svnwc.py                   | 17 ++++++++++------
+ testing/root/test_builtin.py                 |  6 ++++--
+ testing/root/test_std.py                     |  3 ++-
+ 17 files changed, 100 insertions(+), 82 deletions(-)
+
+diff --git a/doc/faq.txt b/doc/faq.txt
+index 52cb4b3f..cac83b2c 100644
+--- a/doc/faq.txt
++++ b/doc/faq.txt
+@@ -98,20 +98,6 @@ in a managed class/module/function scope.
+ .. _`xUnit style setup`: test/xunit_setup.html
+ .. _`pytest_nose`: test/plugin/nose.html
+ 
+-.. _`why pytest_pyfuncarg__ methods?`:
+-
+-Why the ``pytest_funcarg__*`` name for funcarg factories?
+----------------------------------------------------------------
+-
+-When experimenting with funcargs an explicit registration mechanism
+-was considered.  But lacking a good use case for this indirection and
+-flexibility we decided to go for `Convention over Configuration`_ and
+-allow to directly specify the factory.  Besides removing the need
+-for an indirection it allows to "grep" for ``pytest_funcarg__MYARG``
+-and will safely find all factory functions for the ``MYARG`` function
+-argument.  It helps to alleviate the de-coupling of function
+-argument usage and creation.
+-
+ .. _`Convention over Configuration`: http://en.wikipedia.org/wiki/Convention_over_Configuration
+ 
+ Can I yield multiple values from a factory function?
+diff --git a/testing/code/test_assertion.py b/testing/code/test_assertion.py
+index e2a7f903..4cb39fe2 100644
+--- a/testing/code/test_assertion.py
++++ b/testing/code/test_assertion.py
+@@ -18,15 +18,12 @@ def test_assert():
+ 
+ 
+ def test_assert_within_finally():
+-    excinfo = py.test.raises(ZeroDivisionError, """
++    with py.test.raises(ZeroDivisionError,
++                        match=".*division.* by zero"):
+         try:
+-            1/0
++            1 / 0
+         finally:
+             i = 42
+-    """)
+-    s = excinfo.exconly()
+-    assert re.search("ZeroDivisionError:.*division", s) is not None
+-
+ 
+ def test_assert_multiline_1():
+     try:
+diff --git a/testing/code/test_code.py b/testing/code/test_code.py
+index 28ec628b..65328bb7 100644
+--- a/testing/code/test_code.py
++++ b/testing/code/test_code.py
+@@ -18,7 +18,8 @@ def test_code_gives_back_name_for_not_existing_file():
+ def test_code_with_class():
+     class A:
+         pass
+-    py.test.raises(TypeError, "py.code.Code(A)")
++    with py.test.raises(TypeError):
++        py.code.Code(A)
+ 
+ if True:
+     def x():
+diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py
+index c148ab8c..05ec3d9c 100644
+--- a/testing/code/test_excinfo.py
++++ b/testing/code/test_excinfo.py
+@@ -145,7 +145,8 @@ def test_traceback_cut(self):
+ 
+     def test_traceback_cut_excludepath(self, testdir):
+         p = testdir.makepyfile("def f(): raise ValueError")
+-        excinfo = py.test.raises(ValueError, "p.pyimport().f()")
++        with py.test.raises(ValueError) as excinfo:
++            p.pyimport().f()
+         basedir = py.path.local(py.test.__file__).dirpath()
+         newtraceback = excinfo.traceback.cut(excludepath=basedir)
+         for x in newtraceback:
+@@ -273,8 +274,8 @@ def test_tbentry_reinterpret():
+ def test_excinfo_exconly():
+     excinfo = py.test.raises(ValueError, h)
+     assert excinfo.exconly().startswith('ValueError')
+-    excinfo = py.test.raises(ValueError,
+-        "raise ValueError('hello\\nworld')")
++    with py.test.raises(ValueError) as excinfo:
++        raise ValueError('hello\\nworld')
+     msg = excinfo.exconly(tryshort=True)
+     assert msg.startswith('ValueError')
+     assert msg.endswith("world")
+@@ -350,10 +351,11 @@ def test_codepath_Queue_example():
+ 
+ 
+ class TestFormattedExcinfo:
+-    def pytest_funcarg__importasmod(self, request):
++    @pytest.fixture
++    def importasmod(self, request):
+         def importasmod(source):
+             source = py.code.Source(source)
+-            tmpdir = request.getfuncargvalue("tmpdir")
++            tmpdir = request.getfixturevalue("tmpdir")
+             modpath = tmpdir.join("mod.py")
+             tmpdir.ensure("__init__.py")
+             modpath.write(source)
+diff --git a/testing/code/test_source.py b/testing/code/test_source.py
+index 3492761a..676dcb0a 100644
+--- a/testing/code/test_source.py
++++ b/testing/code/test_source.py
+@@ -272,7 +272,8 @@ def test_compile_and_getsource(self):
+         co = self.source.compile()
+         py.builtin.exec_(co, globals())
+         f(7)
+-        excinfo = py.test.raises(AssertionError, "f(6)")
++        with py.test.raises(AssertionError) as excinfo:
++            f(6)
+         frame = excinfo.traceback[-1].frame
+         stmt = frame.code.fullsource.getstatement(frame.lineno)
+         #print "block", str(block)
+@@ -326,14 +327,13 @@ def __init__(self, *args):
+ 
+ def test_getline_finally():
+     def c(): pass
+-    excinfo = py.test.raises(TypeError, """
+-           teardown = None
+-           try:
+-                c(1)
+-           finally:
+-                if teardown:
+-                    teardown()
+-    """)
++    with py.test.raises(TypeError) as excinfo:
++       teardown = None
++       try:
++            c(1)
++       finally:
++            if teardown:
++                teardown()
+     source = excinfo.traceback[-1].statement
+     assert str(source).strip() == 'c(1)'
+ 
+diff --git a/testing/io_/test_capture.py b/testing/io_/test_capture.py
+index b5fedd0a..652c8b7f 100644
+--- a/testing/io_/test_capture.py
++++ b/testing/io_/test_capture.py
+@@ -1,6 +1,7 @@
+ from __future__ import with_statement
+ 
+ import os, sys
++import pytest
+ import py
+ 
+ needsdup = py.test.mark.skipif("not hasattr(os, 'dup')")
+@@ -45,7 +46,8 @@ def test_unicode_and_str_mixture(self):
+         f = py.io.TextIO()
+         if sys.version_info >= (3,0):
+             f.write("\u00f6")
+-            py.test.raises(TypeError, "f.write(bytes('hello', 'UTF-8'))")
++            with py.test.raises(TypeError):
++                f.write(bytes('hello', 'UTF-8'))
+         else:
+             f.write(unicode("\u00f6", 'UTF-8'))
+             f.write("hello") # bytes
+@@ -56,7 +58,8 @@ def test_unicode_and_str_mixture(self):
+ def test_bytes_io():
+     f = py.io.BytesIO()
+     f.write(tobytes("hello"))
+-    py.test.raises(TypeError, "f.write(totext('hello'))")
++    with py.test.raises(TypeError):
++        f.write(totext('hello'))
+     s = f.getvalue()
+     assert s == tobytes("hello")
+ 
+@@ -70,8 +73,9 @@ def test_dontreadfrominput():
+     py.test.raises(ValueError, f.fileno)
+     f.close() # just for completeness
+ 
+-def pytest_funcarg__tmpfile(request):
+-    testdir = request.getfuncargvalue("testdir")
++@pytest.fixture
++def tmpfile(request):
++    testdir = request.getfixturevalue("testdir")
+     f = testdir.makepyfile("").open('wb+')
+     request.addfinalizer(f.close)
+     return f
+@@ -315,7 +319,8 @@ def test_stdin_nulled_by_default(self):
+         print ("XXX which indicates an error in the underlying capturing")
+         print ("XXX mechanisms")
+         cap = self.getcapture()
+-        py.test.raises(IOError, "sys.stdin.read()")
++        with py.test.raises(IOError):
++            sys.stdin.read()
+         out, err = cap.reset()
+ 
+     def test_suspend_resume(self):
+diff --git a/testing/io_/test_terminalwriter.py b/testing/io_/test_terminalwriter.py
+index 1eef7f7d..2953dfff 100644
+--- a/testing/io_/test_terminalwriter.py
++++ b/testing/io_/test_terminalwriter.py
+@@ -107,14 +107,11 @@ def test_unicode_on_file_with_ascii_encoding(tmpdir, monkeypatch, encoding):
+ 
+ win32 = int(sys.platform == "win32")
+ class TestTerminalWriter:
+-    def pytest_generate_tests(self, metafunc):
+-        if "tw" in metafunc.funcargnames:
+-            metafunc.addcall(id="path", param="path")
+-            metafunc.addcall(id="stringio", param="stringio")
+-            metafunc.addcall(id="callable", param="callable")
+-    def pytest_funcarg__tw(self, request):
++
++    @pytest.fixture(params=["path", "stringio", "callable"])
++    def tw(self, request):
+         if request.param == "path":
+-            tmpdir = request.getfuncargvalue("tmpdir")
++            tmpdir = request.getfixturevalue("tmpdir")
+             p = tmpdir.join("tmpfile")
+             f = codecs.open(str(p), 'w+', encoding='utf8')
+             tw = py.io.TerminalWriter(f)
+@@ -182,8 +179,10 @@ def test_markup(self, tw):
+             for color in ("red", "green"):
+                 text2 = tw.markup("hello", **{color: True, 'bold': bold})
+                 assert text2.find("hello") != -1
+-        py.test.raises(ValueError, "tw.markup('x', wronkw=3)")
+-        py.test.raises(ValueError, "tw.markup('x', wronkw=0)")
++        with py.test.raises(ValueError):
++            tw.markup('x', wronkw=3)
++        with py.test.raises(ValueError):
++            tw.markup('x', wronkw=0)
+ 
+     def test_line_write_markup(self, tw):
+         tw.hasmarkup = True
+diff --git a/testing/io_/test_terminalwriter_linewidth.py b/testing/io_/test_terminalwriter_linewidth.py
+index e6d84fbf..1fe2810e 100644
+--- a/testing/io_/test_terminalwriter_linewidth.py
++++ b/testing/io_/test_terminalwriter_linewidth.py
+@@ -1,6 +1,8 @@
+ # coding: utf-8
+ from __future__ import unicode_literals
+ 
++import pytest
++
+ from py._io.terminalwriter import TerminalWriter
+ 
+ 
+@@ -31,6 +33,10 @@ def test_terminal_writer_line_width_update_with_wide_text():
+     assert tw.width_of_current_line == 21  # 5*2 + 1 + 5*2
+ 
+ 
++@pytest.mark.skipif(
++    'sys.version_info > (3,)',
++    reason='Bytes are not accepted'
++           ' https://github.com/pytest-dev/pytest/issues/4861')
+ def test_terminal_writer_line_width_update_with_wide_bytes():
+     tw = TerminalWriter()
+     tw.write('乇乂ㄒ尺卂 ㄒ卄丨匚匚'.encode('utf-8'))
+diff --git a/testing/log/test_log.py b/testing/log/test_log.py
+index 5c706d9b..ebf12705 100644
+--- a/testing/log/test_log.py
++++ b/testing/log/test_log.py
+@@ -89,8 +89,10 @@ def test_simple_consumer_match_2(self):
+ 
+     def test_no_auto_producer(self):
+         p = py.log.Producer('x')
+-        py.test.raises(AttributeError, "p._x")
+-        py.test.raises(AttributeError, "p.x_y")
++        with py.test.raises(AttributeError):
++            p._x
++        with py.test.raises(AttributeError):
++            p.x_y
+ 
+     def test_setconsumer_with_producer(self):
+         l = []
+diff --git a/testing/path/common.py b/testing/path/common.py
+index d69a1c39..14558222 100644
+--- a/testing/path/common.py
++++ b/testing/path/common.py
+@@ -155,8 +155,8 @@ def test_listdir(self, path1):
+         l = path1.listdir()
+         assert path1.join('sampledir') in l
+         assert path1.join('samplefile') in l
+-        py.test.raises(py.error.ENOTDIR,
+-                       "path1.join('samplefile').listdir()")
++        with py.test.raises(py.error.ENOTDIR):
++            path1.join('samplefile').listdir()
+ 
+     def test_listdir_fnmatchstring(self, path1):
+         l = path1.listdir('s*dir')
+@@ -300,7 +300,8 @@ def test_mtime(self, path1):
+         assert url.mtime() > 0
+ 
+     def test_relto_wrong_type(self, path1):
+-        py.test.raises(TypeError, "path1.relto(42)")
++        with py.test.raises(TypeError):
++            path1.relto(42)
+ 
+     def test_load(self, path1):
+         p = path1.join('samplepickle')
+diff --git a/testing/path/conftest.py b/testing/path/conftest.py
+index 84fb5c82..015bd039 100644
+--- a/testing/path/conftest.py
++++ b/testing/path/conftest.py
+@@ -1,20 +1,19 @@
+ import py
+ import sys
++import pytest
+ from py._path import svnwc as svncommon
+ 
+ svnbin = py.path.local.sysfind('svn')
+ repodump = py.path.local(__file__).dirpath('repotest.dump')
+ from py.builtin import print_
+ 
+-def pytest_funcarg__repowc1(request):
++@pytest.fixture
++def repowc1(request):
+     if svnbin is None:
+         py.test.skip("svn binary not found")
+ 
+-    tmpdir = request.getfuncargvalue("tmpdir")
+-    repo, repourl, wc = request.cached_setup(
+-        setup=lambda: getrepowc(tmpdir, "path1repo", "path1wc"),
+-        scope="module",
+-    )
++    tmpdir = request.getfixturevalue("tmpdir")
++    repo, repourl, wc = getrepowc(tmpdir, "path1repo", "path1wc")
+     for x in ('test_remove', 'test_move', 'test_status_deleted'):
+         if request.function.__name__.startswith(x):
+             #print >>sys.stderr, ("saving repo", repo, "for", request.function)
+@@ -22,8 +21,9 @@ def pytest_funcarg__repowc1(request):
+             request.addfinalizer(lambda: restore_repowc(_savedrepowc))
+     return repo, repourl, wc
+ 
+-def pytest_funcarg__repowc2(request):
+-    tmpdir = request.getfuncargvalue("tmpdir")
++@pytest.fixture
++def repowc2(request):
++    tmpdir = request.getfixturevalue("tmpdir")
+     name = request.function.__name__
+     repo, url, wc = getrepowc(tmpdir, "%s-repo-2" % name, "%s-wc-2" % name)
+     return repo, url, wc
+diff --git a/testing/path/test_cacheutil.py b/testing/path/test_cacheutil.py
+index c9fc0746..76023a04 100644
+--- a/testing/path/test_cacheutil.py
++++ b/testing/path/test_cacheutil.py
+@@ -12,12 +12,14 @@ def test_getorbuild(self):
+         assert val == 42
+ 
+     def test_cache_get_key_error(self):
+-        pytest.raises(KeyError, "self.cache._getentry(-23)")
++        with pytest.raises(KeyError):
++            self.cache._getentry(-23)
+ 
+     def test_delentry_non_raising(self):
+         self.cache.getorbuild(100, lambda: 100)
+         self.cache.delentry(100)
+-        pytest.raises(KeyError, "self.cache._getentry(100)")
++        with pytest.raises(KeyError):
++            self.cache._getentry(100)
+ 
+     def test_delentry_raising(self):
+         self.cache.getorbuild(100, lambda: 100)
+diff --git a/testing/path/test_svnauth.py b/testing/path/test_svnauth.py
+index 654f0332..d24028dd 100644
+--- a/testing/path/test_svnauth.py
++++ b/testing/path/test_svnauth.py
+@@ -2,6 +2,7 @@
+ from py.path import SvnAuth
+ import time
+ import sys
++import pytest
+ 
+ svnbin = py.path.local.sysfind('svn')
+ 
+@@ -261,7 +262,8 @@ def test_propget(self):
+         u.propget('foo')
+         assert '--username="foo" --password="bar"' in u.commands[0]
+ 
+-def pytest_funcarg__setup(request):
++@pytest.fixture
++def setup(request):
+     return Setup(request)
+ 
+ class Setup:
+@@ -271,7 +273,7 @@ def __init__(self, request):
+         if not request.config.option.runslowtests:
+             py.test.skip('use --runslowtests to run these tests')
+ 
+-        tmpdir = request.getfuncargvalue("tmpdir")
++        tmpdir = request.getfixturevalue("tmpdir")
+         repodir = tmpdir.join("repo")
+         py.process.cmdexec('svnadmin create %s' % repodir)
+         if sys.platform == 'win32':
+diff --git a/testing/path/test_svnurl.py b/testing/path/test_svnurl.py
+index 15fbea50..7cea4f2b 100644
+--- a/testing/path/test_svnurl.py
++++ b/testing/path/test_svnurl.py
+@@ -2,10 +2,12 @@
+ from py._path.svnurl import InfoSvnCommand
+ import datetime
+ import time
++import pytest
+ from svntestbase import CommonSvnTests
+ 
+-def pytest_funcarg__path1(request):
+-    repo, repourl, wc = request.getfuncargvalue("repowc1")
++@pytest.fixture
++def path1(request):
++    repo, repourl, wc = request.getfixturevalue("repowc1")
+     return py.path.svnurl(repourl)
+ 
+ class TestSvnURLCommandPath(CommonSvnTests):
+@@ -20,10 +22,12 @@ def test_visit_ignore(self, path1):
+         super(TestSvnURLCommandPath, self).test_visit_ignore(path1)
+ 
+     def test_svnurl_needs_arg(self, path1):
+-        py.test.raises(TypeError, "py.path.svnurl()")
++        with py.test.raises(TypeError):
++            py.path.svnurl()
+ 
+     def test_svnurl_does_not_accept_None_either(self, path1):
+-        py.test.raises(Exception, "py.path.svnurl(None)")
++        with py.test.raises(Exception):
++            py.path.svnurl(None)
+ 
+     def test_svnurl_characters_simple(self, path1):
+         py.path.svnurl("svn+ssh://hello/world")
+@@ -32,7 +36,8 @@ def test_svnurl_characters_at_user(self, path1):
+         py.path.svnurl("http://user@host.com/some/dir")
+ 
+     def test_svnurl_characters_at_path(self, path1):
+-        py.test.raises(ValueError, 'py.path.svnurl("http://host.com/foo@bar")')
++        with py.test.raises(ValueError):
++            py.path.svnurl("http://host.com/foo@bar")
+ 
+     def test_svnurl_characters_colon_port(self, path1):
+         py.path.svnurl("http://host.com:8080/some/dir")
+@@ -45,7 +50,8 @@ def test_svnurl_characters_colon_path(self, path1):
+         # colons are allowed on win32, because they're part of the drive
+         # part of an absolute path... however, they shouldn't be allowed in
+         # other parts, I think
+-        py.test.raises(ValueError, 'py.path.svnurl("http://host.com/foo:bar")')
++        with py.test.raises(ValueError):
++            py.path.svnurl("http://host.com/foo:bar")
+ 
+     def test_export(self, path1, tmpdir):
+         tmpdir = tmpdir.join("empty")
+@@ -92,4 +98,5 @@ def test_svn_1_3_b(self):
+         assert info.kind == 'dir'
+ 
+ def test_badchars():
+-    py.test.raises(ValueError, "py.path.svnurl('http://host/tmp/@@@:')")
++    with py.test.raises(ValueError):
++        py.path.svnurl('http://host/tmp/@@@:')
+diff --git a/testing/path/test_svnwc.py b/testing/path/test_svnwc.py
+index c643d998..25a3650c 100644
+--- a/testing/path/test_svnwc.py
++++ b/testing/path/test_svnwc.py
+@@ -30,8 +30,9 @@ def test_make_repo(path1, tmpdir):
+     rev = wc.commit()
+     assert rev is None
+ 
+-def pytest_funcarg__path1(request):
+-    repo, repourl, wc = request.getfuncargvalue("repowc1")
++@pytest.fixture
++def path1(request):
++    repo, repourl, wc = request.getfixturevalue("repowc1")
+     return wc
+ 
+ class TestWCSvnCommandPath(CommonSvnTests):
+@@ -346,7 +347,8 @@ def test_lock_unlock(self, path1):
+         somefile = root.join('somefile')
+         somefile.ensure(file=True)
+         # not yet added to repo
+-        py.test.raises(Exception, 'somefile.lock()')
++        with py.test.raises(Exception):
++            somefile.lock()
+         somefile.write('foo')
+         somefile.commit('test')
+         assert somefile.check(versioned=True)
+@@ -357,13 +359,15 @@ def test_lock_unlock(self, path1):
+             assert locked[0].basename == somefile.basename
+             assert locked[0].dirpath().basename == somefile.dirpath().basename
+             #assert somefile.locked()
+-            py.test.raises(Exception, 'somefile.lock()')
++            with py.test.raises(Exception):
++                somefile.lock()
+         finally:
+             somefile.unlock()
+         #assert not somefile.locked()
+         locked = root.status().locked
+         assert locked == []
+-        py.test.raises(Exception, 'somefile,unlock()')
++        with py.test.raises(Exception):
++            somefile,unlock()
+         somefile.remove()
+ 
+     def test_commit_nonrecursive(self, path1):
+@@ -481,7 +485,8 @@ def test_svn_1_3(self, path1):
+ 
+ 
+ def test_characters_at():
+-    py.test.raises(ValueError, "py.path.svnwc('/tmp/@@@:')")
++    with py.test.raises(ValueError):
++        py.path.svnwc('/tmp/@@@:')
+ 
+ def test_characters_tilde():
+     py.path.svnwc('/tmp/test~')
+diff --git a/testing/root/test_builtin.py b/testing/root/test_builtin.py
+index 287c60d5..b2881de4 100644
+--- a/testing/root/test_builtin.py
++++ b/testing/root/test_builtin.py
+@@ -56,7 +56,8 @@ def test_frozenset():
+ 
+ def test_print_simple():
+     from py.builtin import print_
+-    py.test.raises(TypeError, "print_(hello=3)")
++    with py.test.raises(TypeError):
++        print_(hello=3)
+     f = py.io.TextIO()
+     print_("hello", "world", file=f)
+     s = f.getvalue()
+@@ -133,7 +134,8 @@ def test_reraise():
+         raise Exception()
+     except Exception:
+         cls, val, tb = sys.exc_info()
+-    excinfo = py.test.raises(Exception, "_reraise(cls, val, tb)")
++    with py.test.raises(Exception):
++        _reraise(cls, val, tb)
+ 
+ def test_exec():
+     l = []
+diff --git a/testing/root/test_std.py b/testing/root/test_std.py
+index 143556a0..dca0c671 100644
+--- a/testing/root/test_std.py
++++ b/testing/root/test_std.py
+@@ -6,7 +6,8 @@ def test_os():
+     assert py.std.os is os
+ 
+ def test_import_error_converts_to_attributeerror():
+-    py.test.raises(AttributeError, "py.std.xyzalskdj")
++    with py.test.raises(AttributeError):
++        py.std.xyzalskdj
+ 
+ def test_std_gets_it():
+     for x in py.std.sys.modules:
diff --git a/dev-python/py/py-1.4.30.ebuild b/dev-python/py/py-1.4.30.ebuild
index 88d58a1a2784..fdd19dd3a783 100644
--- a/dev-python/py/py-1.4.30.ebuild
+++ b/dev-python/py/py-1.4.30.ebuild
@@ -15,6 +15,7 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
 IUSE="doc test"
+RESTRICT="!test? ( test )"
 
 RDEPEND=""
 DEPEND="
diff --git a/dev-python/py/py-1.4.34.ebuild b/dev-python/py/py-1.4.34.ebuild
index 9125d9d3656f..38d4468a7379 100644
--- a/dev-python/py/py-1.4.34.ebuild
+++ b/dev-python/py/py-1.4.34.ebuild
@@ -15,6 +15,7 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~m68k ~mips ppc ppc64 s390 ~sh sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
 IUSE="doc test"
+RESTRICT="!test? ( test )"
 
 RDEPEND=""
 DEPEND="
diff --git a/dev-python/py/py-1.5.2.ebuild b/dev-python/py/py-1.5.2.ebuild
index 8dde250f65a2..fd462b5070b3 100644
--- a/dev-python/py/py-1.5.2.ebuild
+++ b/dev-python/py/py-1.5.2.ebuild
@@ -15,6 +15,7 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
 IUSE="doc test"
+RESTRICT="!test? ( test )"
 
 RDEPEND=""
 DEPEND="
diff --git a/dev-python/py/py-1.5.3.ebuild b/dev-python/py/py-1.5.3.ebuild
index 7ba6e0b70e2c..ed2578eea296 100644
--- a/dev-python/py/py-1.5.3.ebuild
+++ b/dev-python/py/py-1.5.3.ebuild
@@ -15,6 +15,7 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
 IUSE="doc test"
+RESTRICT="!test? ( test )"
 
 RDEPEND=""
 DEPEND="
diff --git a/dev-python/py/py-1.5.4.ebuild b/dev-python/py/py-1.5.4.ebuild
index cff4ffad8de1..3348c423dac4 100644
--- a/dev-python/py/py-1.5.4.ebuild
+++ b/dev-python/py/py-1.5.4.ebuild
@@ -15,6 +15,7 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~m68k ~mips ppc ppc64 s390 ~sh sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
 IUSE="doc test"
+RESTRICT="!test? ( test )"
 
 RDEPEND=""
 DEPEND="
diff --git a/dev-python/py/py-1.8.0.ebuild b/dev-python/py/py-1.8.0.ebuild
new file mode 100644
index 000000000000..4e22b868c12a
--- /dev/null
+++ b/dev-python/py/py-1.8.0.ebuild
@@ -0,0 +1,51 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python2_7 python3_{5,6,7,8} pypy{,3} )
+
+inherit distutils-r1
+
+DESCRIPTION="library with cross-python path, ini-parsing, io, code, log facilities"
+HOMEPAGE="https://pylib.readthedocs.io/en/latest/ https://pypi.org/project/py/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="doc"
+
+BDEPEND="
+	dev-python/setuptools[${PYTHON_USEDEP}]
+	dev-python/setuptools_scm[${PYTHON_USEDEP}]
+	doc? ( dev-python/sphinx )"
+
+PATCHES=(
+	"${FILESDIR}"/${PN}-1.5.2-skip-apiwarn-pytest31.patch
+	"${FILESDIR}"/${P}-pytest-4.patch
+)
+
+distutils_enable_tests pytest
+
+python_prepare_all() {
+	sed -e 's:intersphinx_mapping:#&:' -i doc/conf.py || die
+
+	distutils-r1_python_prepare_all
+
+	# broken, and relying on exact assertion strings
+	rm testing/code/test_assertion.py || die
+	# broken on py3.8, don't seem important
+	sed -i -e 's:test_syntaxerror_rerepresentation:_&:' \
+		-e 's:test_comments:_&:' \
+		testing/code/test_source.py || die
+}
+
+python_compile_all() {
+	use doc && emake -C doc html
+}
+
+python_install_all() {
+	use doc && local HTML_DOCS=( doc/_build/html/. )
+	distutils-r1_python_install_all
+}
-- 
cgit v1.2.3