from typing import Mapping, List from . import alpine_linux, arch_linux, crates_io, homebrew from .base import Repository, slug, Version __all__ = [ 'get_versions', ] def repos_from(module): for exported in module.__all__: attr = getattr(module, exported) if isinstance(attr, Repository): yield attr all_repos: List[Repository] = [ *repos_from(alpine_linux), *repos_from(arch_linux), *repos_from(crates_io), *repos_from(homebrew), ] def get_versions(package: str, args: Mapping[str, str]) -> Mapping[str, Version]: special_cases = dict() for repo, name in args.items(): special_cases[repo] = name result = dict() for repo in all_repos: repo_versions = repo.get_versions() if slug(repo.full_name()) in special_cases: package_here = special_cases[slug(repo.full_name())] elif slug(repo.family) in special_cases: package_here = special_cases[slug(repo.family)] elif slug(repo.repo) in special_cases: package_here = special_cases[slug(repo.repo)] else: package_here = package if package_here in repo_versions: result[repo.full_name()] = repo_versions[package_here] return result