Class: Dependabot::Python::UpdateChecker::PipVersionResolver

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/python/update_checker/pip_version_resolver.rb,
lib/dependabot/python/update_checker/pip_version_resolver/marker_evaluator.rb

Overview

This resolver intentionally co-locates resolution, marker handling, and constraints matching to keep compatibility decisions in one place. rubocop:disable Metrics/ClassLength

Defined Under Namespace

Classes: MarkerEvaluator

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, dependency_files:, credentials:, ignored_versions:, security_advisories:, update_cooldown: nil, raise_on_ignored: false) ⇒ PipVersionResolver

Returns a new instance of PipVersionResolver.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/dependabot/python/update_checker/pip_version_resolver.rb', line 39

def initialize(
  dependency:,
  dependency_files:,
  credentials:,
  ignored_versions:,
  security_advisories:,
  update_cooldown: nil,
  raise_on_ignored: false
)
  @dependency = dependency
  @dependency_files = dependency_files
  @credentials = credentials
  @ignored_versions = ignored_versions
  @security_advisories = security_advisories
  @update_cooldown = update_cooldown
  @raise_on_ignored = raise_on_ignored
  @latest_version_finder = T.let(nil, T.nilable(LatestVersionFinder))
  @python_requirement_parser = T.let(nil, T.nilable(FileParser::PythonRequirementParser))
  @language_version_manager = T.let(nil, T.nilable(LanguageVersionManager))
  @marker_evaluator = T.let(nil, T.nilable(MarkerEvaluator))
  @registry_json_urls = T.let(nil, T.nilable(T::Array[String]))
  @transitive_requirements_cache = T.let({}, T::Hash[String, T::Array[String]])
  @transitive_requirement_available_cache = T.let({}, T::Hash[String, T::Boolean])
  @constraints_files = T.let(nil, T.nilable(T::Array[String]))
  @constraints_file_basenames = T.let(nil, T.nilable(T::Array[String]))
  @requirement_file_directories = T.let(nil, T.nilable(T::Array[String]))
  @pyproject_content_cache = T.let({}, T::Hash[String, T::Hash[String, T.untyped]])
end

Instance Method Details

#latest_resolvable_versionObject



69
70
71
72
73
74
75
# File 'lib/dependabot/python/update_checker/pip_version_resolver.rb', line 69

def latest_resolvable_version
  candidate = latest_version_finder.latest_version(language_version: language_version_manager.python_version)
  return candidate if candidate.nil?
  return candidate if compatible_with_pinned_pyproject_dependencies?(candidate)

  nil
end

#latest_resolvable_version_with_no_unlockObject



78
79
80
81
# File 'lib/dependabot/python/update_checker/pip_version_resolver.rb', line 78

def latest_resolvable_version_with_no_unlock
  latest_version_finder
    .latest_version_with_no_unlock(language_version: language_version_manager.python_version)
end

#lowest_resolvable_security_fix_versionObject



84
85
86
87
88
89
90
91
# File 'lib/dependabot/python/update_checker/pip_version_resolver.rb', line 84

def lowest_resolvable_security_fix_version
  candidate = latest_version_finder
              .lowest_security_fix_version(language_version: language_version_manager.python_version)
  return candidate if candidate.nil?
  return candidate if compatible_with_pinned_pyproject_dependencies?(candidate)

  nil
end