From 55aa5fd11e12432a2fa9f2bfbe52772a993868e2 Mon Sep 17 00:00:00 2001 From: Mathieu Kniewallner Date: Sat, 1 Oct 2022 13:43:09 +0200 Subject: [PATCH] Run flake8 on tests (#147) * chore(flake8): run on `tests` directory * chore: comply with `flake8` on `tests` * chore(mypy): type check `scripts` module --- pyproject.toml | 2 +- tests/test_cli.py | 55 ++++++++++--------- tests/test_core.py | 2 - tests/test_dependency.py | 8 +-- tests/test_import_parser.py | 30 +++++----- tests/test_module.py | 2 +- tests/test_notebook_import_extractor.py | 6 -- .../test_pyproject_toml_dependency_getter.py | 1 - tests/test_python_file_finder.py | 8 +-- ...test_requirements_txt_dependency_getter.py | 1 - tests/test_result_logger.py | 2 - tests/test_transitive_dependencies_finder.py | 1 - tox.ini | 2 +- 13 files changed, 53 insertions(+), 67 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 542507be..47a1441e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ preview = true profile = "black" [tool.mypy] -files = ["deptry"] +files = ["deptry", "scripts"] disallow_untyped_defs = true disallow_any_unimported = true no_implicit_optional = true diff --git a/tests/test_cli.py b/tests/test_cli.py index 5009edb0..4dfa66d8 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,9 +12,9 @@ @pytest.fixture(scope="session") def dir_with_venv_installed(tmp_path_factory): tmp_path_proj = tmp_path_factory.getbasetemp() / "example_project" - shutil.copytree("tests/data/example_project", str(tmp_path_proj)) - with run_within_dir(str(tmp_path_proj)): - subprocess.check_call(shlex.split("poetry install --no-interaction --no-root")) == 0 + shutil.copytree("tests/data/example_project", tmp_path_proj) + with run_within_dir(tmp_path_proj): + assert subprocess.check_call(shlex.split("poetry install --no-interaction --no-root")) == 0 return tmp_path_proj @@ -22,18 +22,21 @@ def dir_with_venv_installed(tmp_path_factory): def requirements_txt_dir_with_venv_installed(tmp_path_factory): tmp_path_proj = tmp_path_factory.getbasetemp() / "project_with_requirements_txt" shutil.copytree("tests/data/project_with_requirements_txt", str(tmp_path_proj)) - with run_within_dir(str(tmp_path_proj)): - subprocess.check_call( - shlex.split( - "pip install -r requirements.txt -r requirements-dev.txt -r requirements-2.txt -r" - " requirements-typing.txt" + with run_within_dir(tmp_path_proj): + assert ( + subprocess.check_call( + shlex.split( + "pip install -r requirements.txt -r requirements-dev.txt -r requirements-2.txt -r" + " requirements-typing.txt" + ) ) - ) == 0 + == 0 + ) return tmp_path_proj def test_cli_returns_error(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run(shlex.split("poetry run deptry ."), capture_output=True, text=True) assert result.returncode == 1 print(result.stderr) @@ -43,14 +46,14 @@ def test_cli_returns_error(dir_with_venv_installed): def test_cli_ignore_notebooks(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run(shlex.split("poetry run deptry . --ignore-notebooks"), capture_output=True, text=True) assert result.returncode == 1 assert "The project contains obsolete dependencies:\n\n\tisort\n\trequests\n\ttoml\n\n" in result.stderr def test_cli_ignore_flags(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run( shlex.split("poetry run deptry . --ignore-obsolete isort,pkginfo,requests -im white -id black"), capture_output=True, @@ -60,7 +63,7 @@ def test_cli_ignore_flags(dir_with_venv_installed): def test_cli_skip_flags(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run( shlex.split("poetry run deptry . --skip-obsolete --skip-missing --skip-misplaced-dev --skip-transitive"), capture_output=True, @@ -70,7 +73,7 @@ def test_cli_skip_flags(dir_with_venv_installed): def test_cli_exclude(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run( shlex.split("poetry run deptry . --exclude src/notebook.ipynb "), capture_output=True, text=True ) @@ -79,7 +82,7 @@ def test_cli_exclude(dir_with_venv_installed): def test_cli_extend_exclude(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run( shlex.split("poetry run deptry . -ee src/notebook.ipynb "), capture_output=True, text=True ) @@ -88,7 +91,7 @@ def test_cli_extend_exclude(dir_with_venv_installed): def test_cli_single_requirements_txt(requirements_txt_dir_with_venv_installed): - with run_within_dir(str(requirements_txt_dir_with_venv_installed)): + with run_within_dir(requirements_txt_dir_with_venv_installed): result = subprocess.run( shlex.split("deptry . --requirements-txt requirements.txt --requirements-txt-dev requirements-dev.txt"), capture_output=True, @@ -110,7 +113,7 @@ def test_cli_single_requirements_txt(requirements_txt_dir_with_venv_installed): def test_cli_multiple_requirements_txt(requirements_txt_dir_with_venv_installed): - with run_within_dir(str(requirements_txt_dir_with_venv_installed)): + with run_within_dir(requirements_txt_dir_with_venv_installed): result = subprocess.run( shlex.split( "deptry . --requirements-txt requirements.txt,requirements-2.txt --requirements-txt-dev" @@ -132,19 +135,19 @@ def test_cli_multiple_requirements_txt(requirements_txt_dir_with_venv_installed) def test_cli_verbose(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run(shlex.split("poetry run deptry . "), capture_output=True, text=True) assert result.returncode == 1 - assert not "The project contains the following dependencies:" in result.stderr + assert "The project contains the following dependencies:" not in result.stderr - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): result = subprocess.run(shlex.split("poetry run deptry . -v "), capture_output=True, text=True) assert result.returncode == 1 assert "The project contains the following dependencies:" in result.stderr def test_cli_with_json_output(dir_with_venv_installed): - with run_within_dir(str(dir_with_venv_installed)): + with run_within_dir(dir_with_venv_installed): # assert that there is no json output subprocess.run(shlex.split("poetry run deptry ."), capture_output=True, text=True) assert len(list(pathlib.Path(".").glob("*.json"))) == 0 @@ -153,11 +156,11 @@ def test_cli_with_json_output(dir_with_venv_installed): subprocess.run(shlex.split("poetry run deptry . -o deptry.json"), capture_output=True, text=True) with open("deptry.json", "r") as f: data = json.load(f) - assert set(data["obsolete"]) == set(["isort", "requests"]) - assert set(data["missing"]) == set(["white"]) - assert set(data["misplaced_dev"]) == set(["black"]) - assert set(data["transitive"]) == set([]) + assert set(data["obsolete"]) == {"isort", "requests"} + assert set(data["missing"]) == {"white"} + assert set(data["misplaced_dev"]) == {"black"} + assert set(data["transitive"]) == set() def test_cli_help(): - subprocess.check_call(shlex.split("deptry --help")) == 0 + assert subprocess.check_call(shlex.split("deptry --help")) == 0 diff --git a/tests/test_core.py b/tests/test_core.py index f2ab268e..7530e938 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1,5 +1,3 @@ -import logging - import pytest from deptry.core import Core diff --git a/tests/test_dependency.py b/tests/test_dependency.py index 87d0c641..6fa43e07 100644 --- a/tests/test_dependency.py +++ b/tests/test_dependency.py @@ -6,13 +6,13 @@ def test_simple_dependency(): dependency = Dependency("click") assert dependency.name == "click" - assert dependency.top_levels == set(["click"]) + assert dependency.top_levels == {"click"} def test_create_default_top_level_if_metadata_not_found(): dependency = Dependency("Foo-bar") assert dependency.name == "Foo-bar" - assert dependency.top_levels == set(["foo_bar"]) + assert dependency.top_levels == {"foo_bar"} def test_read_top_level_from_top_level_txt(): @@ -31,7 +31,7 @@ def read_text(self, file_name): mock.return_value = MockDistribution() dependency = Dependency("Foo-bar") assert dependency.name == "Foo-bar" - assert dependency.top_levels == set(["foo_bar", "foo", "bar"]) + assert dependency.top_levels == {"foo_bar", "foo", "bar"} def test_read_top_level_from_record(): @@ -58,4 +58,4 @@ def read_text(self, file_name): mock.return_value = MockDistribution() dependency = Dependency("Foo-bar") assert dependency.name == "Foo-bar" - assert dependency.top_levels == set(["foo_bar", "black", "blackd"]) + assert dependency.top_levels == {"foo_bar", "black", "blackd"} diff --git a/tests/test_import_parser.py b/tests/test_import_parser.py index 5e3cf0c4..62677fad 100644 --- a/tests/test_import_parser.py +++ b/tests/test_import_parser.py @@ -1,6 +1,4 @@ import logging -import os -from ast import Import from pathlib import Path from unittest.mock import Mock @@ -10,14 +8,14 @@ def test_import_parser_py(): imported_modules = ImportParser().get_imported_modules_from_file(Path("tests/data/some_imports.py")) - assert set(imported_modules) == set(["os", "pathlib", "typing", "pandas", "numpy"]) + assert set(imported_modules) == {"os", "pathlib", "typing", "pandas", "numpy"} def test_import_parser_ipynb(): imported_modules = ImportParser().get_imported_modules_from_file( Path("tests/data/example_project/src/notebook.ipynb") ) - assert set(imported_modules) == set(["click", "urllib3", "toml"]) + assert set(imported_modules) == {"click", "urllib3", "toml"} def test_import_parser_ifelse(): @@ -33,7 +31,7 @@ def test_import_parser_ifelse(): import logging """ ) - assert set(imported_modules) == set(["numpy", "pandas", "typing", "logging"]) + assert set(imported_modules) == {"numpy", "pandas", "typing", "logging"} def test_import_parser_tryexcept(): @@ -47,7 +45,7 @@ def test_import_parser_tryexcept(): import logging """ ) - assert set(imported_modules) == set(["numpy", "pandas", "click", "logging"]) + assert set(imported_modules) == {"numpy", "pandas", "click", "logging"} def test_import_parser_func(): @@ -59,7 +57,7 @@ def func(): import click """ ) - assert set(imported_modules) == set(["numpy", "pandas", "click"]) + assert set(imported_modules) == {"numpy", "pandas", "click"} def test_import_parser_class(): @@ -72,20 +70,20 @@ def __init__(self): import click """ ) - assert set(imported_modules) == set(["numpy", "pandas", "click"]) + assert set(imported_modules) == {"numpy", "pandas", "click"} def test_import_parser_relative(): imported_modules = ImportParser().get_imported_modules_from_str("""from . import foo\nfrom .foo import bar""") - assert set(imported_modules) == set([]) + assert set(imported_modules) == set() def test_import_parser_ignores_setuptools(tmp_path): with run_within_dir(tmp_path): with open("file.py", "w") as f: f.write("import setuptools\nimport foo") - imported_modules = ImportParser().get_imported_modules_for_list_of_files(["file.py"]) - assert set(imported_modules) == set(["foo"]) + imported_modules = ImportParser().get_imported_modules_for_list_of_files([Path("file.py")]) + assert set(imported_modules) == {"foo"} def test_import_parser_file_encodings(tmp_path): @@ -119,16 +117,16 @@ def test_import_parser_file_encodings(tmp_path): f.write("""my_string = '🐺'\nimport foo""") imported_modules = ImportParser().get_imported_modules_from_file(Path("file1.py")) - assert set(imported_modules) == set(["foo"]) + assert set(imported_modules) == {"foo"} imported_modules = ImportParser().get_imported_modules_from_file(Path("file2.py")) - assert set(imported_modules) == set(["foo"]) + assert set(imported_modules) == {"foo"} imported_modules = ImportParser().get_imported_modules_from_file(Path("file3.py")) - assert set(imported_modules) == set(["foo"]) + assert set(imported_modules) == {"foo"} imported_modules = ImportParser().get_imported_modules_from_file(Path("file4.py")) - assert set(imported_modules) == set(["foo"]) + assert set(imported_modules) == {"foo"} def test_import_parser_file_encodings_warning(tmp_path, caplog): @@ -142,5 +140,5 @@ def test_import_parser_file_encodings_warning(tmp_path, caplog): ) with caplog.at_level(logging.WARNING): imported_modules = mockObject().get_imported_modules_from_file(Path("file1.py")) - assert set(imported_modules) == set([]) + assert set(imported_modules) == set() assert "Warning: File file1.py could not be decoded. Skipping..." in caplog.text diff --git a/tests/test_module.py b/tests/test_module.py index 147a5728..785d048d 100644 --- a/tests/test_module.py +++ b/tests/test_module.py @@ -12,7 +12,7 @@ def test_top_level(): dependency = Dependency("beautifulsoup4") dependency.top_levels = ["bs4"] module = ModuleBuilder("bs4", [dependency]).build() - assert module.package == None + assert module.package is None def test_stdlib(): diff --git a/tests/test_notebook_import_extractor.py b/tests/test_notebook_import_extractor.py index 984b2420..bea3749f 100644 --- a/tests/test_notebook_import_extractor.py +++ b/tests/test_notebook_import_extractor.py @@ -1,9 +1,3 @@ -import os -from contextlib import contextmanager -from pathlib import Path - -import pytest - from deptry.notebook_import_extractor import NotebookImportExtractor diff --git a/tests/test_pyproject_toml_dependency_getter.py b/tests/test_pyproject_toml_dependency_getter.py index 4e98a32a..fd228a49 100644 --- a/tests/test_pyproject_toml_dependency_getter.py +++ b/tests/test_pyproject_toml_dependency_getter.py @@ -1,4 +1,3 @@ -from deptry.dependency import Dependency from deptry.dependency_getter.pyproject_toml import PyprojectTomlDependencyGetter from deptry.utils import run_within_dir diff --git a/tests/test_python_file_finder.py b/tests/test_python_file_finder.py index b40c1a9a..64f36c74 100644 --- a/tests/test_python_file_finder.py +++ b/tests/test_python_file_finder.py @@ -1,22 +1,20 @@ -from contextlib import contextmanager from pathlib import Path from typing import Dict, List -import pytest - from deptry.python_file_finder import PythonFileFinder from deptry.utils import run_within_dir def create_files_from_list_of_dicts(paths: List[Dict[str, str]]): """ - Takes as input an argument paths, which is a list of dicts. Each dict should have two key's; + Takes as input an argument paths, which is a list of dicts. Each dict should have two keys; 'dir' to denote a directory and 'file' to denote the file name. This function creates all files within their corresponding directories. """ for path in paths: Path(path["dir"]).mkdir(parents=True, exist_ok=True) - open(Path(path["dir"]) / Path(path["file"]), "w").close() + with open(Path(path["dir"]) / Path(path["file"]), "w"): + pass def test_simple(tmp_path): diff --git a/tests/test_requirements_txt_dependency_getter.py b/tests/test_requirements_txt_dependency_getter.py index 7f3ebb8a..95c09b4d 100644 --- a/tests/test_requirements_txt_dependency_getter.py +++ b/tests/test_requirements_txt_dependency_getter.py @@ -1,4 +1,3 @@ -from deptry.dependency import Dependency from deptry.dependency_getter.requirements_txt import RequirementsTxtDependencyGetter from deptry.utils import run_within_dir diff --git a/tests/test_result_logger.py b/tests/test_result_logger.py index 35fb1d10..b8b86671 100644 --- a/tests/test_result_logger.py +++ b/tests/test_result_logger.py @@ -1,7 +1,5 @@ import logging -import pytest - from deptry.result_logger import ResultLogger diff --git a/tests/test_transitive_dependencies_finder.py b/tests/test_transitive_dependencies_finder.py index a30ef5a8..ab7484c9 100644 --- a/tests/test_transitive_dependencies_finder.py +++ b/tests/test_transitive_dependencies_finder.py @@ -1,4 +1,3 @@ -from deptry.dependency import Dependency from deptry.issue_finders.transitive import TransitiveDependenciesFinder from deptry.module import ModuleBuilder diff --git a/tox.ini b/tox.ini index ac015a93..05b7537f 100644 --- a/tox.ini +++ b/tox.ini @@ -13,7 +13,7 @@ extend-exclude = build/*, dist/*, .venv/*, - tests/*, + tests/data/*, venv/* max-complexity = 10 max-line-length = 120