3636
3737
3838def get_response (url ):
39+ """
40+ Return a response for the given url.
41+ """
3942 resp = requests .get (url )
4043 if resp .status_code == 200 :
4144 return resp .json ()
4245 return None
4346
4447
4548def is_valid_version (parsed_version , requirements , identifier , bad_versions ):
49+ """
50+ Return True if the parsed_version is valid for the given identifier.
51+ """
4652 if (
4753 any (parsed_version not in r .specifier for r in requirements [identifier ])
4854 or parsed_version in bad_versions
@@ -52,7 +58,7 @@ def is_valid_version(parsed_version, requirements, identifier, bad_versions):
5258
5359
5460class PythonInputProvider (AbstractProvider ):
55- def __init__ (self , environment , repos ):
61+ def __init__ (self , environment = None , repos = [] ):
5662 self .environment = environment
5763 self .repos = repos
5864 self .versions_by_package = {}
@@ -81,7 +87,7 @@ def get_versions_for_package(self, name, repo=None):
8187 Return a list of versions for a package.
8288 """
8389 versions = []
84- if repo :
90+ if repo and self . environment :
8591 for version , package in repo ._get_package_versions_map (name ).items ():
8692 wheels = package .get_supported_wheels (environment = self .environment )
8793 if list (wheels ):
@@ -99,9 +105,9 @@ def get_versions_for_package(self, name, repo=None):
99105
100106 def get_requirements_for_package (self , purl , candidate ):
101107 """
102- Generate requirements for a package.
108+ Yield requirements for a package.
103109 """
104- if self .repos :
110+ if self .repos and self . environment :
105111 wheels = download_wheel (
106112 name = candidate .name ,
107113 version = str (candidate .version ),
@@ -157,9 +163,6 @@ def _iter_matches(self, identifier, requirements, incompatibilities):
157163 )
158164
159165 def find_matches (self , identifier , requirements , incompatibilities ):
160- """
161- Return a sorted list of candidates for the given identifier.
162- """
163166 candidates = sorted (
164167 self ._iter_matches (identifier , requirements , incompatibilities ),
165168 key = operator .attrgetter ("version" ),
@@ -168,9 +171,6 @@ def find_matches(self, identifier, requirements, incompatibilities):
168171 return candidates
169172
170173 def is_satisfied_by (self , requirement , candidate ):
171- """
172- Return True if the given requirement is satisfied by the given candidate.
173- """
174174 return candidate .version in requirement .specifier
175175
176176 def _iter_dependencies (self , candidate ):
@@ -194,9 +194,6 @@ def _iter_dependencies(self, candidate):
194194 yield r
195195
196196 def get_dependencies (self , candidate ):
197- """
198- Return a list of dependencies for the given candidate.
199- """
200197 return list (self ._iter_dependencies (candidate ))
201198
202199
@@ -228,7 +225,7 @@ def dfs(mapping, graph, src):
228225 )
229226
230227
231- def _format_resolution (result ):
228+ def format_resolution (result ):
232229 """
233230 Return a formatted resolution.
234231 """
@@ -289,19 +286,20 @@ def pypi_simple_repo_in_repos(repos: PypiSimpleRepository):
289286
290287def resolution (
291288 requirements : List [Requirement ],
292- environment : Environment ,
289+ environment : Environment = None ,
293290 repos : List [PypiSimpleRepository ] = [],
294291 return_as_parent_children : bool = True ,
295292 return_as_tree : bool = False ,
296293 return_as_list : bool = False ,
297294):
298295 """
299296 Return a resolution for the given requirements.
297+ If environment is not None, it is used to resolve the requirements.
300298 """
301299 if repos and not pypi_simple_repo_in_repos (repos ):
302300 repos .append (PYPI_PUBLIC_REPO )
303301 resolver = Resolver (PythonInputProvider (environment , repos ), BaseReporter ())
304- as_list , as_parent_children , as_tree = _format_resolution (resolver .resolve (requirements ))
302+ as_list , as_parent_children , as_tree = format_resolution (resolver .resolve (requirements ))
305303 if return_as_parent_children :
306304 return as_parent_children
307305 if return_as_tree :
0 commit comments