Source code for versions.repositories
from .requirements import Requirement
[docs]class Repository(object):
"""A package repository.
:param packages: Repository packages.
:type packages: :func:`set` of :class:`.Package` or `None`
"""
def __init__(self, packages=None):
#: :func:`set` of :class:`~versions.packages.Package` objects.
self.packages = packages or set()
[docs] def get(self, requirement):
"""Find packages matching ``requirement``.
:param requirement: Requirement to match against repository packages.
:type requirement: `str` or :class:`.Requirement`
:returns: :func:`list` of matching :class:`.Package` objects.
"""
if isinstance(requirement, str):
requirement = Requirement.parse(requirement)
return sorted(p for p in self.packages
if requirement.name == p.name and requirement.match(p))
[docs]class Pool(object):
"""A package repository pool.
When querying a repository pool, it queries all repositories, and merges
their results.
:param repositories: Underlying package repositories.
:type repositories: :func:`list` of :class:`Repository` or ``None``
"""
def __init__(self, repositories=None):
#: :func:`list` of :class:`Repository <repositories>`
self.repositories = repositories or []
[docs] def get(self, requirement):
"""Find packages matching ``requirement``.
:param requirement: Requirement to get from all underlying \
repositories.
:type requirement: `str` or :class:`.Requirement`
:returns: :func:`list` of matching :class:`.Package` objects.
"""
if isinstance(requirement, str):
requirement = Requirement.parse(requirement)
packages = set()
for repository in self.repositories:
packages |= set(repository.get(requirement))
return sorted(packages)