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
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
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}
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
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