Class: Dependabot::Python::UpdateChecker::PoetryVersionResolver

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

Overview

This class does version resolution for pyproject.toml files.

Constant Summary collapse

GIT_REFERENCE_NOT_FOUND_REGEX =
/
  (Failed to checkout
  (?<tag>.+?)
  (?<url>.+?).git at '(?<tag>.+?)'
  |
  ...Failedtoclone
  (?<url>.+?).gitat'(?<tag>.+?)',
  verifyrefexistsonremote)
/x
GIT_DEPENDENCY_UNREACHABLE_REGEX =
/
  \s+Failed\sto\sclone
  \s+(?<url>.+?),
  \s+check\syour\sgit\sconfiguration
/mx
INCOMPATIBLE_CONSTRAINTS =
/Incompatible constraints in requirements of (?<dep>.+?) ((?<ver>.+?)):/
PACKAGE_RESOLVER_ERRORS =
T.let(
  {
    package_info_error: /Unable to determine package info/,
    self_dep_error: /Package '(?<path>.*)' is listed as a dependency of itself./,
    incompatible_constraints: /Incompatible constraints in requirements/
  }.freeze,
  T::Hash[T.nilable(String), Regexp]
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, dependency_files:, credentials:, repo_contents_path:) ⇒ PoetryVersionResolver

Returns a new instance of PoetryVersionResolver.



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 79

def initialize(dependency:, dependency_files:, credentials:, repo_contents_path:)
  @dependency               = T.let(dependency, Dependabot::Dependency)
  @dependency_files         = T.let(dependency_files, T::Array[Dependabot::DependencyFile])
  @credentials              = T.let(credentials, T::Array[Dependabot::Credential])
  @repo_contents_path       = T.let(repo_contents_path, T.nilable(String))
  @error_handler = T.let(
    PoetryErrorHandler.new(dependencies: dependency, dependency_files: dependency_files),
    Dependabot::Python::PoetryErrorHandler
  )
  @resolvable = T.let({}, T::Hash[Gem::Version, T::Boolean])
  @latest_resolvable_version_string = T.let({}, T::Hash[T.nilable(String), T.nilable(String)])
  @original_reqs_resolvable = T.let(nil, T.nilable(T::Boolean))
  @python_requirement_parser = T.let(nil, T.nilable(FileParser::PythonRequirementParser))
  @language_version_manager = T.let(nil, T.nilable(LanguageVersionManager))
end

Instance Attribute Details

#credentialsObject (readonly)

Returns the value of attribute credentials.



63
64
65
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 63

def credentials
  @credentials
end

#dependencyObject (readonly)

Returns the value of attribute dependency.



57
58
59
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 57

def dependency
  @dependency
end

#dependency_filesObject (readonly)

Returns the value of attribute dependency_files.



60
61
62
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 60

def dependency_files
  @dependency_files
end

#error_handlerObject (readonly)

Returns the value of attribute error_handler.



69
70
71
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 69

def error_handler
  @error_handler
end

#repo_contents_pathObject (readonly)

Returns the value of attribute repo_contents_path.



66
67
68
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 66

def repo_contents_path
  @repo_contents_path
end

Instance Method Details

#latest_resolvable_version(requirement: nil) ⇒ Object



96
97
98
99
100
101
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 96

def latest_resolvable_version(requirement: nil)
  version_string =
    fetch_latest_resolvable_version_string(requirement: requirement)

  version_string.nil? ? nil : Python::Version.new(version_string)
end

#resolvable?(version:) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 104

def resolvable?(version:)
  return T.must(@resolvable[version]) if @resolvable.key?(version)

  @resolvable[version] = if fetch_latest_resolvable_version_string(requirement: "==#{version}")
                           true
                         else
                           false
                         end
rescue SharedHelpers::HelperSubprocessFailed => e
  raise unless e.message.include?("version solving failed.")

  @resolvable[version] = false
end