From beede0f11222c74da3539631946e707d2fa1806f Mon Sep 17 00:00:00 2001 From: Swen Kooij Date: Sat, 29 Feb 2020 16:13:18 +0200 Subject: [PATCH] Moving some files around for clarity --- pippackagelist/__init__.py | 30 ++++++++ pippackagelist/entry.py | 63 ++++++++++++++++ .../{list.py => list_packages_from_files.py} | 16 ++--- ...irements.py => parse_requirements_list.py} | 71 +++---------------- ...xt_parser.py => parse_requirements_txt.py} | 9 +-- .../{setup_py_parser.py => parse_setup_py.py} | 9 +-- ...st.py => test_list_packages_from_files.py} | 18 +++-- tests/test_parse_requirements.py | 16 ++--- tests/test_parse_requirements_txt.py | 4 +- tests/test_parse_setup_py.py | 4 +- 10 files changed, 140 insertions(+), 100 deletions(-) create mode 100644 pippackagelist/entry.py rename pippackagelist/{list.py => list_packages_from_files.py} (90%) rename pippackagelist/{requirements.py => parse_requirements_list.py} (73%) rename pippackagelist/{requirements_txt_parser.py => parse_requirements_txt.py} (61%) rename pippackagelist/{setup_py_parser.py => parse_setup_py.py} (78%) rename tests/{test_list.py => test_list_packages_from_files.py} (65%) diff --git a/pippackagelist/__init__.py b/pippackagelist/__init__.py index e69de29..a5c1177 100644 --- a/pippackagelist/__init__.py +++ b/pippackagelist/__init__.py @@ -0,0 +1,30 @@ +from .entry import ( + RequirementsEditableEntry, + RequirementsEntry, + RequirementsEntrySource, + RequirementsPackageEntry, + RequirementsRecursiveEntry, + RequirementsVCSPackageEntry, +) +from .list_packages_from_files import list_packages_from_files +from .parse_requirements_list import ( + RequirementsEntryParseError, + parse_requirements_list, +) +from .parse_requirements_txt import parse_requirements_txt +from .parse_setup_py import parse_setup_py + +__all__ = [ + "parse_setup_py", + "parse_requirements_txt", + "parse_requirements_list", + "list_packages_from_files", + "RequirementsEntryParseError", + "RequirementsEditableEntry", + "RequirementsEntry", + "RequirementsRecursiveEntry", + "RequirementsVCSPackageEntry", + "RequirementsEntrySource", + "RequirementsPackageEntry", + "parse_requirements", +] diff --git a/pippackagelist/entry.py b/pippackagelist/entry.py new file mode 100644 index 0000000..84b8d89 --- /dev/null +++ b/pippackagelist/entry.py @@ -0,0 +1,63 @@ +import os + +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class RequirementsEntrySource: + path: str + line: Optional[str] + line_number: Optional[str] + + +@dataclass +class RequirementsEntry: + source: Optional[RequirementsEntrySource] + + +@dataclass +class RequirementsRecursiveEntry(RequirementsEntry): + original_path: str + absolute_path: str + + def __str__(self) -> str: + path = os.path.relpath(self.absolute_path, os.getcwd()) + return f"-r {path}" + + +@dataclass +class RequirementsEditableEntry(RequirementsEntry): + original_path: str + absolute_path: str + + resolved_path: str + resolved_absolute_path: str + + def __str__(self) -> str: + path = os.path.relpath(self.absolute_path, os.getcwd()) + return f"-e {path}" + + +@dataclass +class RequirementsVCSPackageEntry(RequirementsEntry): + vcs: str + uri: str + tag: Optional[str] + + def __str__(self) -> str: + result = f"{self.vcs}+{self.uri}" + if self.tag: + result += f"#{self.tag}" + + return result + + +@dataclass +class RequirementsPackageEntry(RequirementsEntry): + name: str + operator: str + version: str + + def __str__(self) -> str: + return f"{self.name}{self.operator}{self.version}" diff --git a/pippackagelist/list.py b/pippackagelist/list_packages_from_files.py similarity index 90% rename from pippackagelist/list.py rename to pippackagelist/list_packages_from_files.py index 805a8b1..844484d 100644 --- a/pippackagelist/list.py +++ b/pippackagelist/list_packages_from_files.py @@ -1,19 +1,19 @@ from typing import Generator, List -from .identify_package_list_file_type import ( - PackageListFileType, - identify_package_list_file_type, -) -from .requirements import ( +from .entry import ( RequirementsEditableEntry, RequirementsEntry, RequirementsRecursiveEntry, ) -from .requirements_txt_parser import parse_requirements_txt -from .setup_py_parser import parse_setup_py +from .identify_package_list_file_type import ( + PackageListFileType, + identify_package_list_file_type, +) +from .parse_requirements_txt import parse_requirements_txt +from .parse_setup_py import parse_setup_py -def list( +def list_packages_from_files( file_paths: List[str], recurse_recursive: bool = False, recurse_editable: bool = False, diff --git a/pippackagelist/requirements.py b/pippackagelist/parse_requirements_list.py similarity index 73% rename from pippackagelist/requirements.py rename to pippackagelist/parse_requirements_list.py index aab09af..cbaec46 100644 --- a/pippackagelist/requirements.py +++ b/pippackagelist/parse_requirements_list.py @@ -1,74 +1,23 @@ import os import re -from dataclasses import dataclass from typing import Generator, List, Optional +from .entry import ( + RequirementsEditableEntry, + RequirementsEntry, + RequirementsEntrySource, + RequirementsPackageEntry, + RequirementsRecursiveEntry, + RequirementsVCSPackageEntry, +) + class RequirementsEntryParseError(RuntimeError): pass -@dataclass -class RequirementsEntrySource: - path: str - line: Optional[str] - line_number: Optional[str] - - -@dataclass -class RequirementsEntry: - source: Optional[RequirementsEntrySource] - - -@dataclass -class RequirementsRecursiveEntry(RequirementsEntry): - original_path: str - absolute_path: str - - def __str__(self) -> str: - path = os.path.relpath(self.absolute_path, os.getcwd()) - return f"-r {path}" - - -@dataclass -class RequirementsEditableEntry(RequirementsEntry): - original_path: str - absolute_path: str - - resolved_path: str - resolved_absolute_path: str - - def __str__(self) -> str: - path = os.path.relpath(self.absolute_path, os.getcwd()) - return f"-e {path}" - - -@dataclass -class RequirementsVCSPackageEntry(RequirementsEntry): - vcs: str - uri: str - tag: Optional[str] - - def __str__(self) -> str: - result = f"{self.vcs}+{self.uri}" - if self.tag: - result += f"#{self.tag}" - - return result - - -@dataclass -class RequirementsPackageEntry(RequirementsEntry): - name: str - operator: str - version: str - - def __str__(self) -> str: - return f"{self.name}{self.operator}{self.version}" - - -def parse_requirements( +def parse_requirements_list( source: Optional[RequirementsEntrySource], lines: List[str] ) -> Generator[RequirementsEntry, None, None]: diff --git a/pippackagelist/requirements_txt_parser.py b/pippackagelist/parse_requirements_txt.py similarity index 61% rename from pippackagelist/requirements_txt_parser.py rename to pippackagelist/parse_requirements_txt.py index fc0703b..ac9c0db 100644 --- a/pippackagelist/requirements_txt_parser.py +++ b/pippackagelist/parse_requirements_txt.py @@ -2,11 +2,8 @@ import os from typing import Generator -from .requirements import ( - RequirementsEntry, - RequirementsEntrySource, - parse_requirements, -) +from .entry import RequirementsEntry, RequirementsEntrySource +from .parse_requirements_list import parse_requirements_list def parse_requirements_txt( @@ -17,5 +14,5 @@ def parse_requirements_txt( ) with open(file_path, "r") as fp: - for requirement in parse_requirements(source, fp.readlines()): + for requirement in parse_requirements_list(source, fp.readlines()): yield requirement diff --git a/pippackagelist/setup_py_parser.py b/pippackagelist/parse_setup_py.py similarity index 78% rename from pippackagelist/setup_py_parser.py rename to pippackagelist/parse_setup_py.py index fee4cc8..1853429 100644 --- a/pippackagelist/setup_py_parser.py +++ b/pippackagelist/parse_setup_py.py @@ -4,11 +4,8 @@ from typing import Generator import setuptools -from .requirements import ( - RequirementsEntry, - RequirementsEntrySource, - parse_requirements, -) +from .entry import RequirementsEntry, RequirementsEntrySource +from .parse_requirements_list import parse_requirements_list def parse_setup_py(file_path: str) -> Generator[RequirementsEntry, None, None]: @@ -32,5 +29,5 @@ def parse_setup_py(file_path: str) -> Generator[RequirementsEntry, None, None]: for _, extra_requirements in extras_require.items(): requirements.extend(extra_requirements) - for requirement in parse_requirements(source, requirements): + for requirement in parse_requirements_list(source, requirements): yield requirement diff --git a/tests/test_list.py b/tests/test_list_packages_from_files.py similarity index 65% rename from tests/test_list.py rename to tests/test_list_packages_from_files.py index 33bbec8..fe776d6 100644 --- a/tests/test_list.py +++ b/tests/test_list_packages_from_files.py @@ -1,17 +1,17 @@ import os -from pippackagelist.list import list as list_packages +from pippackagelist.list_packages_from_files import list_packages_from_files test_case_1_path = os.path.join( os.path.dirname(__file__), "./test-cases/list-1" ) -def test_list_from_requirements(): +def test_list_packages_from_files_from_requirements(): path = os.path.join(test_case_1_path, "requirements.txt") raw_requirements = [ - str(requirement) for requirement in list_packages([path]) + str(requirement) for requirement in list_packages_from_files([path]) ] assert raw_requirements == [ "-e tests/test-cases/list-1/package-1", @@ -21,12 +21,14 @@ def test_list_from_requirements(): ] -def test_list_from_requirements_recurse_recursive(): +def test_list_packages_from_files_from_requirements_recurse_recursive(): path = os.path.join(test_case_1_path, "requirements.txt") raw_requirements = [ str(requirement) - for requirement in list_packages([path], recurse_recursive=True) + for requirement in list_packages_from_files( + [path], recurse_recursive=True + ) ] assert raw_requirements == [ @@ -38,12 +40,14 @@ def test_list_from_requirements_recurse_recursive(): ] -def test_list_from_requirements_recurse_editable(): +def test_list_packages_from_files_from_requirements_recurse_editable(): path = os.path.join(test_case_1_path, "requirements.txt") raw_requirements = [ str(requirement) - for requirement in list_packages([path], recurse_editable=True) + for requirement in list_packages_from_files( + [path], recurse_editable=True + ) ] assert raw_requirements == [ diff --git a/tests/test_parse_requirements.py b/tests/test_parse_requirements.py index 1a74332..a74db56 100644 --- a/tests/test_parse_requirements.py +++ b/tests/test_parse_requirements.py @@ -2,14 +2,14 @@ import os import pytest -from pippackagelist.requirements import ( +from pippackagelist.entry import ( RequirementsEditableEntry, RequirementsEntrySource, RequirementsPackageEntry, RequirementsRecursiveEntry, RequirementsVCSPackageEntry, - parse_requirements, ) +from pippackagelist.parse_requirements_list import parse_requirements_list source = RequirementsEntrySource( path="requirements.txt", line=None, line_number=None, @@ -20,7 +20,7 @@ source = RequirementsEntrySource( def test_parse_requirements_recursive_entry(path): line = "-r %s" % path - requirements = list(parse_requirements(source, [line])) + requirements = list(parse_requirements_list(source, [line])) assert len(requirements) == 1 assert isinstance(requirements[0], RequirementsRecursiveEntry) @@ -36,7 +36,7 @@ def test_parse_requirements_recursive_entry(path): def test_parse_requirements_editable_entry(path): line = "-e %s" % path - requirements = list(parse_requirements(source, [line])) + requirements = list(parse_requirements_list(source, [line])) assert len(requirements) == 1 assert isinstance(requirements[0], RequirementsEditableEntry) @@ -58,7 +58,7 @@ def test_parse_requirements_vcs_package_entry(vcs, uri, tag): if tag: line += f"#{tag}" - requirements = list(parse_requirements(source, [line])) + requirements = list(parse_requirements_list(source, [line])) assert len(requirements) == 1 assert isinstance(requirements[0], RequirementsVCSPackageEntry) @@ -74,7 +74,7 @@ def test_parse_requirements_vcs_package_entry(vcs, uri, tag): def test_parse_requirements_package_entry(operator): line = "django%s1.0" % operator - requirements = list(parse_requirements(source, [line])) + requirements = list(parse_requirements_list(source, [line])) assert len(requirements) == 1 assert isinstance(requirements[0], RequirementsPackageEntry) @@ -95,7 +95,7 @@ def test_parse_requirements_skips_comments_and_blank_lines(): " # another comment", ] - requirements = list(parse_requirements(source, lines)) + requirements = list(parse_requirements_list(source, lines)) assert len(requirements) == 1 assert isinstance(requirements[0], RequirementsPackageEntry) @@ -108,7 +108,7 @@ def test_parse_requirements_ignores_leading_and_trailing_whitespace(): " git+https://github.com/test/test#tag", ] - requirements = list(parse_requirements(source, lines)) + requirements = list(parse_requirements_list(source, lines)) assert len(requirements) == 4 assert isinstance(requirements[2], RequirementsEditableEntry) diff --git a/tests/test_parse_requirements_txt.py b/tests/test_parse_requirements_txt.py index 9062a45..c4da9d1 100644 --- a/tests/test_parse_requirements_txt.py +++ b/tests/test_parse_requirements_txt.py @@ -1,11 +1,11 @@ import os -from pippackagelist.requirements import ( +from pippackagelist.entry import ( RequirementsEditableEntry, RequirementsPackageEntry, RequirementsRecursiveEntry, ) -from pippackagelist.requirements_txt_parser import parse_requirements_txt +from pippackagelist.parse_requirements_txt import parse_requirements_txt requirements_txt_path = os.path.join( os.path.dirname(__file__), "./test-cases/requirements.txt" diff --git a/tests/test_parse_setup_py.py b/tests/test_parse_setup_py.py index b1ae9ee..00cea7c 100644 --- a/tests/test_parse_setup_py.py +++ b/tests/test_parse_setup_py.py @@ -1,11 +1,11 @@ import os -from pippackagelist.requirements import ( +from pippackagelist.entry import ( RequirementsEditableEntry, RequirementsPackageEntry, RequirementsRecursiveEntry, ) -from pippackagelist.setup_py_parser import parse_setup_py +from pippackagelist.parse_setup_py import parse_setup_py setup_py_path = os.path.join(os.path.dirname(__file__), "./test-cases/setup.py") setup_py_with_extras_path = os.path.join(