def traverse(pkg): if pkg.repository.name in filters_per_repo: excludes_filter = filters_per_repo[pkg.repository.name] if not excludes_filter(pkg): consumer( PackageRelation.from_args((pkg.name, '=', pkg.version)) )
def _get_packages(self, repositories, requirements): if requirements: forest = objects.PackagesForest() package_relations = [] load_package_relations( requirements.get('packages'), package_relations.append ) packages_traverse = get_packages_traverse( requirements.get('repositories'), package_relations.append ) for repo in repositories: tree = forest.add_tree(repo.priority) self.controller.load_packages( repo, compose( tree.add, packages_traverse ) ) mandatory = requirements.get('mandatory') if mandatory: for package in tree.mandatory_packages: package_relations.append( PackageRelation.from_args( (package.name, _MANDATORY[requirements['mandatory']], package.version))) return forest.get_packages(package_relations) packages = set() self._load_packages(repositories, packages.add) return packages
def load_package_relations(data, consumer): """Gets the list PackageRelations from descriptions. :param data: the descriptions of package relations :param consumer: the result consumer """ if not data: return for d in data: versions = d.get('versions', None) if versions is None: consumer(PackageRelation.from_args((d['name'],))) else: for version in versions: consumer(PackageRelation.from_args( ([d['name']] + version.split(None, 1)) ))