def check(root, conflict, mutations):
    resolver = Resolver(
        graph=Graph(root),
        mutator=Mutator(),
    )
    with patch(
        target='dephell.controllers.dependency.get_repo',
        return_value=resolver.graph._roots[0].repo,
    ):
        resolver.resolve(debug=True)

    graph = resolver.graph
    graph.conflict = graph.get(conflict)
    assert graph.conflict is not None

    mutator = Mutator()
    for _ in range(10):
        groups = mutator.mutate(graph)
        # if cannot mutate
        if groups is None:
            break
        for group in groups:
            dep = graph.get(group.name)
            dep.group = group

    assert mutator.mutations == mutations
示例#2
0
def check(root, resolved=True, missed=None, **deps):
    resolver = Resolver(
        graph=Graph(root),
        mutator=Mutator(),
    )
    with patch(
            target='dephell.controllers.dependency.get_repo',
            return_value=resolver.graph._roots[0].repo,
    ):
        result = resolver.resolve(debug=True, silent=True)

    reqs = Requirement.from_graph(resolver.graph, lock=True)
    reqs = {req.name: req for req in reqs}

    try:
        assert result is resolved
    except AssertionError:
        if result is False:
            print(analyze_conflict(resolver=resolver))
        raise

    assert resolver.graph.applied

    for name in sorted(deps.keys()):
        if name not in reqs:
            raise AssertionError('Dep not in graph: ' + name)
        print(name, reqs[name].version)

    for name, version in deps.items():
        assert reqs[name].version == version, '{}: {} != {}'.format(
            name, reqs[name].version, version)

    if missed:
        for name in missed:
            assert name not in reqs
示例#3
0
def fast_filter(root, *, deep=True):
    resolver = Resolver(
        graph=Graph(root),
        mutator=Mutator(),
    )
    resolver.graph.fast_apply()
    resolver.apply_envs(envs={'main'}, deep=deep)
    reqs = Requirement.from_graph(resolver.graph, lock=False)
    return {req.name: req for req in reqs}
示例#4
0
def merge(*roots, merged=True, deps=None):
    graph = Graph()
    for root in roots:
        graph.add(root)
    resolver = Resolver(graph=graph, mutator=Mutator())
    resolved = resolver.resolve(level=1)

    try:
        assert merged == resolved
    except AssertionError:
        if resolved is False:
            print(analyze_conflict(resolver=resolver))
        raise

    if deps:
        for dep in deps:
            assert dep in resolver.graph
        names = set(resolver.graph.names) - set(root.name for root in roots)
        assert names == set(deps)

    return resolver
示例#5
0
def test_patch_imports(temp_path: Path):
    (temp_path / 'project').mkdir()
    (temp_path / 'project' / '__init__.py').write_text('import requests\nimport django')
    (temp_path / 'project' / 'vendor' / 'requests').mkdir(parents=True)
    (temp_path / 'project' / 'vendor' / 'requests' / '__init__.py').touch()

    config = Config()
    config.attach(dict(project=str(temp_path)))
    package = PackageRoot(name='project', path=temp_path)
    root = RootDependency(raw_name='project', package=package)
    resolver = Resolver(
        graph=Graph(root),
        mutator=Mutator(),
    )
    command = VendorImportCommand(argv=[], config=config)
    command._patch_imports(
        resolver=resolver,
        output_path=temp_path / 'project' / 'vendor',
    )

    expected = 'import project.vendor.requests as requests\nimport django'
    assert (temp_path / 'project' / '__init__.py').read_text() == expected