dependabot-python 0.211.0 → 0.213.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|