python-py/pr_222.patch
Dirk Mueller 4ce4906c94 - Remove all traces of py._path.svn{url,wc}. (bsc#1204364, CVE-2022-42969)
- Add patch remove-svn-remants.patch to help with that goal.
- Refresh pr_222.patch as needed for above.


- Update in SLE-15 (bsc#1195916, bsc#1196696, jsc#PM-3356, jsc#SLE-23972)
- Drop CVE-2020-29651.patch, issue fixed upstream in 1.10.0

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:pytest/python-py?expand=0&rev=34
2023-09-06 21:15:54 +00:00

410 lines
15 KiB
Diff

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(-)
Index: py-1.9.0/testing/code/test_assertion.py
===================================================================
--- py-1.9.0.orig/testing/code/test_assertion.py
+++ py-1.9.0/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:
Index: py-1.9.0/testing/code/test_code.py
===================================================================
--- py-1.9.0.orig/testing/code/test_code.py
+++ py-1.9.0/testing/code/test_code.py
@@ -18,7 +18,8 @@ def test_code_gives_back_name_for_not_ex
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():
Index: py-1.9.0/testing/code/test_excinfo.py
===================================================================
--- py-1.9.0.orig/testing/code/test_excinfo.py
+++ py-1.9.0/testing/code/test_excinfo.py
@@ -145,7 +145,8 @@ class TestTraceback_f_g_h:
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)
Index: py-1.9.0/testing/code/test_source.py
===================================================================
--- py-1.9.0.orig/testing/code/test_source.py
+++ py-1.9.0/testing/code/test_source.py
@@ -272,7 +272,8 @@ class TestSourceParsingAndCompiling:
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 test_getstartingblock_multiline():
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)'
Index: py-1.9.0/testing/io_/test_capture.py
===================================================================
--- py-1.9.0.orig/testing/io_/test_capture.py
+++ py-1.9.0/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 @@ class TestTextIO:
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 @@ class TestTextIO:
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 @@ class TestStdCapture:
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):
Index: py-1.9.0/testing/io_/test_terminalwriter.py
===================================================================
--- py-1.9.0.orig/testing/io_/test_terminalwriter.py
+++ py-1.9.0/testing/io_/test_terminalwriter.py
@@ -107,14 +107,11 @@ def test_unicode_on_file_with_ascii_enco
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 @@ class TestTerminalWriter:
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
Index: py-1.9.0/testing/io_/test_terminalwriter_linewidth.py
===================================================================
--- py-1.9.0.orig/testing/io_/test_terminalwriter_linewidth.py
+++ py-1.9.0/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_upda
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'))
Index: py-1.9.0/testing/log/test_log.py
===================================================================
--- py-1.9.0.orig/testing/log/test_log.py
+++ py-1.9.0/testing/log/test_log.py
@@ -89,8 +89,10 @@ class TestLogConsumer:
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 = []
Index: py-1.9.0/testing/path/common.py
===================================================================
--- py-1.9.0.orig/testing/path/common.py
+++ py-1.9.0/testing/path/common.py
@@ -155,8 +155,8 @@ class CommonFSTests(object):
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 @@ class CommonFSTests(object):
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')
Index: py-1.9.0/testing/path/conftest.py
===================================================================
--- py-1.9.0.orig/testing/path/conftest.py
+++ py-1.9.0/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
Index: py-1.9.0/testing/path/test_cacheutil.py
===================================================================
--- py-1.9.0.orig/testing/path/test_cacheutil.py
+++ py-1.9.0/testing/path/test_cacheutil.py
@@ -12,12 +12,14 @@ class BasicCacheAPITest:
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)
Index: py-1.9.0/testing/root/test_builtin.py
===================================================================
--- py-1.9.0.orig/testing/root/test_builtin.py
+++ py-1.9.0/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 = []
Index: py-1.9.0/testing/root/test_std.py
===================================================================
--- py-1.9.0.orig/testing/root/test_std.py
+++ py-1.9.0/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: