dependabot-python 0.211.0 → 0.213.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/helpers/build +1 -6
- data/helpers/lib/parser.py +52 -0
- data/helpers/requirements.txt +3 -3
- data/helpers/run.py +2 -0
- data/lib/dependabot/python/file_fetcher.rb +24 -14
- data/lib/dependabot/python/file_parser/{poetry_files_parser.rb → pyproject_files_parser.rb} +87 -5
- data/lib/dependabot/python/file_parser/python_requirement_parser.rb +1 -2
- data/lib/dependabot/python/file_parser/setup_file_parser.rb +5 -5
- data/lib/dependabot/python/file_parser.rb +5 -29
- data/lib/dependabot/python/file_updater/pip_compile_file_updater.rb +14 -29
- data/lib/dependabot/python/file_updater/pipfile_file_updater.rb +7 -9
- data/lib/dependabot/python/file_updater/poetry_file_updater.rb +7 -6
- data/lib/dependabot/python/file_updater/pyproject_preparer.rb +3 -2
- data/lib/dependabot/python/file_updater/requirement_file_updater.rb +2 -2
- data/lib/dependabot/python/file_updater/requirement_replacer.rb +2 -2
- data/lib/dependabot/python/file_updater/setup_file_sanitizer.rb +8 -8
- data/lib/dependabot/python/file_updater.rb +15 -2
- data/lib/dependabot/python/helpers.rb +20 -0
- data/lib/dependabot/python/metadata_finder.rb +2 -0
- data/lib/dependabot/python/native_helpers.rb +1 -1
- data/lib/dependabot/python/python_versions.rb +5 -5
- data/lib/dependabot/python/requirement.rb +7 -4
- data/lib/dependabot/python/requirement_parser.rb +20 -23
- data/lib/dependabot/python/update_checker/index_finder.rb +2 -2
- data/lib/dependabot/python/update_checker/latest_version_finder.rb +10 -7
- data/lib/dependabot/python/update_checker/pip_compile_version_resolver.rb +17 -19
- data/lib/dependabot/python/update_checker/pipenv_version_resolver.rb +29 -34
- data/lib/dependabot/python/update_checker/poetry_version_resolver.rb +45 -26
- data/lib/dependabot/python/update_checker/requirements_updater.rb +18 -5
- data/lib/dependabot/python/update_checker.rb +82 -27
- data/lib/dependabot/python/version.rb +2 -2
- metadata +16 -43
@@ -3,6 +3,7 @@
|
|
3
3
|
require "excon"
|
4
4
|
require "toml-rb"
|
5
5
|
require "open3"
|
6
|
+
require "uri"
|
6
7
|
require "dependabot/dependency"
|
7
8
|
require "dependabot/errors"
|
8
9
|
require "dependabot/shared_helpers"
|
@@ -23,18 +24,30 @@ module Dependabot
|
|
23
24
|
# This class does version resolution for pyproject.toml files.
|
24
25
|
class PoetryVersionResolver
|
25
26
|
GIT_REFERENCE_NOT_FOUND_REGEX = /
|
26
|
-
'git'.*pypoetry-git-(?<name>.+?).{8}',
|
27
|
+
(?:'git'.*pypoetry-git-(?<name>.+?).{8}',
|
27
28
|
'checkout',
|
28
29
|
'(?<tag>.+?)'
|
29
|
-
|
30
|
+
|
|
31
|
+
Failed to checkout
|
32
|
+
(?<tag>.+?)
|
33
|
+
(?<url>.+?).git at '(?<tag>.+?)'
|
34
|
+
|
|
35
|
+
...Failedtoclone
|
36
|
+
(?<url>.+?).gitat'(?<tag>.+?)',
|
37
|
+
verifyrefexistsonremote)
|
38
|
+
/x # TODO: remove the first clause and | when py3.6 support is EoL
|
30
39
|
GIT_DEPENDENCY_UNREACHABLE_REGEX = /
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
(?:'\['git',
|
41
|
+
\s+'clone',
|
42
|
+
\s+'--recurse-submodules',
|
43
|
+
\s+'(--)?',
|
44
|
+
\s+'(?<url>.+?)'.*
|
45
|
+
\s+exit\s+status\s+128
|
46
|
+
|
|
47
|
+
\s+Failed\sto\sclone
|
48
|
+
\s+(?<url>.+?),
|
49
|
+
\s+check\syour\sgit\sconfiguration)
|
50
|
+
/mx # TODO: remove the first clause and | when py3.6 support is EoL
|
38
51
|
|
39
52
|
attr_reader :dependency, :dependency_files, :credentials
|
40
53
|
|
@@ -61,7 +74,8 @@ module Dependabot
|
|
61
74
|
false
|
62
75
|
end
|
63
76
|
rescue SharedHelpers::HelperSubprocessFailed => e
|
64
|
-
raise unless e.message.include?("SolverProblemError")
|
77
|
+
raise unless e.message.include?("SolverProblemError") || # TODO: Remove once py3.6 is EoL
|
78
|
+
e.message.include?("version solving failed.")
|
65
79
|
|
66
80
|
@resolvable[version] = false
|
67
81
|
end
|
@@ -78,13 +92,11 @@ module Dependabot
|
|
78
92
|
write_temporary_dependency_files(updated_req: requirement)
|
79
93
|
add_auth_env_vars
|
80
94
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
"#{NativeHelpers.python_requirements_path}"
|
87
|
-
)
|
95
|
+
Helpers.install_required_python(python_version)
|
96
|
+
|
97
|
+
# use system git instead of the pure Python dulwich
|
98
|
+
unless python_version&.start_with?("3.6")
|
99
|
+
run_poetry_command("pyenv exec poetry config experimental.system-git-client true")
|
88
100
|
end
|
89
101
|
|
90
102
|
# Shell out to Poetry, which handles everything for us.
|
@@ -118,8 +130,13 @@ module Dependabot
|
|
118
130
|
def handle_poetry_errors(error)
|
119
131
|
if error.message.gsub(/\s/, "").match?(GIT_REFERENCE_NOT_FOUND_REGEX)
|
120
132
|
message = error.message.gsub(/\s/, "")
|
121
|
-
|
122
|
-
|
133
|
+
match = message.match(GIT_REFERENCE_NOT_FOUND_REGEX)
|
134
|
+
name = if (url = match.named_captures.fetch("url"))
|
135
|
+
File.basename(URI.parse(url).path)
|
136
|
+
else
|
137
|
+
message.match(GIT_REFERENCE_NOT_FOUND_REGEX).
|
138
|
+
named_captures.fetch("name")
|
139
|
+
end
|
123
140
|
raise GitDependencyReferenceNotFound, name
|
124
141
|
end
|
125
142
|
|
@@ -130,7 +147,8 @@ module Dependabot
|
|
130
147
|
end
|
131
148
|
|
132
149
|
raise unless error.message.include?("SolverProblemError") ||
|
133
|
-
error.message.include?("PackageNotFound")
|
150
|
+
error.message.include?("PackageNotFound") ||
|
151
|
+
error.message.include?("version solving failed.")
|
134
152
|
|
135
153
|
check_original_requirements_resolvable
|
136
154
|
|
@@ -161,7 +179,8 @@ module Dependabot
|
|
161
179
|
@original_reqs_resolvable = true
|
162
180
|
rescue SharedHelpers::HelperSubprocessFailed => e
|
163
181
|
raise unless e.message.include?("SolverProblemError") ||
|
164
|
-
e.message.include?("PackageNotFound")
|
182
|
+
e.message.include?("PackageNotFound") ||
|
183
|
+
e.message.include?("version solving failed.")
|
165
184
|
|
166
185
|
msg = clean_error_message(e.message)
|
167
186
|
raise DependencyFileNotResolvable, msg
|
@@ -214,9 +233,9 @@ module Dependabot
|
|
214
233
|
end
|
215
234
|
return version if version
|
216
235
|
|
217
|
-
msg = "Dependabot detected the following Python requirements "\
|
218
|
-
"for your project: '#{requirements}'.\n\nCurrently, the "\
|
219
|
-
"following Python versions are supported in Dependabot: "\
|
236
|
+
msg = "Dependabot detected the following Python requirements " \
|
237
|
+
"for your project: '#{requirements}'.\n\nCurrently, the " \
|
238
|
+
"following Python versions are supported in Dependabot: " \
|
220
239
|
"#{PythonVersions::SUPPORTED_VERSIONS.join(', ')}."
|
221
240
|
raise DependencyFileNotResolvable, msg
|
222
241
|
end
|
@@ -265,7 +284,7 @@ module Dependabot
|
|
265
284
|
pyproject_object = TomlRB.parse(pyproject_content)
|
266
285
|
poetry_object = pyproject_object.dig("tool", "poetry")
|
267
286
|
|
268
|
-
Dependabot::Python::FileParser::
|
287
|
+
Dependabot::Python::FileParser::PyprojectFilesParser::POETRY_DEPENDENCY_TYPES.each do |type|
|
269
288
|
names = poetry_object[type]&.keys || []
|
270
289
|
pkg_name = names.find { |nm| normalise(nm) == dependency.name }
|
271
290
|
next unless pkg_name
|
@@ -318,7 +337,7 @@ module Dependabot
|
|
318
337
|
stdout, process = Open3.capture2e(command)
|
319
338
|
time_taken = Time.now - start
|
320
339
|
|
321
|
-
# Raise an error with the output from the shell session if
|
340
|
+
# Raise an error with the output from the shell session if poetry
|
322
341
|
# returns a non-zero status
|
323
342
|
return if process.success?
|
324
343
|
|
@@ -9,8 +9,8 @@ module Dependabot
|
|
9
9
|
module Python
|
10
10
|
class UpdateChecker
|
11
11
|
class RequirementsUpdater
|
12
|
-
PYPROJECT_OR_SEPARATOR = /(?<=[a-zA-Z0-9*])\s
|
13
|
-
PYPROJECT_SEPARATOR = /#{PYPROJECT_OR_SEPARATOR}
|
12
|
+
PYPROJECT_OR_SEPARATOR = /(?<=[a-zA-Z0-9*])\s*\|+/
|
13
|
+
PYPROJECT_SEPARATOR = /#{PYPROJECT_OR_SEPARATOR}|,/
|
14
14
|
|
15
15
|
class UnfixableRequirement < StandardError; end
|
16
16
|
|
@@ -175,11 +175,25 @@ module Dependabot
|
|
175
175
|
end
|
176
176
|
# rubocop:enable Metrics/PerceivedComplexity
|
177
177
|
|
178
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
179
178
|
def updated_requirement(req)
|
180
179
|
return req unless latest_resolvable_version
|
181
180
|
return req unless req.fetch(:requirement)
|
182
181
|
|
182
|
+
case update_strategy
|
183
|
+
when :bump_versions
|
184
|
+
update_requirement(req)
|
185
|
+
when :bump_versions_if_necessary
|
186
|
+
update_requirement_if_needed(req)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def update_requirement_if_needed(req)
|
191
|
+
return req if new_version_satisfies?(req)
|
192
|
+
|
193
|
+
update_requirement(req)
|
194
|
+
end
|
195
|
+
|
196
|
+
def update_requirement(req)
|
183
197
|
requirement_strings = req[:requirement].split(",").map(&:strip)
|
184
198
|
|
185
199
|
new_requirement =
|
@@ -197,7 +211,6 @@ module Dependabot
|
|
197
211
|
rescue UnfixableRequirement
|
198
212
|
req.merge(requirement: :unfixable)
|
199
213
|
end
|
200
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
201
214
|
|
202
215
|
def new_version_satisfies?(req)
|
203
216
|
requirement_class.
|
@@ -260,7 +273,7 @@ module Dependabot
|
|
260
273
|
# Updates the version in a constraint to be the given version
|
261
274
|
def bump_version(req_string, version_to_be_permitted)
|
262
275
|
old_version = req_string.
|
263
|
-
match(/(#{RequirementParser::VERSION})/).
|
276
|
+
match(/(#{RequirementParser::VERSION})/o).
|
264
277
|
captures.first
|
265
278
|
|
266
279
|
req_string.sub(
|
@@ -26,7 +26,7 @@ module Dependabot
|
|
26
26
|
https://pypi.python.org/simple/
|
27
27
|
https://pypi.org/simple/
|
28
28
|
).freeze
|
29
|
-
VERSION_REGEX = /[0-9]+(?:\.[A-Za-z0-9\-_]+)
|
29
|
+
VERSION_REGEX = /[0-9]+(?:\.[A-Za-z0-9\-_]+)*/
|
30
30
|
|
31
31
|
def latest_version
|
32
32
|
@latest_version ||= fetch_latest_version
|
@@ -89,7 +89,7 @@ module Dependabot
|
|
89
89
|
|
90
90
|
def updated_requirements
|
91
91
|
RequirementsUpdater.new(
|
92
|
-
requirements:
|
92
|
+
requirements: requirements,
|
93
93
|
latest_resolvable_version: preferred_resolvable_version&.to_s,
|
94
94
|
update_strategy: requirements_update_strategy,
|
95
95
|
has_lockfile: !(pipfile_lock || poetry_lock || pyproject_lock).nil?
|
@@ -100,8 +100,8 @@ module Dependabot
|
|
100
100
|
# If passed in as an option (in the base class) honour that option
|
101
101
|
return @requirements_update_strategy.to_sym if @requirements_update_strategy
|
102
102
|
|
103
|
-
# Otherwise, check if this is a
|
104
|
-
|
103
|
+
# Otherwise, check if this is a library or not
|
104
|
+
library? ? :widen_ranges : :bump_versions
|
105
105
|
end
|
106
106
|
|
107
107
|
private
|
@@ -115,6 +115,17 @@ module Dependabot
|
|
115
115
|
raise NotImplementedError
|
116
116
|
end
|
117
117
|
|
118
|
+
def preferred_version_resolvable_with_unlock?
|
119
|
+
# Our requirements file updater doesn't currently support widening
|
120
|
+
# ranges, so avoid updating this dependency if widening ranges has been
|
121
|
+
# required and the dependency is present on a requirements file.
|
122
|
+
# Otherwise, we will crash later on. TODO: Consider what the correct
|
123
|
+
# behavior is in these cases.
|
124
|
+
return false if requirements_update_strategy == :widen_ranges && updating_requirements_file?
|
125
|
+
|
126
|
+
super
|
127
|
+
end
|
128
|
+
|
118
129
|
def fetch_lowest_resolvable_security_fix_version
|
119
130
|
fix_version = lowest_security_fix_version
|
120
131
|
return latest_resolvable_version if fix_version.nil?
|
@@ -132,10 +143,8 @@ module Dependabot
|
|
132
143
|
resolver.resolvable?(version: fix_version) ? fix_version : nil
|
133
144
|
end
|
134
145
|
|
135
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
136
146
|
def resolver_type
|
137
|
-
reqs =
|
138
|
-
req_files = reqs.map { |r| r.fetch(:file) }
|
147
|
+
reqs = requirements
|
139
148
|
|
140
149
|
# If there are no requirements then this is a sub-dependency. It
|
141
150
|
# must come from one of Pipenv, Poetry or pip-tools, and can't come
|
@@ -144,9 +153,9 @@ module Dependabot
|
|
144
153
|
|
145
154
|
# Otherwise, this is a top-level dependency, and we can figure out
|
146
155
|
# which resolver to use based on the filename of its requirements
|
147
|
-
return :pipenv if
|
148
|
-
return
|
149
|
-
return :pip_compile if
|
156
|
+
return :pipenv if updating_pipfile?
|
157
|
+
return pyproject_resolver if updating_pyproject?
|
158
|
+
return :pip_compile if updating_in_file?
|
150
159
|
|
151
160
|
if dependency.version && !exact_requirement?(reqs)
|
152
161
|
subdependency_resolver
|
@@ -154,7 +163,6 @@ module Dependabot
|
|
154
163
|
:requirements
|
155
164
|
end
|
156
165
|
end
|
157
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
158
166
|
|
159
167
|
def subdependency_resolver
|
160
168
|
return :pipenv if pipfile_lock
|
@@ -164,6 +172,12 @@ module Dependabot
|
|
164
172
|
raise "Claimed to be a sub-dependency, but no lockfile exists!"
|
165
173
|
end
|
166
174
|
|
175
|
+
def pyproject_resolver
|
176
|
+
return :poetry if poetry_based?
|
177
|
+
|
178
|
+
:requirements
|
179
|
+
end
|
180
|
+
|
167
181
|
def exact_requirement?(reqs)
|
168
182
|
reqs = reqs.map { |r| r.fetch(:requirement) }
|
169
183
|
reqs = reqs.compact
|
@@ -204,16 +218,14 @@ module Dependabot
|
|
204
218
|
end
|
205
219
|
|
206
220
|
def current_requirement_string
|
207
|
-
reqs =
|
221
|
+
reqs = requirements
|
208
222
|
return if reqs.none?
|
209
223
|
|
210
|
-
requirement =
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
when :requirements then reqs.find { |r| r[:file].end_with?(".txt") }
|
216
|
-
end
|
224
|
+
requirement = reqs.find do |r|
|
225
|
+
file = r[:file]
|
226
|
+
|
227
|
+
file == "Pipfile" || file == "pyproject.toml" || file.end_with?(".in") || file.end_with?(".txt")
|
228
|
+
end
|
217
229
|
|
218
230
|
requirement&.fetch(:requirement)
|
219
231
|
end
|
@@ -238,7 +250,7 @@ module Dependabot
|
|
238
250
|
return ">= #{dependency.version}" if dependency.version
|
239
251
|
|
240
252
|
version_for_requirement =
|
241
|
-
|
253
|
+
requirements.filter_map { |r| r[:requirement] }.
|
242
254
|
reject { |req_string| req_string.start_with?("<") }.
|
243
255
|
select { |req_string| req_string.match?(VERSION_REGEX) }.
|
244
256
|
map { |req_string| req_string.match(VERSION_REGEX) }.
|
@@ -263,26 +275,53 @@ module Dependabot
|
|
263
275
|
)
|
264
276
|
end
|
265
277
|
|
266
|
-
def
|
267
|
-
|
278
|
+
def poetry_based?
|
279
|
+
updating_pyproject? && !poetry_details.nil?
|
280
|
+
end
|
281
|
+
|
282
|
+
def library?
|
283
|
+
return unless updating_pyproject?
|
268
284
|
|
269
285
|
# Hit PyPi and check whether there are details for a library with a
|
270
286
|
# matching name and description
|
271
|
-
details = TomlRB.parse(pyproject.content).dig("tool", "poetry")
|
272
|
-
return false unless details
|
273
|
-
|
274
287
|
index_response = Dependabot::RegistryClient.get(
|
275
|
-
url: "https://pypi.org/pypi/#{normalised_name(
|
288
|
+
url: "https://pypi.org/pypi/#{normalised_name(library_details['name'])}/json/"
|
276
289
|
)
|
277
290
|
|
278
291
|
return false unless index_response.status == 200
|
279
292
|
|
280
293
|
pypi_info = JSON.parse(index_response.body)["info"] || {}
|
281
|
-
pypi_info["summary"] ==
|
294
|
+
pypi_info["summary"] == library_details["description"]
|
295
|
+
rescue Excon::Error::Timeout
|
296
|
+
false
|
282
297
|
rescue URI::InvalidURIError
|
283
298
|
false
|
284
299
|
end
|
285
300
|
|
301
|
+
def updating_pipfile?
|
302
|
+
requirement_files.any?("Pipfile")
|
303
|
+
end
|
304
|
+
|
305
|
+
def updating_pyproject?
|
306
|
+
requirement_files.any?("pyproject.toml")
|
307
|
+
end
|
308
|
+
|
309
|
+
def updating_in_file?
|
310
|
+
requirement_files.any? { |f| f.end_with?(".in") }
|
311
|
+
end
|
312
|
+
|
313
|
+
def updating_requirements_file?
|
314
|
+
requirement_files.any? { |f| f =~ /\.txt$|\.in$/ }
|
315
|
+
end
|
316
|
+
|
317
|
+
def requirement_files
|
318
|
+
requirements.map { |r| r.fetch(:file) }
|
319
|
+
end
|
320
|
+
|
321
|
+
def requirements
|
322
|
+
dependency.requirements
|
323
|
+
end
|
324
|
+
|
286
325
|
def normalised_name(name)
|
287
326
|
NameNormaliser.normalise(name)
|
288
327
|
end
|
@@ -307,6 +346,22 @@ module Dependabot
|
|
307
346
|
dependency_files.find { |f| f.name == "poetry.lock" }
|
308
347
|
end
|
309
348
|
|
349
|
+
def library_details
|
350
|
+
@library_details ||= poetry_details || standard_details
|
351
|
+
end
|
352
|
+
|
353
|
+
def poetry_details
|
354
|
+
@poetry_details ||= toml_content.dig("tool", "poetry")
|
355
|
+
end
|
356
|
+
|
357
|
+
def standard_details
|
358
|
+
@standard_details ||= toml_content["project"]
|
359
|
+
end
|
360
|
+
|
361
|
+
def toml_content
|
362
|
+
@toml_content ||= TomlRB.parse(pyproject.content)
|
363
|
+
end
|
364
|
+
|
310
365
|
def pip_compile_files
|
311
366
|
dependency_files.select { |f| f.name.end_with?(".in") }
|
312
367
|
end
|
@@ -16,9 +16,9 @@ module Dependabot
|
|
16
16
|
|
17
17
|
# See https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
|
18
18
|
VERSION_PATTERN = 'v?([1-9][0-9]*!)?[0-9]+[0-9a-zA-Z]*(?>\.[0-9a-zA-Z]+)*' \
|
19
|
-
'(-[0-9A-Za-z
|
19
|
+
'(-[0-9A-Za-z]+(\.[0-9a-zA-Z]+)*)?' \
|
20
20
|
'(\+[0-9a-zA-Z]+(\.[0-9a-zA-Z]+)*)?'
|
21
|
-
ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z
|
21
|
+
ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/
|
22
22
|
|
23
23
|
def self.correct?(version)
|
24
24
|
return false if version.nil?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-python
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.213.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dependabot-common
|
@@ -16,42 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.213.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: debase
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.2.3
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.2.3
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: debase-ruby_core_source
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.10.16
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.10.16
|
26
|
+
version: 0.213.0
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: debug
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +58,14 @@ dependencies:
|
|
86
58
|
requirements:
|
87
59
|
- - "~>"
|
88
60
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.
|
61
|
+
version: 3.13.0
|
90
62
|
type: :development
|
91
63
|
prerelease: false
|
92
64
|
version_requirements: !ruby/object:Gem::Requirement
|
93
65
|
requirements:
|
94
66
|
- - "~>"
|
95
67
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.
|
68
|
+
version: 3.13.0
|
97
69
|
- !ruby/object:Gem::Dependency
|
98
70
|
name: rake
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,28 +114,28 @@ dependencies:
|
|
142
114
|
requirements:
|
143
115
|
- - "~>"
|
144
116
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
117
|
+
version: 1.37.1
|
146
118
|
type: :development
|
147
119
|
prerelease: false
|
148
120
|
version_requirements: !ruby/object:Gem::Requirement
|
149
121
|
requirements:
|
150
122
|
- - "~>"
|
151
123
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
124
|
+
version: 1.37.1
|
153
125
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
126
|
+
name: rubocop-performance
|
155
127
|
requirement: !ruby/object:Gem::Requirement
|
156
128
|
requirements:
|
157
129
|
- - "~>"
|
158
130
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
131
|
+
version: 1.15.0
|
160
132
|
type: :development
|
161
133
|
prerelease: false
|
162
134
|
version_requirements: !ruby/object:Gem::Requirement
|
163
135
|
requirements:
|
164
136
|
- - "~>"
|
165
137
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
138
|
+
version: 1.15.0
|
167
139
|
- !ruby/object:Gem::Dependency
|
168
140
|
name: simplecov
|
169
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,7 +224,7 @@ files:
|
|
252
224
|
- lib/dependabot/python/file_fetcher.rb
|
253
225
|
- lib/dependabot/python/file_parser.rb
|
254
226
|
- lib/dependabot/python/file_parser/pipfile_files_parser.rb
|
255
|
-
- lib/dependabot/python/file_parser/
|
227
|
+
- lib/dependabot/python/file_parser/pyproject_files_parser.rb
|
256
228
|
- lib/dependabot/python/file_parser/python_requirement_parser.rb
|
257
229
|
- lib/dependabot/python/file_parser/setup_file_parser.rb
|
258
230
|
- lib/dependabot/python/file_updater.rb
|
@@ -265,6 +237,7 @@ files:
|
|
265
237
|
- lib/dependabot/python/file_updater/requirement_file_updater.rb
|
266
238
|
- lib/dependabot/python/file_updater/requirement_replacer.rb
|
267
239
|
- lib/dependabot/python/file_updater/setup_file_sanitizer.rb
|
240
|
+
- lib/dependabot/python/helpers.rb
|
268
241
|
- lib/dependabot/python/metadata_finder.rb
|
269
242
|
- lib/dependabot/python/name_normaliser.rb
|
270
243
|
- lib/dependabot/python/native_helpers.rb
|
@@ -292,14 +265,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
292
265
|
requirements:
|
293
266
|
- - ">="
|
294
267
|
- !ruby/object:Gem::Version
|
295
|
-
version:
|
268
|
+
version: 3.1.0
|
296
269
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
297
270
|
requirements:
|
298
271
|
- - ">="
|
299
272
|
- !ruby/object:Gem::Version
|
300
|
-
version:
|
273
|
+
version: 3.1.0
|
301
274
|
requirements: []
|
302
|
-
rubygems_version: 3.
|
275
|
+
rubygems_version: 3.3.7
|
303
276
|
signing_key:
|
304
277
|
specification_version: 4
|
305
278
|
summary: Python support for dependabot
|