diff --git a/test/conftest.py b/test/conftest.py index 1490d55..7ccd9be 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -3,10 +3,10 @@ import collections import contextlib import copy -import distutils.dir_util # pylint: disable=no-name-in-module,import-error import os import platform import pwd +import shutil from subprocess import Popen, PIPE import py import pytest @@ -31,7 +31,7 @@ def shellcheck_version(): @pytest.fixture(scope='session') def pylint_version(): """Version of pylint supported""" - return '2.6.0' + return '2.17.0' @pytest.fixture(scope='session') @@ -204,7 +204,7 @@ class Runner(): merged_env.update(env) self.inp = inp self.wrap(expect) - process = Popen( + with Popen( self.command, stdin=PIPE, stdout=PIPE, @@ -212,14 +212,14 @@ class Runner(): shell=shell, cwd=cwd, env=merged_env, - ) - input_bytes = self.inp - if self.inp: - input_bytes = self.inp.encode() - (out_bstream, err_bstream) = process.communicate(input=input_bytes) - self.out = out_bstream.decode() - self.err = err_bstream.decode() - self.code = process.wait() + ) as process: + input_bytes = self.inp + if self.inp: + input_bytes = self.inp.encode() + (out_bstream, err_bstream) = process.communicate(input=input_bytes) + self.out = out_bstream.decode() + self.err = err_bstream.decode() + self.code = process.wait() self.success = self.code == 0 self.failure = self.code != 0 if report: @@ -365,6 +365,10 @@ def yadm_cmd(paths): return command_list +class NoRelativePath(Exception): + """Exception when finding relative paths""" + + class DataFile(): """Datafile object""" @@ -384,7 +388,7 @@ class DataFile(): """Relative path property""" if self.__parent: return self.__parent.join(self.path) - raise BaseException('Unable to provide relative path, no parent') + raise NoRelativePath('Unable to provide relative path, no parent') @property def tracked(self): @@ -405,10 +409,10 @@ class DataSet(): """Dataset object""" def __init__(self): - self.__files = list() - self.__dirs = list() - self.__tracked_dirs = list() - self.__private_dirs = list() + self.__files = [] + self.__dirs = [] + self.__tracked_dirs = [] + self.__private_dirs = [] self.__relpath = None def __repr__(self): @@ -562,15 +566,13 @@ def ds1_data(tmpdir_factory, config_git, ds1_dset, runner): @pytest.fixture() def ds1_work_copy(ds1_data, paths): """Function scoped copy of ds1_data.work""" - distutils.dir_util.copy_tree( # pylint: disable=no-member - str(ds1_data.work), str(paths.work)) + shutil.copytree(str(ds1_data.work), str(paths.work), dirs_exist_ok=True) @pytest.fixture() def ds1_repo_copy(runner, ds1_data, paths): """Function scoped copy of ds1_data.repo""" - distutils.dir_util.copy_tree( # pylint: disable=no-member - str(ds1_data.repo), str(paths.repo)) + shutil.copytree(str(ds1_data.repo), str(paths.repo), dirs_exist_ok=True) env = os.environ.copy() env['GIT_DIR'] = str(paths.repo) runner( diff --git a/test/test_syntax.py b/test/test_syntax.py index 17f66ca..1a422b3 100644 --- a/test/test_syntax.py +++ b/test/test_syntax.py @@ -26,7 +26,7 @@ def test_pylint(pytestconfig, runner, pylint_version): run = runner(command=['pylint', '--version'], report=False) if f'pylint {pylint_version}' not in run.out: pytest.skip('Unsupported pylint version') - pyfiles = list() + pyfiles = [] for tfile in os.listdir('test'): if tfile.endswith('.py'): pyfiles.append(f'test/{tfile}') diff --git a/test/test_unit_score_file.py b/test/test_unit_score_file.py index e59c128..dd2f0b7 100644 --- a/test/test_unit_score_file.py +++ b/test/test_unit_score_file.py @@ -213,14 +213,14 @@ def test_score_values( local_user={local_user} """ expected = '' - for filename in filenames: + for filename, score in filenames.items(): script += f""" score_file "{filename}" echo "{filename}" echo "$score" """ expected += filename + '\n' - expected += str(filenames[filename]) + '\n' + expected += str(score) + '\n' run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' @@ -278,14 +278,14 @@ def test_score_values_templates(runner, yadm): local_user={local_user} """ expected = '' - for filename in filenames: + for filename, score in filenames.items(): script += f""" score_file "{filename}" echo "{filename}" echo "$score" """ expected += filename + '\n' - expected += str(filenames[filename]) + '\n' + expected += str(score) + '\n' run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' @@ -337,14 +337,14 @@ def test_underscores_in_distro_and_family(runner, yadm): local_distro_family="{local_distro_family}" """ expected = '' - for filename in filenames: + for filename, score in filenames.items(): script += f""" score_file "{filename}" echo "{filename}" echo "$score" """ expected += filename + '\n' - expected += str(filenames[filename]) + '\n' + expected += str(score) + '\n' run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' diff --git a/test/test_upgrade.py b/test/test_upgrade.py index f1a5076..77b7e4a 100644 --- a/test/test_upgrade.py +++ b/test/test_upgrade.py @@ -39,7 +39,7 @@ def test_upgrade(tmpdir, runner, versions, submodule): os.environ.pop('XDG_DATA_HOME', None) def run_version(version, *args, check_stderr=True): - yadm = 'yadm-%s' % version if version else '/yadm/yadm' + yadm = f'yadm-{version}' if version else '/yadm/yadm' run = runner([yadm, *args], shell=True, cwd=str(home), env=env) assert run.success if check_stderr: diff --git a/test/test_version.py b/test/test_version.py index d440d3b..5655e47 100644 --- a/test/test_version.py +++ b/test/test_version.py @@ -10,9 +10,8 @@ def expected_version(yadm): Expected semantic version number. This is taken directly out of yadm, searching for the VERSION= string. """ - yadm_version = re.findall( - r'VERSION=([^\n]+)', - open(yadm).read()) + with open(yadm, encoding='utf-8') as source_file: + yadm_version = re.findall(r'VERSION=([^\n]+)', source_file.read()) if yadm_version: return yadm_version[0] pytest.fail(f'version not found in {yadm}') diff --git a/test/utils.py b/test/utils.py index 67a9e53..6cbe066 100644 --- a/test/utils.py +++ b/test/utils.py @@ -81,7 +81,7 @@ def parse_alt_output(output, linked=True): regex = r'Creating (.+) from template (.+)$' if linked: regex = r'Linking (.+) to (.+)$' - parsed_list = dict() + parsed_list = {} for line in output.splitlines(): match = re.match(regex, line) if match: