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

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

Instance Method Summary collapse

Instance Method Details

#marker_satisfied?(marker:, python_version:) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
43
44
45
# File 'lib/dependabot/python/update_checker/pip_version_resolver/marker_evaluator.rb', line 39

def marker_satisfied?(marker:, python_version:)
  evaluate_marker_expression(marker, python_version)
rescue ArgumentError
  # If we cannot safely parse a python marker, treat it as applicable.
  # This avoids silently skipping transitive constraints that may break installs.
  true
end

#split_requirement_and_marker(requirement_string) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/dependabot/python/update_checker/pip_version_resolver/marker_evaluator.rb', line 14

def split_requirement_and_marker(requirement_string)
  separator_index = T.let(nil, T.nilable(Integer))
  in_single_quote = T.let(false, T::Boolean)
  in_double_quote = T.let(false, T::Boolean)

  requirement_string.each_char.with_index do |char, index|
    in_single_quote, in_double_quote, quote_toggled =
      toggle_quote_state(char, in_single_quote, in_double_quote)
    next if quote_toggled
    next if in_single_quote || in_double_quote
    next unless char == ";"

    separator_index = index
    break
  end

  return [requirement_string.strip, nil] if separator_index.nil?

  requirement_part = requirement_string[0...separator_index]
  marker_part = requirement_string[(separator_index + 1)..]

  [requirement_part&.strip, marker_part&.strip]
end