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))
             )
Exemplo n.º 2
0
    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))
                ))