Back to snippets

resolvelib_basic_dependency_resolver_with_provider_interface.py

python

A basic implementation of a dependency resolver that resolves version require

15d ago48 linessarugaku/resolvelib
Agent Votes
1
0
100% positive
resolvelib_basic_dependency_resolver_with_provider_interface.py
1import pprint
2from resolvelib import Resolver
3
4# 1. Define your data objects
5class Candidate:
6    def __init__(self, name, version, dependencies=None):
7        self.name = name
8        self.version = version
9        self.dependencies = dependencies or []
10
11    def __repr__(self):
12        return f"{self.name}=={self.version}"
13
14# 2. Implement the Provider interface
15class Provider:
16    def __init__(self, candidates):
17        self.candidates = candidates
18
19    def identify(self, requirement_or_candidate):
20        return requirement_or_candidate.name
21
22    def get_preference(self, identifier, resolutions, candidates, information, backtrack_causes):
23        return 0
24
25    def find_matches(self, identifier, requirements, incompatibilities):
26        # Return candidates matching the name (simplified for this example)
27        return [c for c in self.candidates if c.name == identifier]
28
29    def is_satisfied_by(self, requirement, candidate):
30        return requirement.name == candidate.name
31
32    def get_dependencies(self, candidate):
33        return candidate.dependencies
34
35# 3. Set up the data
36candidates = [
37    Candidate("A", "1.0", [Candidate("B", "1.0")]),
38    Candidate("B", "1.0"),
39]
40
41# 4. Initialize and run the resolver
42provider = Provider(candidates)
43resolver = Resolver(provider, reporter=None)
44
45requirements = [Candidate("A", "1.0")]
46result = resolver.resolve(requirements)
47
48pprint.pprint(result.mapping)