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

Inherits:
Object
  • Object
show all
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 =
/
  (?:'git'.*pypoetry-git-(?<name>.+?).{8}',
  'checkout',
  '(?<tag>.+?)'
  |
  Failed to checkout
  (?<tag>.+?)
  (?<url>.+?).git at '(?<tag>.+?)'
  |
  ...Failedtoclone
  (?<url>.+?).gitat'(?<tag>.+?)',
  verifyrefexistsonremote)
/x
GIT_DEPENDENCY_UNREACHABLE_REGEX =

TODO: remove the first clause and | when py3.6 support is EoL

/
  (?:'\['git',
  \s+'clone',
  \s+'--recurse-submodules',
  \s+'(--)?',
  \s+'(?<url>.+?)'.*
  \s+exit\s+status\s+128
  |
  \s+Failed\sto\sclone
  \s+(?<url>.+?),
  \s+check\syour\sgit\sconfiguration)
/mx

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of PoetryVersionResolver.



54
55
56
57
58
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 54

def initialize(dependency:, dependency_files:, credentials:)
  @dependency               = dependency
  @dependency_files         = dependency_files
  @credentials              = credentials
end

Instance Attribute Details

#credentialsObject (readonly)

TODO: remove the first clause and | when py3.6 support is EoL



52
53
54
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 52

def credentials
  @credentials
end

#dependencyObject (readonly)

TODO: remove the first clause and | when py3.6 support is EoL



52
53
54
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 52

def dependency
  @dependency
end

#dependency_filesObject (readonly)

TODO: remove the first clause and | when py3.6 support is EoL



52
53
54
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 52

def dependency_files
  @dependency_files
end

Instance Method Details

#latest_resolvable_version(requirement: nil) ⇒ Object



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

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)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 67

def resolvable?(version:)
  @resolvable ||= {}
  return @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?("SolverProblemError") || # TODO: Remove once py3.6 is EoL
               e.message.include?("version solving failed.")

  @resolvable[version] = false
end