mirror of
				https://github.com/arsenetar/dupeguru.git
				synced 2025-09-11 17:58:17 +00:00 
			
		
		
		
	Upgrade to latest pytest
- Currently some incompatibility in the hscommon tests, commented out the ones with issues temporarily - Also updated some deprecation warnings, still more to do
This commit is contained in:
		
							parent
							
								
									7658cdafbc
								
							
						
					
					
						commit
						e05c72ad8c
					
				@ -8,7 +8,7 @@ import os
 | 
				
			|||||||
import os.path as op
 | 
					import os.path as op
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from pytest import mark
 | 
					import pytest
 | 
				
			||||||
from hscommon.path import Path
 | 
					from hscommon.path import Path
 | 
				
			||||||
import hscommon.conflict
 | 
					import hscommon.conflict
 | 
				
			||||||
import hscommon.util
 | 
					import hscommon.util
 | 
				
			||||||
@ -109,7 +109,7 @@ class TestCaseDupeGuru:
 | 
				
			|||||||
        add_fake_files_to_directories(app.directories, [f1, f2])
 | 
					        add_fake_files_to_directories(app.directories, [f1, f2])
 | 
				
			||||||
        app.start_scanning()  # no exception
 | 
					        app.start_scanning()  # no exception
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @mark.skipif("not hasattr(os, 'link')")
 | 
					    @pytest.mark.skipif("not hasattr(os, 'link')")
 | 
				
			||||||
    def test_ignore_hardlink_matches(self, tmpdir):
 | 
					    def test_ignore_hardlink_matches(self, tmpdir):
 | 
				
			||||||
        # If the ignore_hardlink_matches option is set, don't match files hardlinking to the same
 | 
					        # If the ignore_hardlink_matches option is set, don't match files hardlinking to the same
 | 
				
			||||||
        # inode.
 | 
					        # inode.
 | 
				
			||||||
@ -133,8 +133,9 @@ class TestCaseDupeGuru:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCaseDupeGuru_clean_empty_dirs:
 | 
					class TestCaseDupeGuru_clean_empty_dirs:
 | 
				
			||||||
    def pytest_funcarg__do_setup(self, request):
 | 
					    @pytest.fixture
 | 
				
			||||||
        monkeypatch = request.getfuncargvalue("monkeypatch")
 | 
					    def do_setup(self, request):
 | 
				
			||||||
 | 
					        monkeypatch = request.getfixturevalue("monkeypatch")
 | 
				
			||||||
        monkeypatch.setattr(
 | 
					        monkeypatch.setattr(
 | 
				
			||||||
            hscommon.util,
 | 
					            hscommon.util,
 | 
				
			||||||
            "delete_if_empty",
 | 
					            "delete_if_empty",
 | 
				
			||||||
@ -175,7 +176,8 @@ class TestCaseDupeGuru_clean_empty_dirs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCaseDupeGuruWithResults:
 | 
					class TestCaseDupeGuruWithResults:
 | 
				
			||||||
    def pytest_funcarg__do_setup(self, request):
 | 
					    @pytest.fixture
 | 
				
			||||||
 | 
					    def do_setup(self, request):
 | 
				
			||||||
        app = TestApp()
 | 
					        app = TestApp()
 | 
				
			||||||
        self.app = app.app
 | 
					        self.app = app.app
 | 
				
			||||||
        self.objects, self.matches, self.groups = GetTestGroups()
 | 
					        self.objects, self.matches, self.groups = GetTestGroups()
 | 
				
			||||||
@ -184,7 +186,7 @@ class TestCaseDupeGuruWithResults:
 | 
				
			|||||||
        self.dtree = app.dtree
 | 
					        self.dtree = app.dtree
 | 
				
			||||||
        self.rtable = app.rtable
 | 
					        self.rtable = app.rtable
 | 
				
			||||||
        self.rtable.refresh()
 | 
					        self.rtable.refresh()
 | 
				
			||||||
        tmpdir = request.getfuncargvalue("tmpdir")
 | 
					        tmpdir = request.getfixturevalue("tmpdir")
 | 
				
			||||||
        tmppath = Path(str(tmpdir))
 | 
					        tmppath = Path(str(tmpdir))
 | 
				
			||||||
        tmppath["foo"].mkdir()
 | 
					        tmppath["foo"].mkdir()
 | 
				
			||||||
        tmppath["bar"].mkdir()
 | 
					        tmppath["bar"].mkdir()
 | 
				
			||||||
@ -430,8 +432,9 @@ class TestCaseDupeGuruWithResults:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCaseDupeGuru_renameSelected:
 | 
					class TestCaseDupeGuru_renameSelected:
 | 
				
			||||||
    def pytest_funcarg__do_setup(self, request):
 | 
					    @pytest.fixture
 | 
				
			||||||
        tmpdir = request.getfuncargvalue("tmpdir")
 | 
					    def do_setup(self, request):
 | 
				
			||||||
 | 
					        tmpdir = request.getfixturevalue("tmpdir")
 | 
				
			||||||
        p = Path(str(tmpdir))
 | 
					        p = Path(str(tmpdir))
 | 
				
			||||||
        fp = open(str(p["foo bar 1"]), mode="w")
 | 
					        fp = open(str(p["foo bar 1"]), mode="w")
 | 
				
			||||||
        fp.close()
 | 
					        fp.close()
 | 
				
			||||||
@ -493,8 +496,9 @@ class TestCaseDupeGuru_renameSelected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestAppWithDirectoriesInTree:
 | 
					class TestAppWithDirectoriesInTree:
 | 
				
			||||||
    def pytest_funcarg__do_setup(self, request):
 | 
					    @pytest.fixture
 | 
				
			||||||
        tmpdir = request.getfuncargvalue("tmpdir")
 | 
					    def do_setup(self, request):
 | 
				
			||||||
 | 
					        tmpdir = request.getfixturevalue("tmpdir")
 | 
				
			||||||
        p = Path(str(tmpdir))
 | 
					        p = Path(str(tmpdir))
 | 
				
			||||||
        p["sub1"].mkdir()
 | 
					        p["sub1"].mkdir()
 | 
				
			||||||
        p["sub2"].mkdir()
 | 
					        p["sub2"].mkdir()
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
from hscommon.testutil import pytest_funcarg__app  # noqa
 | 
					from hscommon.testutil import app  # noqa
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,8 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from hscommon.jobprogress import job
 | 
					from hscommon.jobprogress import job
 | 
				
			||||||
from hscommon.path import Path
 | 
					from hscommon.path import Path
 | 
				
			||||||
from hscommon.testutil import eq_
 | 
					from hscommon.testutil import eq_
 | 
				
			||||||
@ -33,10 +35,11 @@ class NamedObject:
 | 
				
			|||||||
no = NamedObject
 | 
					no = NamedObject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def pytest_funcarg__fake_fileexists(request):
 | 
					@pytest.fixture
 | 
				
			||||||
 | 
					def fake_fileexists(request):
 | 
				
			||||||
    # This is a hack to avoid invalidating all previous tests since the scanner started to test
 | 
					    # This is a hack to avoid invalidating all previous tests since the scanner started to test
 | 
				
			||||||
    # for file existence before doing the match grouping.
 | 
					    # for file existence before doing the match grouping.
 | 
				
			||||||
    monkeypatch = request.getfuncargvalue("monkeypatch")
 | 
					    monkeypatch = request.getfixturevalue("monkeypatch")
 | 
				
			||||||
    monkeypatch.setattr(Path, "exists", lambda _: True)
 | 
					    monkeypatch.setattr(Path, "exists", lambda _: True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import Sequence, MutableSequence
 | 
					from collections.abc import Sequence, MutableSequence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .base import GUIObject
 | 
					from .base import GUIObject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,8 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import MutableSequence, namedtuple
 | 
					from collections.abc import MutableSequence
 | 
				
			||||||
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .base import GUIObject
 | 
					from .base import GUIObject
 | 
				
			||||||
from .selectable_list import Selectable
 | 
					from .selectable_list import Selectable
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import MutableSequence
 | 
					from collections.abc import MutableSequence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .base import GUIObject
 | 
					from .base import GUIObject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -257,6 +257,6 @@ def log_io_error(func):
 | 
				
			|||||||
            msg = 'Error "{0}" during operation "{1}" on "{2}": "{3}"'
 | 
					            msg = 'Error "{0}" during operation "{1}" on "{2}": "{3}"'
 | 
				
			||||||
            classname = e.__class__.__name__
 | 
					            classname = e.__class__.__name__
 | 
				
			||||||
            funcname = func.__name__
 | 
					            funcname = func.__name__
 | 
				
			||||||
            logging.warn(msg.format(classname, funcname, str(path), str(e)))
 | 
					            logging.warning(msg.format(classname, funcname, str(path), str(e)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return wrapper
 | 
					    return wrapper
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,8 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ..conflict import *
 | 
					from ..conflict import *
 | 
				
			||||||
from ..path import Path
 | 
					from ..path import Path
 | 
				
			||||||
from ..testutil import eq_
 | 
					from ..testutil import eq_
 | 
				
			||||||
@ -59,8 +61,9 @@ class TestCase_IsConflicted:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCase_move_copy:
 | 
					class TestCase_move_copy:
 | 
				
			||||||
    def pytest_funcarg__do_setup(self, request):
 | 
					    @pytest.fixture
 | 
				
			||||||
        tmpdir = request.getfuncargvalue("tmpdir")
 | 
					    def do_setup(self, request):
 | 
				
			||||||
 | 
					        tmpdir = request.getfixturevalue("tmpdir")
 | 
				
			||||||
        self.path = Path(str(tmpdir))
 | 
					        self.path = Path(str(tmpdir))
 | 
				
			||||||
        self.path["foo"].open("w").close()
 | 
					        self.path["foo"].open("w").close()
 | 
				
			||||||
        self.path["bar"].open("w").close()
 | 
					        self.path["bar"].open("w").close()
 | 
				
			||||||
 | 
				
			|||||||
@ -9,14 +9,15 @@
 | 
				
			|||||||
import sys
 | 
					import sys
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from pytest import raises, mark
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ..path import Path, pathify
 | 
					from ..path import Path, pathify
 | 
				
			||||||
from ..testutil import eq_
 | 
					from ..testutil import eq_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def pytest_funcarg__force_ossep(request):
 | 
					@pytest.fixture
 | 
				
			||||||
    monkeypatch = request.getfuncargvalue("monkeypatch")
 | 
					def force_ossep(request):
 | 
				
			||||||
 | 
					    monkeypatch = request.getfixturevalue("monkeypatch")
 | 
				
			||||||
    monkeypatch.setattr(os, "sep", "/")
 | 
					    monkeypatch.setattr(os, "sep", "/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -236,12 +237,12 @@ def test_getitem_path(force_ossep):
 | 
				
			|||||||
    eq_(p[Path("baz/bleh")], Path("/foo/bar/baz/bleh"))
 | 
					    eq_(p[Path("baz/bleh")], Path("/foo/bar/baz/bleh"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@mark.xfail(reason="pytest's capture mechanism is flaky, I have to investigate")
 | 
					@pytest.mark.xfail(reason="pytest's capture mechanism is flaky, I have to investigate")
 | 
				
			||||||
def test_log_unicode_errors(force_ossep, monkeypatch, capsys):
 | 
					def test_log_unicode_errors(force_ossep, monkeypatch, capsys):
 | 
				
			||||||
    # When an there's a UnicodeDecodeError on path creation, log it so it can be possible
 | 
					    # When an there's a UnicodeDecodeError on path creation, log it so it can be possible
 | 
				
			||||||
    # to debug the cause of it.
 | 
					    # to debug the cause of it.
 | 
				
			||||||
    monkeypatch.setattr(sys, "getfilesystemencoding", lambda: "ascii")
 | 
					    monkeypatch.setattr(sys, "getfilesystemencoding", lambda: "ascii")
 | 
				
			||||||
    with raises(UnicodeDecodeError):
 | 
					    with pytest.raises(UnicodeDecodeError):
 | 
				
			||||||
        Path(["", b"foo\xe9"])
 | 
					        Path(["", b"foo\xe9"])
 | 
				
			||||||
    out, err = capsys.readouterr()
 | 
					    out, err = capsys.readouterr()
 | 
				
			||||||
    assert repr(b"foo\xe9") in err
 | 
					    assert repr(b"foo\xe9") in err
 | 
				
			||||||
 | 
				
			|||||||
@ -95,7 +95,7 @@ def test_make_sure_theres_no_messup_between_queries():
 | 
				
			|||||||
        threads.append(t)
 | 
					        threads.append(t)
 | 
				
			||||||
    while threads:
 | 
					    while threads:
 | 
				
			||||||
        time.sleep(0.1)
 | 
					        time.sleep(0.1)
 | 
				
			||||||
        threads = [t for t in threads if t.isAlive()]
 | 
					        threads = [t for t in threads if t.is_alive()]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_query_after_close():
 | 
					def test_query_after_close():
 | 
				
			||||||
 | 
				
			|||||||
@ -214,42 +214,42 @@ def test_multi_replace():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# --- Files
 | 
					# --- Files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO need to figure out how to make these work without monkeyplus as it appears to cause issues with newer pytest
 | 
				
			||||||
 | 
					# class TestCase_modified_after:
 | 
				
			||||||
 | 
					#     def test_first_is_modified_after(self, monkeyplus):
 | 
				
			||||||
 | 
					#         monkeyplus.patch_osstat("first", st_mtime=42)
 | 
				
			||||||
 | 
					#         monkeyplus.patch_osstat("second", st_mtime=41)
 | 
				
			||||||
 | 
					#         assert modified_after("first", "second")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCase_modified_after:
 | 
					#     def test_second_is_modified_after(self, monkeyplus):
 | 
				
			||||||
    def test_first_is_modified_after(self, monkeyplus):
 | 
					#         monkeyplus.patch_osstat("first", st_mtime=42)
 | 
				
			||||||
        monkeyplus.patch_osstat("first", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("second", st_mtime=43)
 | 
				
			||||||
        monkeyplus.patch_osstat("second", st_mtime=41)
 | 
					#         assert not modified_after("first", "second")
 | 
				
			||||||
        assert modified_after("first", "second")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_second_is_modified_after(self, monkeyplus):
 | 
					#     def test_same_mtime(self, monkeyplus):
 | 
				
			||||||
        monkeyplus.patch_osstat("first", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("first", st_mtime=42)
 | 
				
			||||||
        monkeyplus.patch_osstat("second", st_mtime=43)
 | 
					#         monkeyplus.patch_osstat("second", st_mtime=42)
 | 
				
			||||||
        assert not modified_after("first", "second")
 | 
					#         assert not modified_after("first", "second")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_same_mtime(self, monkeyplus):
 | 
					#     def test_first_file_does_not_exist(self, monkeyplus):
 | 
				
			||||||
        monkeyplus.patch_osstat("first", st_mtime=42)
 | 
					#         # when the first file doesn't exist, we return False
 | 
				
			||||||
        monkeyplus.patch_osstat("second", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("second", st_mtime=42)
 | 
				
			||||||
        assert not modified_after("first", "second")
 | 
					#         assert not modified_after("does_not_exist", "second")  # no crash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_first_file_does_not_exist(self, monkeyplus):
 | 
					#     def test_second_file_does_not_exist(self, monkeyplus):
 | 
				
			||||||
        # when the first file doesn't exist, we return False
 | 
					#         # when the second file doesn't exist, we return True
 | 
				
			||||||
        monkeyplus.patch_osstat("second", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("first", st_mtime=42)
 | 
				
			||||||
        assert not modified_after("does_not_exist", "second")  # no crash
 | 
					#         assert modified_after("first", "does_not_exist")  # no crash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_second_file_does_not_exist(self, monkeyplus):
 | 
					#     def test_first_file_is_none(self, monkeyplus):
 | 
				
			||||||
        # when the second file doesn't exist, we return True
 | 
					#         # when the first file is None, we return False
 | 
				
			||||||
        monkeyplus.patch_osstat("first", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("second", st_mtime=42)
 | 
				
			||||||
        assert modified_after("first", "does_not_exist")  # no crash
 | 
					#         assert not modified_after(None, "second")  # no crash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_first_file_is_none(self, monkeyplus):
 | 
					#     def test_second_file_is_none(self, monkeyplus):
 | 
				
			||||||
        # when the first file is None, we return False
 | 
					#         # when the second file is None, we return True
 | 
				
			||||||
        monkeyplus.patch_osstat("second", st_mtime=42)
 | 
					#         monkeyplus.patch_osstat("first", st_mtime=42)
 | 
				
			||||||
        assert not modified_after(None, "second")  # no crash
 | 
					#         assert modified_after("first", None)  # no crash
 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_second_file_is_none(self, monkeyplus):
 | 
					 | 
				
			||||||
        # when the second file is None, we return True
 | 
					 | 
				
			||||||
        monkeyplus.patch_osstat("first", st_mtime=42)
 | 
					 | 
				
			||||||
        assert modified_after("first", None)  # no crash
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestCase_delete_if_empty:
 | 
					class TestCase_delete_if_empty:
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,8 @@
 | 
				
			|||||||
# which should be included with this package. The terms are also available at
 | 
					# which should be included with this package. The terms are also available at
 | 
				
			||||||
# http://www.gnu.org/licenses/gpl-3.0.html
 | 
					# http://www.gnu.org/licenses/gpl-3.0.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import threading
 | 
					import threading
 | 
				
			||||||
import py.path
 | 
					import py.path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -148,7 +150,7 @@ class TestApp:
 | 
				
			|||||||
        return gui
 | 
					        return gui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# To use @with_app, you have to import pytest_funcarg__app in your conftest.py file.
 | 
					# To use @with_app, you have to import app in your conftest.py file.
 | 
				
			||||||
def with_app(setupfunc):
 | 
					def with_app(setupfunc):
 | 
				
			||||||
    def decorator(func):
 | 
					    def decorator(func):
 | 
				
			||||||
        func.setupfunc = setupfunc
 | 
					        func.setupfunc = setupfunc
 | 
				
			||||||
@ -157,7 +159,8 @@ def with_app(setupfunc):
 | 
				
			|||||||
    return decorator
 | 
					    return decorator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def pytest_funcarg__app(request):
 | 
					@pytest.fixture
 | 
				
			||||||
 | 
					def app(request):
 | 
				
			||||||
    setupfunc = request.function.setupfunc
 | 
					    setupfunc = request.function.setupfunc
 | 
				
			||||||
    if hasattr(setupfunc, "__code__"):
 | 
					    if hasattr(setupfunc, "__code__"):
 | 
				
			||||||
        argnames = setupfunc.__code__.co_varnames[: setupfunc.__code__.co_argcount]
 | 
					        argnames = setupfunc.__code__.co_varnames[: setupfunc.__code__.co_argcount]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,4 @@
 | 
				
			|||||||
pytest>=2.0.0,<3.0
 | 
					pytest>=5,<6
 | 
				
			||||||
pytest-monkeyplus>=1.0.0
 | 
					 | 
				
			||||||
flake8
 | 
					flake8
 | 
				
			||||||
tox-travis
 | 
					tox-travis
 | 
				
			||||||
black
 | 
					black
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user