diff --git a/docs/usage.md b/docs/usage.md index a4596d97..263edc12 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -36,7 +36,7 @@ To determine the project's dependencies, _deptry_ will scan the directory it is - development dependencies from `dev-dependencies.txt` and `dependencies-dev.txt`, if any exist _deptry_ can be configured to look for `pip` requirements files with other names or in other directories. -See [Requirements txt](#requirements-txt) and [Requirements txt dev](#requirements-txt-dev). +See [Requirements files](#requirements-files) and [Requirements files dev](#requirements-files-dev). ## Excluding files and directories @@ -228,40 +228,40 @@ ignore_notebooks = true deptry . --ignore-notebooks ``` -#### Requirements txt +#### Requirements files List of [`pip` requirements files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) that contain the source dependencies. - Type: `list[str]` - Default: `["requirements.txt"]` -- `pyproject.toml` option name: `requirements_txt` -- CLI option name: `--requirements-txt` (short: `-rt`) +- `pyproject.toml` option name: `requirements_files` +- CLI option name: `--requirements-files` (short: `-rt`) - `pyproject.toml` example: ```toml [tool.deptry] -requirements_txt = ["requirements.txt", "requirements-private.txt"] +requirements_files = ["requirements.txt", "requirements-private.txt"] ``` - CLI example: ```shell -deptry . --requirements-txt requirements.txt,requirements-private.txt +deptry . --requirements-files requirements.txt,requirements-private.txt ``` -#### Requirements txt dev +#### Requirements files dev List of [`pip` requirements files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) that contain the source development dependencies. - Type: `list[str]` - Default: `["dev-requirements.txt", "requirements-dev.txt"]` -- `pyproject.toml` option name: `requirements_txt_dev` -- CLI option name: `--requirements-txt-dev` (short: `-rtd`) +- `pyproject.toml` option name: `requirements_files_dev` +- CLI option name: `--requirements-files-dev` (short: `-rtd`) - `pyproject.toml` example: ```toml [tool.deptry] -requirements_txt_dev = ["requirements-dev.txt", "requirements-tests.txt"] +requirements_files_dev = ["requirements-dev.txt", "requirements-tests.txt"] ``` - CLI example: ```shell -deptry . --requirements-txt-dev requirements-dev.txt,requirements-tests.txt +deptry . --requirements-files-dev requirements-dev.txt,requirements-tests.txt ``` #### Known first party diff --git a/python/deptry/cli.py b/python/deptry/cli.py index 93940482..0ea607e8 100644 --- a/python/deptry/cli.py +++ b/python/deptry/cli.py @@ -11,6 +11,10 @@ from deptry.config import read_configuration_from_pyproject_toml from deptry.core import Core +from deptry.deprecate.requirements_txt import ( + REQUIREMENTS_TXT_DEPRECATION_MESSAGE, + REQUIREMENTS_TXT_DEV_DEPRECATION_MESSAGE, +) if TYPE_CHECKING: from collections.abc import Mapping, MutableMapping, Sequence @@ -183,19 +187,25 @@ def display_deptry_version(ctx: click.Context, _param: click.Parameter, value: b help="Display the current version and exit.", ) @click.option( - "--requirements-txt", - "-rt", + "--requirements-txt", "-rt", type=COMMA_SEPARATED_TUPLE, help="To be deprecated.", hidden=True, default=() +) +@click.option( + "--requirements-txt-dev", "-rtd", type=COMMA_SEPARATED_TUPLE, help="To be deprecated.", hidden=True, default=() +) +@click.option( + "--requirements-files", + "-rf", type=COMMA_SEPARATED_TUPLE, - help=""".txt files to scan for dependencies. If a file called pyproject.toml with a [tool.poetry.dependencies] section is found, this argument is ignored + help=""".txt files to scan for dependencies. If a file called pyproject.toml with a [tool.poetry.dependencies] or [project] section is found, this argument is ignored and the dependencies are extracted from the pyproject.toml file instead. Can be multiple e.g. `deptry . --requirements-txt req/prod.txt,req/extra.txt`""", default=("requirements.txt",), show_default=True, ) @click.option( - "--requirements-txt-dev", - "-rtd", + "--requirements-files-dev", + "-rfd", type=COMMA_SEPARATED_TUPLE, - help=""".txt files to scan for additional development dependencies. If a file called pyproject.toml with a [tool.poetry.dependencies] section is found, this argument is ignored + help=""".txt files to scan for additional development dependencies. If a file called pyproject.toml with a [tool.poetry.dependencies] or [project] section is found, this argument is ignored and the dependencies are extracted from the pyproject.toml file instead. Can be multiple e.g. `deptry . --requirements-txt-dev req/dev.txt,req/test.txt`""", default=("dev-requirements.txt", "requirements-dev.txt"), show_default=True, @@ -246,6 +256,8 @@ def deptry( ignore_notebooks: bool, requirements_txt: tuple[str, ...], requirements_txt_dev: tuple[str, ...], + requirements_files: tuple[str, ...], + requirements_files_dev: tuple[str, ...], known_first_party: tuple[str, ...], json_output: str, package_module_name_map: MutableMapping[str, tuple[str, ...]], @@ -264,6 +276,12 @@ def deptry( deptry src worker """ + + if requirements_txt: + logging.warning(REQUIREMENTS_TXT_DEPRECATION_MESSAGE) + + if requirements_txt_dev: + logging.warning(REQUIREMENTS_TXT_DEV_DEPRECATION_MESSAGE) Core( root=root, config=config, @@ -274,8 +292,8 @@ def deptry( ignore_notebooks=ignore_notebooks, ignore=ignore, per_rule_ignores=per_rule_ignores, - requirements_txt=requirements_txt, - requirements_txt_dev=requirements_txt_dev, + requirements_files=requirements_txt or requirements_files, + requirements_files_dev=requirements_txt_dev or requirements_files_dev, known_first_party=known_first_party, json_output=json_output, package_module_name_map=package_module_name_map, diff --git a/python/deptry/core.py b/python/deptry/core.py index 2c017c6a..45422cd8 100644 --- a/python/deptry/core.py +++ b/python/deptry/core.py @@ -9,7 +9,7 @@ from deptry.dependency_getter.pdm import PDMDependencyGetter from deptry.dependency_getter.pep_621 import PEP621DependencyGetter from deptry.dependency_getter.poetry import PoetryDependencyGetter -from deptry.dependency_getter.requirements_txt import RequirementsTxtDependencyGetter +from deptry.dependency_getter.requirements_files import RequirementsTxtDependencyGetter from deptry.dependency_specification_detector import DependencyManagementFormat, DependencySpecificationDetector from deptry.exceptions import IncorrectDependencyFormatError, UnsupportedPythonVersionError from deptry.imports.extract import get_imported_modules_from_list_of_files @@ -48,8 +48,8 @@ class Core: extend_exclude: tuple[str, ...] using_default_exclude: bool ignore_notebooks: bool - requirements_txt: tuple[str, ...] - requirements_txt_dev: tuple[str, ...] + requirements_files: tuple[str, ...] + requirements_files_dev: tuple[str, ...] known_first_party: tuple[str, ...] json_output: str package_module_name_map: Mapping[str, tuple[str, ...]] @@ -59,7 +59,7 @@ def run(self) -> None: self._log_config() dependency_management_format = DependencySpecificationDetector( - self.config, requirements_txt=self.requirements_txt + self.config, requirements_files=self.requirements_files ).detect() dependencies_extract = self._get_dependencies(dependency_management_format) @@ -151,9 +151,9 @@ def _get_dependencies(self, dependency_management_format: DependencyManagementFo return PEP621DependencyGetter( self.config, self.package_module_name_map, self.pep621_dev_dependency_groups ).get() - if dependency_management_format is DependencyManagementFormat.REQUIREMENTS_TXT: + if dependency_management_format is DependencyManagementFormat.REQUIREMENTS_FILE: return RequirementsTxtDependencyGetter( - self.config, self.package_module_name_map, self.requirements_txt, self.requirements_txt_dev + self.config, self.package_module_name_map, self.requirements_files, self.requirements_files_dev ).get() raise IncorrectDependencyFormatError diff --git a/python/deptry/dependency_getter/requirements_txt.py b/python/deptry/dependency_getter/requirements_files.py similarity index 89% rename from python/deptry/dependency_getter/requirements_txt.py rename to python/deptry/dependency_getter/requirements_files.py index d747c702..b0f1099d 100644 --- a/python/deptry/dependency_getter/requirements_txt.py +++ b/python/deptry/dependency_getter/requirements_files.py @@ -16,20 +16,20 @@ class RequirementsTxtDependencyGetter(DependencyGetter): """Extract dependencies from requirements.txt files.""" - requirements_txt: tuple[str, ...] = ("requirements.txt",) - requirements_txt_dev: tuple[str, ...] = ("dev-requirements.txt", "requirements-dev.txt") + requirements_files: tuple[str, ...] = ("requirements.txt",) + requirements_files_dev: tuple[str, ...] = ("dev-requirements.txt", "requirements-dev.txt") def get(self) -> DependenciesExtract: dependencies = list( itertools.chain( - *(self._get_dependencies_from_requirements_file(file_name) for file_name in self.requirements_txt) + *(self._get_dependencies_from_requirements_files(file_name) for file_name in self.requirements_files) ) ) dev_dependencies = list( itertools.chain( *( - self._get_dependencies_from_requirements_file(file_name) + self._get_dependencies_from_requirements_files(file_name) for file_name in self._scan_for_dev_requirements_files() ) ) @@ -39,14 +39,14 @@ def get(self) -> DependenciesExtract: def _scan_for_dev_requirements_files(self) -> list[str]: """ - Check if any of the files passed as requirements_txt_dev exist, and if so; return them. + Check if any of the files passed as requirements_files_dev exist, and if so; return them. """ - dev_requirements_files = [file_name for file_name in self.requirements_txt_dev if file_name in os.listdir()] + dev_requirements_files = [file_name for file_name in self.requirements_files_dev if file_name in os.listdir()] if dev_requirements_files: logging.debug("Found files with development requirements! %s", dev_requirements_files) return dev_requirements_files - def _get_dependencies_from_requirements_file(self, file_name: str, is_dev: bool = False) -> list[Dependency]: + def _get_dependencies_from_requirements_files(self, file_name: str, is_dev: bool = False) -> list[Dependency]: logging.debug("Scanning %s for %s", file_name, "dev dependencies" if is_dev else "dependencies") dependencies = [] diff --git a/python/deptry/dependency_specification_detector.py b/python/deptry/dependency_specification_detector.py index 92bb4839..0cd72d5f 100644 --- a/python/deptry/dependency_specification_detector.py +++ b/python/deptry/dependency_specification_detector.py @@ -12,7 +12,7 @@ class DependencyManagementFormat(Enum): PDM = "pdm" PEP_621 = "pep_621" POETRY = "poetry" - REQUIREMENTS_TXT = "requirements_txt" + REQUIREMENTS_FILE = "requirements_files" class DependencySpecificationDetector: @@ -25,9 +25,9 @@ class DependencySpecificationDetector: """ - def __init__(self, config: Path, requirements_txt: tuple[str, ...] = ("requirements.txt",)) -> None: + def __init__(self, config: Path, requirements_files: tuple[str, ...] = ("requirements.txt",)) -> None: self.config = config - self.requirements_txt = requirements_txt + self.requirements_files = requirements_files def detect(self) -> DependencyManagementFormat: pyproject_toml_found = self._project_contains_pyproject_toml() @@ -37,10 +37,10 @@ def detect(self) -> DependencyManagementFormat: return DependencyManagementFormat.PDM if pyproject_toml_found and self._project_uses_pep_621(): return DependencyManagementFormat.PEP_621 - if self._project_uses_requirements_txt(): - return DependencyManagementFormat.REQUIREMENTS_TXT + if self._project_uses_requirements_files(): + return DependencyManagementFormat.REQUIREMENTS_FILE - raise DependencySpecificationNotFoundError(self.requirements_txt) + raise DependencySpecificationNotFoundError(self.requirements_files) def _project_contains_pyproject_toml(self) -> bool: if self.config.exists(): @@ -100,11 +100,11 @@ def _project_uses_pep_621(self) -> bool: else: return True - def _project_uses_requirements_txt(self) -> bool: - check = any(Path(requirements_txt).is_file() for requirements_txt in self.requirements_txt) + def _project_uses_requirements_files(self) -> bool: + check = any(Path(requirements_files).is_file() for requirements_files in self.requirements_files) if check: logging.debug( "Dependency specification found in '%s'. Will use this to determine the project's dependencies.\n", - ", ".join(self.requirements_txt), + ", ".join(self.requirements_files), ) return check diff --git a/python/deptry/deprecate/requirements_txt.py b/python/deptry/deprecate/requirements_txt.py new file mode 100644 index 00000000..2a4c69cc --- /dev/null +++ b/python/deptry/deprecate/requirements_txt.py @@ -0,0 +1,15 @@ +from __future__ import annotations + +REQUIREMENTS_TXT_DEPRECATION_MESSAGE = ( + "Warning: In an upcoming release, support for the `--requirements-txt` command-line " + "option and the `requirements_txt` configuration parameter will be discontinued. " + "Instead, use `--requirements-files` or `requirements_files` under the `[tool.deptry]` " + "section in pyproject.toml." +) + +REQUIREMENTS_TXT_DEV_DEPRECATION_MESSAGE = ( + "Warning: In an upcoming release, support for the `--requirements-txt-dev` command-line " + "option and the `requirements_txt_dev` configuration parameter will be discontinued. " + "Instead, use `--requirements-files-dev` or `requirements_files_dev` under the `[tool.deptry]` " + "section in pyproject.toml." +) diff --git a/python/deptry/exceptions.py b/python/deptry/exceptions.py index 78e545ed..2dc2428f 100644 --- a/python/deptry/exceptions.py +++ b/python/deptry/exceptions.py @@ -9,10 +9,10 @@ class DependencySpecificationNotFoundError(FileNotFoundError): - def __init__(self, requirements_txt: tuple[str, ...]) -> None: + def __init__(self, requirements_files: tuple[str, ...]) -> None: super().__init__( "No file called 'pyproject.toml' with a [tool.poetry.dependencies], [tool.pdm] or [project] section or" - f" file(s) called '{', '.join(requirements_txt)}' found. Exiting." + f" file(s) called '{', '.join(requirements_files)}' found. Exiting." ) diff --git a/tests/functional/cli/test_cli_requirements_txt.py b/tests/functional/cli/test_cli_requirements_txt.py index 4ca6f23b..28f3fbc0 100644 --- a/tests/functional/cli/test_cli_requirements_txt.py +++ b/tests/functional/cli/test_cli_requirements_txt.py @@ -14,7 +14,7 @@ @pytest.mark.xdist_group(name=Project.REQUIREMENTS_TXT) -def test_cli_single_requirements_txt(pip_venv_factory: PipVenvFactory) -> None: +def test_cli_single_requirements_files(pip_venv_factory: PipVenvFactory) -> None: with pip_venv_factory( Project.REQUIREMENTS_TXT, install_command=( @@ -23,7 +23,7 @@ def test_cli_single_requirements_txt(pip_venv_factory: PipVenvFactory) -> None: ) as virtual_env: issue_report = f"{uuid.uuid4()}.json" result = virtual_env.run( - "deptry . --requirements-txt requirements.txt --requirements-txt-dev requirements-dev.txt -o" + "deptry . --requirements-files requirements.txt --requirements-files-dev requirements-dev.txt -o" f" {issue_report}" ) @@ -105,7 +105,7 @@ def test_cli_single_requirements_txt(pip_venv_factory: PipVenvFactory) -> None: @pytest.mark.xdist_group(name=Project.REQUIREMENTS_TXT) -def test_cli_multiple_requirements_txt(pip_venv_factory: PipVenvFactory) -> None: +def test_cli_multiple_requirements_files(pip_venv_factory: PipVenvFactory) -> None: with pip_venv_factory( Project.REQUIREMENTS_TXT, install_command=( @@ -114,7 +114,7 @@ def test_cli_multiple_requirements_txt(pip_venv_factory: PipVenvFactory) -> None ) as virtual_env: issue_report = f"{uuid.uuid4()}.json" result = virtual_env.run( - "deptry . --requirements-txt requirements.txt,requirements-2.txt --requirements-txt-dev" + "deptry . --requirements-files requirements.txt,requirements-2.txt --requirements-files-dev" f" requirements-dev.txt -o {issue_report}" ) diff --git a/tests/unit/dependency_getter/test_requirements_txt.py b/tests/unit/dependency_getter/test_requirements_txt.py index 096931fa..c2cbb0b0 100644 --- a/tests/unit/dependency_getter/test_requirements_txt.py +++ b/tests/unit/dependency_getter/test_requirements_txt.py @@ -4,12 +4,12 @@ import pytest -from deptry.dependency_getter.requirements_txt import RequirementsTxtDependencyGetter +from deptry.dependency_getter.requirements_files import RequirementsTxtDependencyGetter from tests.utils import run_within_dir -def test_parse_requirements_txt(tmp_path: Path) -> None: - fake_requirements_txt = """click==8.1.3 #123asd +def test_parse_requirements_files(tmp_path: Path) -> None: + fake_requirements_files = """click==8.1.3 #123asd colorama==0.4.5 importlib-metadata==4.2.0 ; python_version >= "3.7" and python_version < "3.8" isort==5.10.1, <6.0 @@ -33,7 +33,7 @@ def test_parse_requirements_txt(tmp_path: Path) -> None: """ with run_within_dir(tmp_path): with Path("requirements.txt").open("w") as f: - f.write(fake_requirements_txt) + f.write(fake_requirements_files) getter = RequirementsTxtDependencyGetter( config=Path("pyproject.toml"), @@ -66,8 +66,8 @@ def test_parse_requirements_txt(tmp_path: Path) -> None: assert "fox" in dependencies[17].top_levels -def test_parse_requirements_txt_urls(tmp_path: Path) -> None: - fake_requirements_txt = """urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip +def test_parse_requirements_files_urls(tmp_path: Path) -> None: + fake_requirements_files = """urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip git+https://github.com/baz/foo-bar.git@asd#egg=foo-bar git+https://github.com/baz/foo-bar.git@asd @@ -75,7 +75,7 @@ def test_parse_requirements_txt_urls(tmp_path: Path) -> None: with run_within_dir(tmp_path): with Path("requirements.txt").open("w") as f: - f.write(fake_requirements_txt) + f.write(fake_requirements_files) dependencies_extract = RequirementsTxtDependencyGetter(Path("pyproject.toml")).get() dependencies = dependencies_extract.dependencies @@ -96,7 +96,7 @@ def test_single(tmp_path: Path) -> None: f.write("click==8.1.3 #123asd\ncolorama==0.4.5") dependencies_extract = RequirementsTxtDependencyGetter( - Path("pyproject.toml"), requirements_txt=("req.txt",) + Path("pyproject.toml"), requirements_files=("req.txt",) ).get() dependencies = dependencies_extract.dependencies @@ -116,7 +116,7 @@ def test_multiple(tmp_path: Path) -> None: f.write("bar") dependencies_extract = RequirementsTxtDependencyGetter( - Path("pyproject.toml"), requirements_txt=("foo.txt", "bar.txt") + Path("pyproject.toml"), requirements_files=("foo.txt", "bar.txt") ).get() dependencies = dependencies_extract.dependencies @@ -180,7 +180,7 @@ def test_dev_multiple_with_arguments(tmp_path: Path) -> None: f.write("bar") dependencies_extract = RequirementsTxtDependencyGetter( - Path("pyproject.toml"), requirements_txt_dev=("foo.txt", "bar.txt") + Path("pyproject.toml"), requirements_files_dev=("foo.txt", "bar.txt") ).get() dev_dependencies = dependencies_extract.dev_dependencies diff --git a/tests/unit/deprecate/test_requirements_txt.py b/tests/unit/deprecate/test_requirements_txt.py new file mode 100644 index 00000000..6b9920bb --- /dev/null +++ b/tests/unit/deprecate/test_requirements_txt.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from unittest.mock import ANY, patch + +from click.testing import CliRunner + +from deptry.cli import deptry +from deptry.deprecate.requirements_txt import ( + REQUIREMENTS_TXT_DEPRECATION_MESSAGE, + REQUIREMENTS_TXT_DEV_DEPRECATION_MESSAGE, +) + +DEFAULT_CORE_ARGS = { + "root": (ANY,), + "config": ANY, + "no_ansi": ANY, + "exclude": ANY, + "extend_exclude": ANY, + "using_default_exclude": ANY, + "ignore_notebooks": ANY, + "ignore": ANY, + "per_rule_ignores": ANY, + "known_first_party": ANY, + "json_output": ANY, + "package_module_name_map": ANY, + "pep621_dev_dependency_groups": ANY, +} + + +def test_requirements_txt_deprecated() -> None: + with patch("deptry.cli.Core") as mock_core, patch("logging.warning") as mock_warning: + result = CliRunner().invoke(deptry, [".", "--requirements-txt", "somefile.txt"]) + + assert result.exit_code == 0 + mock_warning.assert_called_once_with(REQUIREMENTS_TXT_DEPRECATION_MESSAGE) + + # Assert that Core was instantiated with the correct arguments + mock_core.assert_called_once_with( + **DEFAULT_CORE_ARGS, + requirements_files=("somefile.txt",), + requirements_files_dev=("dev-requirements.txt", "requirements-dev.txt"), + ) + + +def test_requirements_txt_dev_deprecated() -> None: + with patch("deptry.cli.Core") as mock_core, patch("logging.warning") as mock_warning: + result = CliRunner().invoke(deptry, [".", "--requirements-txt-dev", "somefile.txt"]) + + assert result.exit_code == 0 + mock_warning.assert_called_once_with(REQUIREMENTS_TXT_DEV_DEPRECATION_MESSAGE) + + # Assert that Core was instantiated with the correct arguments + mock_core.assert_called_once_with( + **DEFAULT_CORE_ARGS, requirements_files=("requirements.txt",), requirements_files_dev=("somefile.txt",) + ) + + +def test_requirements_files_works_as_expected() -> None: + with patch("deptry.cli.Core") as mock_core, patch("logging.warning") as mock_warning: + result = CliRunner().invoke(deptry, [".", "--requirements-files", "somefile.txt"]) + + assert result.exit_code == 0 + mock_warning.assert_not_called() + + # Assert that Core was instantiated with the correct arguments + mock_core.assert_called_once_with( + **DEFAULT_CORE_ARGS, + requirements_files=("somefile.txt",), + requirements_files_dev=("dev-requirements.txt", "requirements-dev.txt"), + ) + + +def test_requirements_files_dev_works_as_expected() -> None: + with patch("deptry.cli.Core") as mock_core, patch("logging.warning") as mock_warning: + result = CliRunner().invoke(deptry, [".", "--requirements-files-dev", "somefile.txt"]) + + assert result.exit_code == 0 + mock_warning.assert_not_called() + + # Assert that Core was instantiated with the correct arguments + mock_core.assert_called_once_with( + **DEFAULT_CORE_ARGS, requirements_files=("requirements.txt",), requirements_files_dev=("somefile.txt",) + ) diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 2e42387d..0d06b217 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -24,8 +24,8 @@ Argument(param_decls=["per_rule_ignores"]), Argument(param_decls=["ignore"]), Argument(param_decls=["ignore_notebooks"]), - Argument(param_decls=["requirements_txt"]), - Argument(param_decls=["requirements_txt_dev"]), + Argument(param_decls=["requirements_files"]), + Argument(param_decls=["requirements_files_dev"]), ], ) @@ -40,8 +40,8 @@ def test_read_configuration_from_pyproject_toml_exists(tmp_path: Path) -> None: "DEP002": ["baz", "bar"], }, "ignore": [], - "requirements_txt": "requirements.txt", - "requirements_txt_dev": ["requirements-dev.txt"], + "requirements_files": "requirements.txt", + "requirements_files_dev": ["requirements-dev.txt"], }, ) @@ -51,8 +51,8 @@ def test_read_configuration_from_pyproject_toml_exists(tmp_path: Path) -> None: extend_exclude = ["bar", "foo"] ignore_notebooks = true ignore = ["DEP001", "DEP002", "DEP003", "DEP004"] - requirements_txt = "foo.txt" - requirements_txt_dev = ["dev.txt", "tests.txt"] + requirements_files = "foo.txt" + requirements_files_dev = ["dev.txt", "tests.txt"] [tool.deptry.per_rule_ignores] DEP001 = ["baz", "foobar"] @@ -83,8 +83,8 @@ def test_read_configuration_from_pyproject_toml_exists(tmp_path: Path) -> None: "DEP004": ["barfoo"], }, "ignore": ["DEP001", "DEP002", "DEP003", "DEP004"], - "requirements_txt": "foo.txt", - "requirements_txt_dev": ["dev.txt", "tests.txt"], + "requirements_files": "foo.txt", + "requirements_files_dev": ["dev.txt", "tests.txt"], } diff --git a/tests/unit/test_core.py b/tests/unit/test_core.py index 2349168d..e05d6eea 100644 --- a/tests/unit/test_core.py +++ b/tests/unit/test_core.py @@ -88,8 +88,8 @@ def test__get_local_modules( extend_exclude=(), using_default_exclude=True, ignore_notebooks=False, - requirements_txt=(), - requirements_txt_dev=(), + requirements_files=(), + requirements_files_dev=(), known_first_party=known_first_party, json_output="", package_module_name_map={}, diff --git a/tests/unit/test_dependency_specification_detector.py b/tests/unit/test_dependency_specification_detector.py index ae129c92..648f019b 100644 --- a/tests/unit/test_dependency_specification_detector.py +++ b/tests/unit/test_dependency_specification_detector.py @@ -21,13 +21,13 @@ def test_poetry(tmp_path: Path) -> None: assert spec == DependencyManagementFormat.POETRY -def test_requirements_txt(tmp_path: Path) -> None: +def test_requirements_files(tmp_path: Path) -> None: with run_within_dir(tmp_path): with Path("requirements.txt").open("w") as f: f.write('foo >= "1.0"') spec = DependencySpecificationDetector(Path("pyproject.toml")).detect() - assert spec == DependencyManagementFormat.REQUIREMENTS_TXT + assert spec == DependencyManagementFormat.REQUIREMENTS_FILE def test_pdm_with_dev_dependencies(tmp_path: Path) -> None: @@ -84,24 +84,24 @@ def test_both(tmp_path: Path) -> None: assert spec == DependencyManagementFormat.POETRY -def test_requirements_txt_with_argument(tmp_path: Path) -> None: +def test_requirements_files_with_argument(tmp_path: Path) -> None: with run_within_dir(tmp_path): with Path("req.txt").open("w") as f: f.write('foo >= "1.0"') - spec = DependencySpecificationDetector(Path("pyproject.toml"), requirements_txt=("req.txt",)).detect() - assert spec == DependencyManagementFormat.REQUIREMENTS_TXT + spec = DependencySpecificationDetector(Path("pyproject.toml"), requirements_files=("req.txt",)).detect() + assert spec == DependencyManagementFormat.REQUIREMENTS_FILE -def test_requirements_txt_with_argument_not_root_directory(tmp_path: Path) -> None: +def test_requirements_files_with_argument_not_root_directory(tmp_path: Path) -> None: with run_within_dir(tmp_path): Path("req").mkdir() with Path("req/req.txt").open("w") as f: f.write('foo >= "1.0"') - spec = DependencySpecificationDetector(Path("pyproject.toml"), requirements_txt=("req/req.txt",)).detect() - assert spec == DependencyManagementFormat.REQUIREMENTS_TXT + spec = DependencySpecificationDetector(Path("pyproject.toml"), requirements_files=("req/req.txt",)).detect() + assert spec == DependencyManagementFormat.REQUIREMENTS_FILE def test_dependency_specification_not_found_raises_exception(tmp_path: Path) -> None: @@ -112,4 +112,4 @@ def test_dependency_specification_not_found_raises_exception(tmp_path: Path) -> " file(s) called 'req/req.txt' found. Exiting." ), ): - DependencySpecificationDetector(Path("pyproject.toml"), requirements_txt=("req/req.txt",)).detect() + DependencySpecificationDetector(Path("pyproject.toml"), requirements_files=("req/req.txt",)).detect()