Commit 801a549a by Randy Döring

repositories: new class LockfileRepository that can distinguish direct origin…

repositories: new class LockfileRepository that can distinguish direct origin dependencies with same name and version
parent 44f9a43f
from __future__ import annotations
from typing import TYPE_CHECKING
from poetry.repositories import Repository
if TYPE_CHECKING:
from poetry.core.packages.package import Package
class LockfileRepository(Repository):
"""
Special repository that distinguishes packages not only by name and version,
but also by source type, url, etc.
"""
def has_package(self, package: Package) -> bool:
return any(p == package for p in self.packages)
def remove_package(self, package: Package) -> None:
index = None
for i, repo_package in enumerate(self.packages):
if repo_package == package:
index = i
break
if index is not None:
del self._packages[index]
from __future__ import annotations
from copy import deepcopy
from poetry.core.packages.package import Package
from poetry.repositories.lockfile_repository import LockfileRepository
def test_has_package():
repo = LockfileRepository()
url_package = Package(
"a", "1.0", source_type="url", source_url="https://example.org/a.whl"
)
assert not repo.has_package(url_package)
repo.add_package(url_package)
pypi_package = Package("a", "1.0")
assert not repo.has_package(pypi_package)
repo.add_package(pypi_package)
url_package_2 = Package(
"a", "1.0", source_type="url", source_url="https://example.org/a-1.whl"
)
assert not repo.has_package(url_package_2)
repo.add_package(url_package_2)
assert len(repo.packages) == 3
assert repo.has_package(deepcopy(url_package))
assert repo.has_package(deepcopy(pypi_package))
assert repo.has_package(deepcopy(url_package_2))
def test_remove_package():
url_package = Package(
"a", "1.0", source_type="url", source_url="https://example.org/a.whl"
)
pypi_package = Package("a", "1.0")
url_package_2 = Package(
"a", "1.0", source_type="url", source_url="https://example.org/a-1.whl"
)
repo = LockfileRepository()
repo.add_package(url_package)
repo.add_package(pypi_package)
repo.add_package(url_package_2)
assert len(repo.packages) == 3
repo.remove_package(deepcopy(pypi_package))
assert len(repo.packages) == 2
repo.remove_package(pypi_package)
assert len(repo.packages) == 2
repo.remove_package(deepcopy(url_package_2))
assert len(repo.packages) == 1
assert repo.packages[0] == url_package
repo.remove_package(url_package_2)
assert len(repo.packages) == 1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment