mirror of
https://github.com/wassname/pip-package-list.git
synced 2026-06-27 16:10:20 +08:00
Moving some files around for clarity
This commit is contained in:
@@ -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",
|
||||
]
|
||||
|
||||
@@ -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}"
|
||||
@@ -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,
|
||||
@@ -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]:
|
||||
|
||||
+3
-6
@@ -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
|
||||
@@ -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
|
||||
@@ -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 == [
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user