예제 #1
0
    def from_yaml(cls, filename):
        with open(filename) as fp:
            data = yaml.load(fp)

        packages = collections.OrderedDict(
            parse_package_list(data.get("packages", [])))
        operations = data.get("request", [])

        request = Request()

        for operation in operations:
            kind = operation["operation"]
            requirement = Requirement._from_string(operation["requirement"])
            getattr(request, kind)(requirement)

        decisions = data.get("decisions", {})

        operations = []
        for operation in data.get("transaction", []):
            if operation["kind"] == "install":
                operations.append(InstallOperation(operation["package"]))
            elif operation["kind"] == "update":
                operations.append(
                    UpdateOperation(operation["from"], operation["to"]))
            elif operation["kind"] == "remove":
                operations.append(RemoveOperation(operation["package"]))
            else:
                msg = "invalid operation kind {!r}".format(operation["kind"])
                raise ValueError(msg)

        return cls(packages, [remote_repository(data, packages)],
                   installed_repository(data, packages), request, decisions,
                   operations)
예제 #2
0
    # Step 2: recurse
    for dependency in best_dependencies:
        solution = optimize_at_level(pool, dependency, new_rules, solution)

    return solution


def optimize(pool, requirement, rules):
    best_package = find_best_candidate(pool, requirement, rules)
    solution = [best_package]
    return optimize_at_level(pool, best_package, rules, solution)


if __name__ == '__main__':
    repository = repository_from_index("full_index.json")
    pool = Pool([repository])

    requirement_str = "scikit_learn < 0.14"
    requirement = Requirement._from_string(requirement_str)

    request = Request()
    request.install(requirement)

    rules_generator = RulesGenerator(pool, request)
    rules = list(rules_generator.iter_rules())

    solution = optimize(pool, requirement, rules)
    for decision in solution:
        print(decision.name, str(decision.version))