def find_best_candidate( self, package_name, # type: str target_package_version=None, # type: Union[str, None] allow_prereleases=False, # type: bool ): # type: (...) -> Union[Package, bool] """ Given a package name and optional version, returns the latest Package that matches """ if target_package_version: constraint = parse_constraint(target_package_version) else: constraint = parse_constraint("*") candidates = self._pool.find_packages( package_name, constraint, allow_prereleases=allow_prereleases ) if not candidates: return False dependency = Dependency(package_name, constraint) # Select highest version if we have many package = candidates[0] for candidate in candidates: if candidate.is_prerelease() and not dependency.allows_prereleases(): continue # Select highest version of the two if package.version < candidate.version: package = candidate return package
def find_best_candidate( self, package_name, # type: str target_package_version=None, # type: Union[str, None] allow_prereleases=False, # type: bool ): # type: (...) -> Union[Package, bool] """ Given a package name and optional version, returns the latest Package that matches """ if target_package_version: constraint = parse_constraint(target_package_version) else: constraint = parse_constraint("*") candidates = self._pool.find_packages( package_name, constraint, allow_prereleases=allow_prereleases) if not candidates: return False dependency = Dependency(package_name, constraint) # Select highest version if we have many package = candidates[0] for candidate in candidates: if candidate.is_prerelease( ) and not dependency.allows_prereleases(): continue # Select highest version of the two if package.version < candidate.version: package = candidate return package
def is_requirement_satisfied_by(self, requirement: Dependency, activated: DependencyGraph, package: Package) -> bool: """ Determines whether the given requirement is satisfied by the given spec, in the context of the current activated dependency graph. """ if isinstance(requirement, Package): return requirement == package if not requirement.accepts(package): return False if package.is_prerelease() and not requirement.allows_prereleases(): vertex = activated.vertex_named(package.name) if not any([r.allows_prereleases() for r in vertex.requirements]): return False return self._package.python_constraint.matches( package.python_constraint)