dependabot-python 0.230.0 → 0.231.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dependabot/python/authed_url_builder.rb +1 -0
  3. data/lib/dependabot/python/file_fetcher.rb +41 -40
  4. data/lib/dependabot/python/file_parser/pipfile_files_parser.rb +3 -2
  5. data/lib/dependabot/python/file_parser/pyproject_files_parser.rb +4 -3
  6. data/lib/dependabot/python/file_parser/python_requirement_parser.rb +11 -10
  7. data/lib/dependabot/python/file_parser/setup_file_parser.rb +4 -3
  8. data/lib/dependabot/python/file_parser.rb +17 -16
  9. data/lib/dependabot/python/file_updater/pip_compile_file_updater.rb +40 -39
  10. data/lib/dependabot/python/file_updater/pipfile_file_updater.rb +22 -21
  11. data/lib/dependabot/python/file_updater/pipfile_manifest_updater.rb +11 -10
  12. data/lib/dependabot/python/file_updater/pipfile_preparer.rb +4 -3
  13. data/lib/dependabot/python/file_updater/poetry_file_updater.rb +21 -20
  14. data/lib/dependabot/python/file_updater/pyproject_preparer.rb +6 -5
  15. data/lib/dependabot/python/file_updater/requirement_file_updater.rb +1 -0
  16. data/lib/dependabot/python/file_updater/requirement_replacer.rb +28 -27
  17. data/lib/dependabot/python/file_updater/setup_file_sanitizer.rb +5 -4
  18. data/lib/dependabot/python/file_updater.rb +4 -3
  19. data/lib/dependabot/python/helpers.rb +1 -0
  20. data/lib/dependabot/python/language_version_manager.rb +1 -0
  21. data/lib/dependabot/python/metadata_finder.rb +4 -3
  22. data/lib/dependabot/python/name_normaliser.rb +1 -0
  23. data/lib/dependabot/python/native_helpers.rb +1 -0
  24. data/lib/dependabot/python/requirement.rb +16 -15
  25. data/lib/dependabot/python/requirement_parser.rb +1 -0
  26. data/lib/dependabot/python/update_checker/index_finder.rb +27 -26
  27. data/lib/dependabot/python/update_checker/latest_version_finder.rb +13 -12
  28. data/lib/dependabot/python/update_checker/pip_compile_version_resolver.rb +18 -17
  29. data/lib/dependabot/python/update_checker/pip_version_resolver.rb +5 -4
  30. data/lib/dependabot/python/update_checker/pipenv_version_resolver.rb +34 -33
  31. data/lib/dependabot/python/update_checker/poetry_version_resolver.rb +20 -19
  32. data/lib/dependabot/python/update_checker/requirements_updater.rb +28 -27
  33. data/lib/dependabot/python/update_checker.rb +7 -6
  34. data/lib/dependabot/python/version.rb +13 -12
  35. data/lib/dependabot/python.rb +3 -2
  36. metadata +19 -5
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "toml-rb"
@@ -60,17 +61,17 @@ module Dependabot
60
61
  end
61
62
 
62
63
  def updated_pyproject_content
63
- dependencies.
64
- select { |dep| requirement_changed?(pyproject, dep) }.
65
- reduce(pyproject.content.dup) do |content, dep|
64
+ dependencies
65
+ .select { |dep| requirement_changed?(pyproject, dep) }
66
+ .reduce(pyproject.content.dup) do |content, dep|
66
67
  updated_requirement =
67
- dep.requirements.find { |r| r[:file] == pyproject.name }.
68
- fetch(:requirement)
68
+ dep.requirements.find { |r| r[:file] == pyproject.name }
69
+ .fetch(:requirement)
69
70
 
70
71
  old_req =
71
- dep.previous_requirements.
72
- find { |r| r[:file] == pyproject.name }.
73
- fetch(:requirement)
72
+ dep.previous_requirements
73
+ .find { |r| r[:file] == pyproject.name }
74
+ .fetch(:requirement)
74
75
 
75
76
  declaration_regex = declaration_regex(dep)
76
77
  updated_content = if content.match?(declaration_regex)
@@ -122,9 +123,9 @@ module Dependabot
122
123
  end
123
124
 
124
125
  def freeze_other_dependencies(pyproject_content)
125
- PyprojectPreparer.
126
- new(pyproject_content: pyproject_content, lockfile: lockfile).
127
- freeze_top_level_dependencies_except(dependencies)
126
+ PyprojectPreparer
127
+ .new(pyproject_content: pyproject_content, lockfile: lockfile)
128
+ .freeze_top_level_dependencies_except(dependencies)
128
129
  end
129
130
 
130
131
  def freeze_dependencies_being_updated(pyproject_content)
@@ -143,9 +144,9 @@ module Dependabot
143
144
  end
144
145
 
145
146
  def update_python_requirement(pyproject_content)
146
- PyprojectPreparer.
147
- new(pyproject_content: pyproject_content).
148
- update_python_requirement(language_version_manager.python_version)
147
+ PyprojectPreparer
148
+ .new(pyproject_content: pyproject_content)
149
+ .update_python_requirement(language_version_manager.python_version)
149
150
  end
150
151
 
151
152
  def lock_declaration_to_new_version!(poetry_object, dep)
@@ -170,9 +171,9 @@ module Dependabot
170
171
  end
171
172
 
172
173
  def sanitize(pyproject_content)
173
- PyprojectPreparer.
174
- new(pyproject_content: pyproject_content).
175
- sanitize
174
+ PyprojectPreparer
175
+ .new(pyproject_content: pyproject_content)
176
+ .sanitize
176
177
  end
177
178
 
178
179
  def updated_lockfile_content_for(pyproject_content)
@@ -221,9 +222,9 @@ module Dependabot
221
222
  end
222
223
 
223
224
  def add_auth_env_vars
224
- Python::FileUpdater::PyprojectPreparer.
225
- new(pyproject_content: pyproject.content).
226
- add_auth_env_vars(credentials)
225
+ Python::FileUpdater::PyprojectPreparer
226
+ .new(pyproject_content: pyproject.content)
227
+ .add_auth_env_vars(credentials)
227
228
  end
228
229
 
229
230
  def pyproject_hash_for(pyproject_content)
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "toml-rb"
@@ -49,9 +50,9 @@ module Dependabot
49
50
 
50
51
  def sanitize
51
52
  # {{ name }} syntax not allowed
52
- pyproject_content.
53
- gsub(/\{\{.*?\}\}/, "something").
54
- gsub('#{', "{")
53
+ pyproject_content
54
+ .gsub(/\{\{.*?\}\}/, "something")
55
+ .gsub('#{', "{")
55
56
  end
56
57
 
57
58
  # rubocop:disable Metrics/PerceivedComplexity
@@ -103,8 +104,8 @@ module Dependabot
103
104
  attr_reader :pyproject_content, :lockfile
104
105
 
105
106
  def locked_details(dep_name)
106
- parsed_lockfile.fetch("package").
107
- find { |d| d["name"] == normalise(dep_name) }
107
+ parsed_lockfile.fetch("package")
108
+ .find { |d| d["name"] == normalise(dep_name) }
108
109
  end
109
110
 
110
111
  def normalise(name)
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/python/requirement_parser"
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/dependency"
@@ -51,8 +52,8 @@ module Dependabot
51
52
 
52
53
  if add_space_after_operators?
53
54
  new_req_string =
54
- new_req_string.
55
- gsub(/(#{RequirementParser::COMPARISON})\s*(?=\d)/o, '\1 ')
55
+ new_req_string
56
+ .gsub(/(#{RequirementParser::COMPARISON})\s*(?=\d)/o, '\1 ')
56
57
  end
57
58
 
58
59
  new_req_string
@@ -62,11 +63,11 @@ module Dependabot
62
63
  old_req = old_requirement
63
64
  updated_string =
64
65
  if old_req
65
- original_dependency_declaration_string(old_req).
66
- sub(RequirementParser::REQUIREMENTS, updated_requirement_string)
66
+ original_dependency_declaration_string(old_req)
67
+ .sub(RequirementParser::REQUIREMENTS, updated_requirement_string)
67
68
  else
68
- original_dependency_declaration_string(old_req).
69
- sub(RequirementParser::NAME_WITH_EXTRAS) do |nm|
69
+ original_dependency_declaration_string(old_req)
70
+ .sub(RequirementParser::NAME_WITH_EXTRAS) do |nm|
70
71
  nm + updated_requirement_string
71
72
  end
72
73
  end
@@ -84,15 +85,15 @@ module Dependabot
84
85
  end
85
86
 
86
87
  def add_space_after_commas?
87
- original_dependency_declaration_string(old_requirement).
88
- match(RequirementParser::REQUIREMENTS).
89
- to_s.include?(", ")
88
+ original_dependency_declaration_string(old_requirement)
89
+ .match(RequirementParser::REQUIREMENTS)
90
+ .to_s.include?(", ")
90
91
  end
91
92
 
92
93
  def add_space_after_operators?
93
- original_dependency_declaration_string(old_requirement).
94
- match(RequirementParser::REQUIREMENTS).
95
- to_s.match?(/#{RequirementParser::COMPARISON}\s+\d/o)
94
+ original_dependency_declaration_string(old_requirement)
95
+ .match(RequirementParser::REQUIREMENTS)
96
+ .to_s.match?(/#{RequirementParser::COMPARISON}\s+\d/o)
96
97
  end
97
98
 
98
99
  def original_declaration_replacement_regex
@@ -102,16 +103,16 @@ module Dependabot
102
103
  end
103
104
 
104
105
  def requirement_includes_hashes?(requirement)
105
- original_dependency_declaration_string(requirement).
106
- match?(RequirementParser::HASHES)
106
+ original_dependency_declaration_string(requirement)
107
+ .match?(RequirementParser::HASHES)
107
108
  end
108
109
 
109
110
  def hash_algorithm(requirement)
110
111
  return unless requirement_includes_hashes?(requirement)
111
112
 
112
- original_dependency_declaration_string(requirement).
113
- match(RequirementParser::HASHES).
114
- named_captures.fetch("algorithm")
113
+ original_dependency_declaration_string(requirement)
114
+ .match(RequirementParser::HASHES)
115
+ .named_captures.fetch("algorithm")
115
116
  end
116
117
 
117
118
  def hash_separator(requirement)
@@ -119,15 +120,15 @@ module Dependabot
119
120
 
120
121
  hash_regex = RequirementParser::HASH
121
122
  current_separator =
122
- original_dependency_declaration_string(requirement).
123
- match(/#{hash_regex}((?<separator>\s*\\?\s*?)#{hash_regex})*/).
124
- named_captures.fetch("separator")
123
+ original_dependency_declaration_string(requirement)
124
+ .match(/#{hash_regex}((?<separator>\s*\\?\s*?)#{hash_regex})*/)
125
+ .named_captures.fetch("separator")
125
126
 
126
127
  default_separator =
127
- original_dependency_declaration_string(requirement).
128
- match(RequirementParser::HASH).
129
- pre_match.match(/(?<separator>\s*\\?\s*?)\z/).
130
- named_captures.fetch("separator")
128
+ original_dependency_declaration_string(requirement)
129
+ .match(RequirementParser::HASH)
130
+ .pre_match.match(/(?<separator>\s*\\?\s*?)\z/)
131
+ .named_captures.fetch("separator")
131
132
 
132
133
  current_separator || default_separator
133
134
  end
@@ -151,9 +152,9 @@ module Dependabot
151
152
  else
152
153
  regex = RequirementParser::INSTALL_REQ_WITH_REQUIREMENT
153
154
  content.scan(regex) { matches << Regexp.last_match }
154
- matches.
155
- select { |m| normalise(m[:name]) == dependency_name }.
156
- find { |m| requirements_match(m[:requirements], old_req) }
155
+ matches
156
+ .select { |m| normalise(m[:name]) == dependency_name }
157
+ .find { |m| requirements_match(m[:requirements], old_req) }
157
158
  end
158
159
 
159
160
  raise "Declaration not found for #{dependency_name}!" unless dec
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/python/file_updater"
@@ -39,8 +40,8 @@ module Dependabot
39
40
  def install_requires_array
40
41
  @install_requires_array ||=
41
42
  parsed_setup_file.dependencies.filter_map do |dep|
42
- next unless dep.requirements.first[:groups].
43
- include?("install_requires")
43
+ next unless dep.requirements.first[:groups]
44
+ .include?("install_requires")
44
45
 
45
46
  dep.name + dep.requirements.first[:requirement].to_s
46
47
  end
@@ -49,8 +50,8 @@ module Dependabot
49
50
  def setup_requires_array
50
51
  @setup_requires_array ||=
51
52
  parsed_setup_file.dependencies.filter_map do |dep|
52
- next unless dep.requirements.first[:groups].
53
- include?("setup_requires")
53
+ next unless dep.requirements.first[:groups]
54
+ .include?("setup_requires")
54
55
 
55
56
  dep.name + dep.requirements.first[:requirement].to_s
56
57
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "toml-rb"
@@ -49,9 +50,9 @@ module Dependabot
49
50
  # rubocop:disable Metrics/PerceivedComplexity
50
51
  def resolver_type
51
52
  reqs = dependencies.flat_map(&:requirements)
52
- changed_reqs = reqs.zip(dependencies.flat_map(&:previous_requirements)).
53
- reject { |(new_req, old_req)| new_req == old_req }.
54
- map(&:first)
53
+ changed_reqs = reqs.zip(dependencies.flat_map(&:previous_requirements))
54
+ .reject { |(new_req, old_req)| new_req == old_req }
55
+ .map(&:first)
55
56
  changed_req_files = changed_reqs.map { |r| r.fetch(:file) }
56
57
 
57
58
  # If there are no requirements then this is a sub-dependency. It
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "time"
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/logger"
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "excon"
@@ -156,9 +157,9 @@ module Dependabot
156
157
 
157
158
  def possible_listing_urls
158
159
  credential_urls =
159
- credentials.
160
- select { |cred| cred["type"] == "python_index" }.
161
- map { |c| AuthedUrlBuilder.authed_url(credential: c) }
160
+ credentials
161
+ .select { |cred| cred["type"] == "python_index" }
162
+ .map { |c| AuthedUrlBuilder.authed_url(credential: c) }
162
163
 
163
164
  (credential_urls + [MAIN_PYPI_URL]).map do |base_url|
164
165
  base_url.gsub(%r{/$}, "") + "/#{normalised_dependency_name}/json"
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Dependabot
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Dependabot
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/utils"
@@ -14,8 +15,8 @@ module Dependabot
14
15
  "===" => ->(v, r) { v.to_s == r.to_s }
15
16
  )
16
17
 
17
- quoted = OPS.keys.sort_by(&:length).reverse.
18
- map { |k| Regexp.quote(k) }.join("|")
18
+ quoted = OPS.keys.sort_by(&:length).reverse
19
+ .map { |k| Regexp.quote(k) }.join("|")
19
20
  version_pattern = Python::Version::VERSION_PATTERN
20
21
 
21
22
  PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{version_pattern})\\s*".freeze
@@ -133,23 +134,23 @@ module Dependabot
133
134
  def convert_wildcard(req_string)
134
135
  # NOTE: This isn't perfect. It replaces the "!= 1.0.*" case with
135
136
  # "!= 1.0.0". There's no way to model this correctly in Ruby :'(
136
- quoted_ops = OPS.keys.sort_by(&:length).reverse.
137
- map { |k| Regexp.quote(k) }.join("|")
138
- op = req_string.match(/\A\s*(#{quoted_ops})?/).
139
- captures.first.to_s&.strip
137
+ quoted_ops = OPS.keys.sort_by(&:length).reverse
138
+ .map { |k| Regexp.quote(k) }.join("|")
139
+ op = req_string.match(/\A\s*(#{quoted_ops})?/)
140
+ .captures.first.to_s&.strip
140
141
  exact_op = ["", "=", "==", "==="].include?(op)
141
142
 
142
- req_string.strip.
143
- split(".").
144
- first(req_string.split(".").index { |s| s.include?("*") } + 1).
145
- join(".").
146
- gsub(/\*(?!$)/, "0").
147
- gsub(/\*$/, "0.a").
148
- tap { |s| exact_op ? s.gsub!(/^(?<!!)=*/, "~>") : s }
143
+ req_string.strip
144
+ .split(".")
145
+ .first(req_string.split(".").index { |s| s.include?("*") } + 1)
146
+ .join(".")
147
+ .gsub(/\*(?!$)/, "0")
148
+ .gsub(/\*$/, "0.a")
149
+ .tap { |s| exact_op ? s.gsub!(/^(?<!!)=*/, "~>") : s }
149
150
  end
150
151
  end
151
152
  end
152
153
  end
153
154
 
154
- Dependabot::Utils.
155
- register_requirement_class("pip", Dependabot::Python::Requirement)
155
+ Dependabot::Utils
156
+ .register_requirement_class("pip", Dependabot::Python::Requirement)
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Dependabot
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/python/update_checker"
@@ -60,14 +61,14 @@ module Dependabot
60
61
  requirements_files.each do |file|
61
62
  if file.content.match?(/^--index-url\s+['"]?([^\s'"]+)['"]?/)
62
63
  urls[:main] =
63
- file.content.match(/^--index-url\s+['"]?([^\s'"]+)['"]?/).
64
- captures.first&.strip
64
+ file.content.match(/^--index-url\s+['"]?([^\s'"]+)['"]?/)
65
+ .captures.first&.strip
65
66
  end
66
67
  urls[:extra] +=
67
- file.content.
68
- scan(/^--extra-index-url\s+['"]?([^\s'"]+)['"]?/).
69
- flatten.
70
- map(&:strip)
68
+ file.content
69
+ .scan(/^--extra-index-url\s+['"]?([^\s'"]+)['"]?/)
70
+ .flatten
71
+ .map(&:strip)
71
72
  end
72
73
 
73
74
  urls
@@ -81,8 +82,8 @@ module Dependabot
81
82
  content = pip_conf.content
82
83
 
83
84
  if content.match?(/^index-url\s*=/x)
84
- urls[:main] = content.match(/^index-url\s*=\s*(.+)/).
85
- captures.first
85
+ urls[:main] = content.match(/^index-url\s*=\s*(.+)/)
86
+ .captures.first
86
87
  end
87
88
  urls[:extra] += content.scan(/^extra-index-url\s*=(.+)/).flatten
88
89
 
@@ -137,17 +138,17 @@ module Dependabot
137
138
  def config_variable_index_urls
138
139
  urls = { main: nil, extra: [] }
139
140
 
140
- index_url_creds = credentials.
141
- select { |cred| cred["type"] == "python_index" }
141
+ index_url_creds = credentials
142
+ .select { |cred| cred["type"] == "python_index" }
142
143
 
143
144
  if (main_cred = index_url_creds.find { |cred| cred["replaces-base"] })
144
145
  urls[:main] = AuthedUrlBuilder.authed_url(credential: main_cred)
145
146
  end
146
147
 
147
148
  urls[:extra] =
148
- index_url_creds.
149
- reject { |cred| cred["replaces-base"] }.
150
- map { |cred| AuthedUrlBuilder.authed_url(credential: cred) }
149
+ index_url_creds
150
+ .reject { |cred| cred["replaces-base"] }
151
+ .map { |cred| AuthedUrlBuilder.authed_url(credential: cred) }
151
152
 
152
153
  urls
153
154
  end
@@ -161,16 +162,16 @@ module Dependabot
161
162
  [
162
163
  config_variable_index_urls[:main],
163
164
  *config_variable_index_urls[:extra]
164
- ].
165
- compact.
166
- map { |u| u.strip.gsub(%r{/*$}, "") + "/" }
167
-
168
- regexp = url.
169
- sub(%r{(?<=://).+@}, "").
170
- sub(%r{https?://}, "").
171
- split(ENVIRONMENT_VARIABLE_REGEX).
172
- map { |part| Regexp.quote(part) }.
173
- join(".+")
165
+ ]
166
+ .compact
167
+ .map { |u| u.strip.gsub(%r{/*$}, "") + "/" }
168
+
169
+ regexp = url
170
+ .sub(%r{(?<=://).+@}, "")
171
+ .sub(%r{https?://}, "")
172
+ .split(ENVIRONMENT_VARIABLE_REGEX)
173
+ .map { |part| Regexp.quote(part) }
174
+ .join(".+")
174
175
  authed_url = config_variable_urls.find { |u| u.match?(regexp) }
175
176
  return authed_url if authed_url
176
177
 
@@ -189,9 +190,9 @@ module Dependabot
189
190
  end
190
191
 
191
192
  def credential_for(url)
192
- credentials.
193
- select { |c| c["type"] == "python_index" }.
194
- find do |c|
193
+ credentials
194
+ .select { |c| c["type"] == "python_index" }
195
+ .find do |c|
195
196
  cred_url = c.fetch("index-url").gsub(%r{/*$}, "") + "/"
196
197
  cred_url.include?(url)
197
198
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "cgi"
@@ -102,8 +103,8 @@ module Dependabot
102
103
  end
103
104
 
104
105
  def filter_ignored_versions(versions_array)
105
- filtered = versions_array.
106
- reject { |v| ignore_requirements.any? { |r| r.satisfied_by?(v) } }
106
+ filtered = versions_array
107
+ .reject { |v| ignore_requirements.any? { |r| r.satisfied_by?(v) } }
107
108
  if @raise_on_ignored && filter_lower_versions(filtered).empty? && filter_lower_versions(versions_array).any?
108
109
  raise Dependabot::AllVersionsIgnored
109
110
  end
@@ -122,8 +123,8 @@ module Dependabot
122
123
  requirement_class.requirements_array(r.fetch(:requirement))
123
124
  end
124
125
 
125
- versions_array.
126
- select { |v| reqs.all? { |r| r.any? { |o| o.satisfied_by?(v) } } }
126
+ versions_array
127
+ .select { |v| reqs.all? { |r| r.any? { |o| o.satisfied_by?(v) } } }
127
128
  end
128
129
 
129
130
  def wants_prerelease?
@@ -189,17 +190,17 @@ module Dependabot
189
190
  # rubocop:enable Metrics/PerceivedComplexity
190
191
 
191
192
  def get_version_from_filename(filename)
192
- filename.
193
- gsub(/#{name_regex}-/i, "").
194
- split(/-|\.tar\.|\.zip|\.whl/).
195
- first
193
+ filename
194
+ .gsub(/#{name_regex}-/i, "")
195
+ .split(/-|\.tar\.|\.zip|\.whl/)
196
+ .first
196
197
  end
197
198
 
198
199
  def build_python_requirement_from_link(link)
199
- req_string = Nokogiri::XML(link).
200
- at_css("a")&.
201
- attribute("data-requires-python")&.
202
- content
200
+ req_string = Nokogiri::XML(link)
201
+ .at_css("a")
202
+ &.attribute("data-requires-python")
203
+ &.content
203
204
 
204
205
  return unless req_string
205
206
 
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "open3"
@@ -166,8 +167,8 @@ module Dependabot
166
167
  end
167
168
 
168
169
  if error.message.match?(GIT_DEPENDENCY_UNREACHABLE_REGEX)
169
- url = error.message.match(GIT_DEPENDENCY_UNREACHABLE_REGEX).
170
- named_captures.fetch("url")
170
+ url = error.message.match(GIT_DEPENDENCY_UNREACHABLE_REGEX)
171
+ .named_captures.fetch("url")
171
172
  raise GitDependenciesNotReachable, url
172
173
  end
173
174
 
@@ -259,9 +260,9 @@ module Dependabot
259
260
  end
260
261
 
261
262
  def pip_compile_index_options
262
- credentials.
263
- select { |cred| cred["type"] == "python_index" }.
264
- map do |cred|
263
+ credentials
264
+ .select { |cred| cred["type"] == "python_index" }
265
+ .map do |cred|
265
266
  authed_url = AuthedUrlBuilder.authed_url(credential: cred)
266
267
 
267
268
  if cred["replaces-base"]
@@ -337,9 +338,9 @@ module Dependabot
337
338
  return @sanitized_setup_file_content[file.name] if @sanitized_setup_file_content[file.name]
338
339
 
339
340
  @sanitized_setup_file_content[file.name] =
340
- Python::FileUpdater::SetupFileSanitizer.
341
- new(setup_file: file, setup_cfg: setup_cfg(file)).
342
- sanitized_content
341
+ Python::FileUpdater::SetupFileSanitizer
342
+ .new(setup_file: file, setup_cfg: setup_cfg(file))
343
+ .sanitized_content
343
344
  end
344
345
 
345
346
  def setup_cfg(file)
@@ -373,9 +374,9 @@ module Dependabot
373
374
 
374
375
  def filenames_to_compile
375
376
  files_from_reqs =
376
- dependency.requirements.
377
- map { |r| r[:file] }.
378
- select { |fn| fn.end_with?(".in") }
377
+ dependency.requirements
378
+ .map { |r| r[:file] }
379
+ .select { |fn| fn.end_with?(".in") }
379
380
 
380
381
  files_from_compiled_files =
381
382
  pip_compile_files.map(&:name).select do |fn|
@@ -390,12 +391,12 @@ module Dependabot
390
391
 
391
392
  def compiled_file_for_filename(filename)
392
393
  compiled_file =
393
- compiled_files.
394
- find { |f| f.content.match?(output_file_regex(filename)) }
394
+ compiled_files
395
+ .find { |f| f.content.match?(output_file_regex(filename)) }
395
396
 
396
397
  compiled_file ||=
397
- compiled_files.
398
- find { |f| f.name == filename.gsub(/\.in$/, ".txt") }
398
+ compiled_files
399
+ .find { |f| f.name == filename.gsub(/\.in$/, ".txt") }
399
400
 
400
401
  compiled_file
401
402
  end
@@ -421,8 +422,8 @@ module Dependabot
421
422
 
422
423
  while (remaining_filenames = filenames - ordered_filenames).any?
423
424
  ordered_filenames +=
424
- remaining_filenames.
425
- reject do |fn|
425
+ remaining_filenames
426
+ .reject do |fn|
426
427
  unupdated_reqs = requirement_map[fn] - ordered_filenames
427
428
  unupdated_reqs.intersect?(filenames)
428
429
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require "dependabot/python/language_version_manager"
@@ -25,13 +26,13 @@ module Dependabot
25
26
  end
26
27
 
27
28
  def latest_resolvable_version_with_no_unlock
28
- latest_version_finder.
29
- latest_version_with_no_unlock(python_version: language_version_manager.python_version)
29
+ latest_version_finder
30
+ .latest_version_with_no_unlock(python_version: language_version_manager.python_version)
30
31
  end
31
32
 
32
33
  def lowest_resolvable_security_fix_version
33
- latest_version_finder.
34
- lowest_security_fix_version(python_version: language_version_manager.python_version)
34
+ latest_version_finder
35
+ .lowest_security_fix_version(python_version: language_version_manager.python_version)
35
36
  end
36
37
 
37
38
  private