Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_resolver(provider, base_reporter):
resolver = Resolver(provider, base_reporter)
if provider.expected_conflicts:
with pytest.raises(ResolutionImpossible) as ctx:
result = resolver.resolve(provider.root_requirements)
print(_format_resolution(result)) # Provide some debugging hints.
assert _format_conflicts(ctx.value) == provider.expected_conflicts
else:
result = resolver.resolve(provider.root_requirements)
assert _format_resolution(result) == provider.expected_resolution
def adding_requirement(self, requirement, parent):
print(f" adding_requirement({requirement}, {parent})")
def backtracking(self, candidate):
print(f" backtracking({candidate})")
def pinning(self, candidate):
print(f" pinning({candidate})")
if __name__ == "__main__":
from pprint import pprint
provider = Provider(index.splitlines())
reporter = Reporter()
resolver = resolvelib.Resolver(provider, reporter)
root_reqs = [Requirement("first", SpecifierSet())]
result = resolver.resolve(root_reqs)
pprint(result.mapping)
def lock(self):
"""Lock specified (abstract) requirements into (concrete) candidates.
The locking procedure consists of four stages:
* Resolve versions and dependency graph (powered by ResolveLib).
* Walk the graph to determine "why" each candidate came to be, i.e.
what top-level requirements result in a given candidate.
* Populate hashes for resolved candidates.
* Populate markers based on dependency specifications of each
candidate, and the dependency graph.
"""
provider = self.get_provider()
reporter = self.get_reporter()
resolver = resolvelib.Resolver(provider, reporter)
with vistir.cd(self.project.root):
state = resolver.resolve(self.requirements)
traces = trace_graph(state.graph)
hash_cache = HashCache()
for r in state.mapping.values():
if not r.hashes:
r.hashes = get_hashes(hash_cache, r)
set_metadata(
state.mapping, traces,
provider.fetched_dependencies,
provider.collected_requires_pythons,
)
def lock(self):
"""Lock specified (abstract) requirements into (concrete) candidates.
The locking procedure consists of four stages:
* Resolve versions and dependency graph (powered by ResolveLib).
* Walk the graph to determine "why" each candidate came to be, i.e.
what top-level requirements result in a given candidate.
* Populate hashes for resolved candidates.
* Populate markers based on dependency specifications of each
candidate, and the dependency graph.
"""
provider = self.get_provider()
reporter = self.get_reporter()
resolver = resolvelib.Resolver(provider, reporter)
with vistir.cd(self.project.root):
state = resolver.resolve(self.requirements)
traces = trace_graph(state.graph)
hash_cache = HashCache()
for r in state.mapping.values():
if not r.hashes:
r.hashes = get_hashes(hash_cache, r)
set_metadata(
state.mapping, traces,
provider.fetched_dependencies,
provider.collected_requires_pythons,
)
from pypi_wheel_provider import PyPIProvider, Requirement
from resolvelib import Resolver
from visualization.generate import generate_html
from visualization.reporter import GraphGeneratingReporter
if __name__ == "__main__":
provider = PyPIProvider()
reporter = GraphGeneratingReporter()
resolver = Resolver(provider, reporter)
reqs = [Requirement("oslo.utils==1.4.0")]
try:
resolver.resolve(reqs)
finally:
with open("out2.html", "w") as f:
generate_html(reporter.evolution, f)
"""Resolve requirements as project names on PyPI.
The requirements are taken as command-line arguments
and the resolution result will be printed to stdout.
"""
if len(sys.argv) == 1:
print("Usage:", sys.argv[0], "")
return
# Things I want to resolve.
reqs = sys.argv[1:]
requirements = [Requirement(r) for r in reqs]
# Create the (reusable) resolver.
provider = PyPIProvider()
reporter = BaseReporter()
resolver = Resolver(provider, reporter)
# Kick off the resolution process, and get the final result.
print("Resolving", ", ".join(reqs))
result = resolver.resolve(requirements)
display_resolution(result)
def resolve_requirements(requirements, sources, pins, allow_pre):
"""Lock specified (abstract) requirements into (concrete) candidates.
The locking procedure consists of four stages:
* Resolve versions and dependency graph (powered by ResolveLib).
* Walk the graph to determine "why" each candidate came to be, i.e. what
top-level requirements result in a given candidate.
* Populate hashes for resolved candidates.
* Populate markers based on dependency specifications of each candidate,
and the dependency graph.
"""
provider = RequirementsLibProvider(requirements, sources, pins, allow_pre)
reporter = StdOutReporter(requirements)
resolver = Resolver(provider, reporter)
state = resolver.resolve(requirements)
traces = trace_graph(state.graph)
hash_cache = HashCache()
for r in state.mapping.values():
if not r.hashes:
r.hashes = get_hashes(hash_cache, r)
set_metadata(
state.mapping, traces,
provider.fetched_dependencies, provider.requires_pythons,
)
return state, traces