Class: Dependabot::Python::PoetryErrorHandler

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

Constant Summary collapse

INVALID_CONFIGURATION =

if a valid config value is not found in project.toml file

/The Poetry configuration is invalid:(?<config>.*)/
INVALID_VERSION =

if .toml has incorrect version specification i.e. <0.2.0app

/Could not parse version constraint: (?<ver>.*)/
/No valid distribution links found for package: "(?<dep>.*)" version: "(?<ver>.*)"/
PYTHON_RANGE_NOT_SATISFIED =

Python version range mentioned in .toml [tool.poetry.dependencies] python = “x.x” is not satisfied by dependency

/(?<dep>.*) requires Python (?<req_ver>.*), so it will not be satisfied for Python (?<men_ver>.*)/
PACKAGE_NOT_FOUND =

package version mentioned in .toml not found in package index

/Package (?<pkg>.*) ((?<req_ver>.*)) not found./
CLIENT_ERROR_CODES =

client access error codes while accessing package index

T.let({
  error401: /401 Client Error/,
  error403: /403 Client Error/,
  error404: /404 Client Error/,
  http403: /HTTP error 403/,
  http404: /HTTP error 404/
}.freeze, T::Hash[T.nilable(String), Regexp])
SERVER_ERROR_CODES =

server response error codes while accessing package index

T.let({
  server502: /502 Server Error/,
  server503: /503 Server Error/,
  server504: /504 Server Error/
}.freeze, T::Hash[T.nilable(String), Regexp])

Constants inherited from UpdateChecker

UpdateChecker::MAIN_PYPI_INDEXES, UpdateChecker::VERSION_REGEX

Instance Method Summary collapse

Methods inherited from UpdateChecker

#latest_resolvable_version, #latest_resolvable_version_with_no_unlock, #latest_version, #lowest_resolvable_security_fix_version, #lowest_security_fix_version, #requirements_unlocked_or_can_be?, #requirements_update_strategy, #updated_requirements

Constructor Details

#initialize(dependencies:, dependency_files:) ⇒ PoetryErrorHandler

Returns a new instance of PoetryErrorHandler.



378
379
380
381
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 378

def initialize(dependencies:, dependency_files:)
  @dependencies = dependencies
  @dependency_files = dependency_files
end

Instance Method Details

#handle_poetry_error(error) ⇒ Object

Raises:

  • (DependencyFileNotResolvable)


405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
# File 'lib/dependabot/python/update_checker/poetry_version_resolver.rb', line 405

def handle_poetry_error(error)
  Dependabot.logger.warn(error.message)

  if (msg = error.message.match(PoetryVersionResolver::INCOMPATIBLE_CONSTRAINTS) ||
      error.message.match(INVALID_CONFIGURATION) || error.message.match(INVALID_VERSION) ||
      error.message.match(INVALID_LINK))

    raise DependencyFileNotResolvable, msg
  end

  if (msg = error.message.match(PACKAGE_NOT_FOUND))
    raise DependencyFileNotResolvable, msg
  end

  raise DependencyFileNotResolvable, error.message if error.message.match(PYTHON_RANGE_NOT_SATISFIED)

  SERVER_ERROR_CODES.each do |(_error_codes, error_regex)|
    next unless error.message.match?(error_regex)

    index_url = URI.extract(error.message.to_s).last .then { sanitize_url(_1) }
    raise InconsistentRegistryResponse, index_url
  end

  CLIENT_ERROR_CODES.each do |(_error_codes, error_regex)|
    next unless error.message.match?(error_regex)

    index_url = URI.extract(error.message.to_s).last .then { sanitize_url(_1) }
    raise PrivateSourceAuthenticationFailure, index_url
  end
end