dependabot-python 0.254.0 → 0.255.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/lib/hasher.py +17 -8
- data/helpers/requirements.txt +1 -1
- data/lib/dependabot/python/file_updater/pip_compile_file_updater.rb +29 -8
- data/lib/dependabot/python/file_updater/requirement_file_updater.rb +4 -2
- data/lib/dependabot/python/file_updater/requirement_replacer.rb +26 -6
- data/lib/dependabot/python/file_updater.rb +15 -2
- data/lib/dependabot/python/language_version_manager.rb +2 -2
- data/lib/dependabot/python/update_checker.rb +2 -0
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 631b990e99ca7a3be0911a8bf0e8355e2ffa8076a760a2677a99d4359503798a
|
4
|
+
data.tar.gz: 10e7a86fcf9a94f1af3d45f9cbc97afae3f91f0c8fe0442b0c1aa38a4fc92347
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ceb72b14d9a1b4f787e00574259b0f75fb840173e16ba535233b49696661ff60e36b4d9fe25f6b130831e56ad36be19c7f1ca8752dd39fe1b3dd5641097a96f
|
7
|
+
data.tar.gz: 5e8b5844b682e2714e87e433412ed0699d61f114bb1f78d98bc7ad41cbafac12b915caeff12ee3d0facdf88e31862758b96d99e73606bb17c3ae817eada8dd18
|
data/helpers/lib/hasher.py
CHANGED
@@ -1,17 +1,26 @@
|
|
1
1
|
import hashin
|
2
2
|
import json
|
3
3
|
import plette
|
4
|
+
import traceback
|
4
5
|
from poetry.factory import Factory
|
5
6
|
|
6
7
|
|
7
|
-
def get_dependency_hash(dependency_name, dependency_version, algorithm
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
def get_dependency_hash(dependency_name, dependency_version, algorithm,
|
9
|
+
index_url=hashin.DEFAULT_INDEX_URL):
|
10
|
+
try:
|
11
|
+
hashes = hashin.get_package_hashes(
|
12
|
+
dependency_name,
|
13
|
+
version=dependency_version,
|
14
|
+
algorithm=algorithm,
|
15
|
+
index_url=index_url
|
16
|
+
)
|
17
|
+
return json.dumps({"result": hashes["hashes"]})
|
18
|
+
except hashin.PackageNotFoundError as e:
|
19
|
+
return json.dumps({
|
20
|
+
"error": repr(e),
|
21
|
+
"error_class:": e.__class__.__name__,
|
22
|
+
"trace:": ''.join(traceback.format_stack())
|
23
|
+
})
|
15
24
|
|
16
25
|
|
17
26
|
def get_pipfile_hash(directory):
|
data/helpers/requirements.txt
CHANGED
@@ -34,10 +34,11 @@ module Dependabot
|
|
34
34
|
attr_reader :dependency_files
|
35
35
|
attr_reader :credentials
|
36
36
|
|
37
|
-
def initialize(dependencies:, dependency_files:, credentials:)
|
37
|
+
def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil)
|
38
38
|
@dependencies = dependencies
|
39
39
|
@dependency_files = dependency_files
|
40
40
|
@credentials = credentials
|
41
|
+
@index_urls = index_urls
|
41
42
|
@build_isolation = true
|
42
43
|
end
|
43
44
|
|
@@ -265,7 +266,8 @@ module Dependabot
|
|
265
266
|
content: file.content,
|
266
267
|
dependency_name: dependency.name,
|
267
268
|
old_requirement: old_req[:requirement],
|
268
|
-
new_requirement: "==#{dependency.version}"
|
269
|
+
new_requirement: "==#{dependency.version}",
|
270
|
+
index_urls: @index_urls
|
269
271
|
).updated_content
|
270
272
|
end
|
271
273
|
|
@@ -283,7 +285,8 @@ module Dependabot
|
|
283
285
|
content: file.content,
|
284
286
|
dependency_name: dependency.name,
|
285
287
|
old_requirement: old_req[:requirement],
|
286
|
-
new_requirement: new_req[:requirement]
|
288
|
+
new_requirement: new_req[:requirement],
|
289
|
+
index_urls: @index_urls
|
287
290
|
).updated_content
|
288
291
|
end
|
289
292
|
|
@@ -389,11 +392,29 @@ module Dependabot
|
|
389
392
|
end
|
390
393
|
|
391
394
|
def package_hashes_for(name:, version:, algorithm:)
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
395
|
+
index_urls = @index_urls || [nil]
|
396
|
+
hashes = []
|
397
|
+
|
398
|
+
index_urls.each do |index_url|
|
399
|
+
args = [name, version, algorithm]
|
400
|
+
args << index_url if index_url
|
401
|
+
|
402
|
+
begin
|
403
|
+
native_helper_hashes = SharedHelpers.run_helper_subprocess(
|
404
|
+
command: "pyenv exec python3 #{NativeHelpers.python_helper_path}",
|
405
|
+
function: "get_dependency_hash",
|
406
|
+
args: args
|
407
|
+
).map { |h| "--hash=#{algorithm}:#{h['hash']}" }
|
408
|
+
|
409
|
+
hashes.concat(native_helper_hashes)
|
410
|
+
rescue SharedHelpers::HelperSubprocessFailed => e
|
411
|
+
raise unless e.error_class.include?("PackageNotFoundError")
|
412
|
+
|
413
|
+
next
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
hashes
|
397
418
|
end
|
398
419
|
|
399
420
|
def hash_separator(requirement_string)
|
@@ -16,10 +16,11 @@ module Dependabot
|
|
16
16
|
attr_reader :dependency_files
|
17
17
|
attr_reader :credentials
|
18
18
|
|
19
|
-
def initialize(dependencies:, dependency_files:, credentials:)
|
19
|
+
def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil)
|
20
20
|
@dependencies = dependencies
|
21
21
|
@dependency_files = dependency_files
|
22
22
|
@credentials = credentials
|
23
|
+
@index_urls = index_urls
|
23
24
|
end
|
24
25
|
|
25
26
|
def updated_dependency_files
|
@@ -58,7 +59,8 @@ module Dependabot
|
|
58
59
|
dependency_name: dependency.name,
|
59
60
|
old_requirement: old_req.fetch(:requirement),
|
60
61
|
new_requirement: new_req.fetch(:requirement),
|
61
|
-
new_hash_version: dependency.version
|
62
|
+
new_hash_version: dependency.version,
|
63
|
+
index_urls: @index_urls
|
62
64
|
).updated_content
|
63
65
|
end
|
64
66
|
|
@@ -12,13 +12,16 @@ module Dependabot
|
|
12
12
|
module Python
|
13
13
|
class FileUpdater
|
14
14
|
class RequirementReplacer
|
15
|
+
PACKAGE_NOT_FOUND_ERROR = "PackageNotFoundError"
|
16
|
+
|
15
17
|
def initialize(content:, dependency_name:, old_requirement:,
|
16
|
-
new_requirement:, new_hash_version: nil)
|
18
|
+
new_requirement:, new_hash_version: nil, index_urls: nil)
|
17
19
|
@content = content
|
18
20
|
@dependency_name = normalise(dependency_name)
|
19
21
|
@old_requirement = old_requirement
|
20
22
|
@new_requirement = new_requirement
|
21
23
|
@new_hash_version = new_hash_version
|
24
|
+
@index_urls = index_urls
|
22
25
|
end
|
23
26
|
|
24
27
|
def updated_content
|
@@ -137,11 +140,28 @@ module Dependabot
|
|
137
140
|
end
|
138
141
|
|
139
142
|
def package_hashes_for(name:, version:, algorithm:)
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
args
|
144
|
-
|
143
|
+
index_urls = @index_urls || [nil]
|
144
|
+
|
145
|
+
index_urls.map do |index_url|
|
146
|
+
args = [name, version, algorithm]
|
147
|
+
args << index_url unless index_url.nil?
|
148
|
+
|
149
|
+
begin
|
150
|
+
result = SharedHelpers.run_helper_subprocess(
|
151
|
+
command: "pyenv exec python3 #{NativeHelpers.python_helper_path}",
|
152
|
+
function: "get_dependency_hash",
|
153
|
+
args: args
|
154
|
+
)
|
155
|
+
rescue SharedHelpers::HelperSubprocessFailed => e
|
156
|
+
raise unless e.message.include?("PackageNotFoundError")
|
157
|
+
|
158
|
+
next
|
159
|
+
end
|
160
|
+
|
161
|
+
return result.map { |h| "--hash=#{algorithm}:#{h['hash']}" } if result.is_a?(Array)
|
162
|
+
end
|
163
|
+
|
164
|
+
raise Dependabot::DependencyFileNotResolvable, "Unable to find hashes for package #{name}"
|
145
165
|
end
|
146
166
|
|
147
167
|
def original_dependency_declaration_string(old_req)
|
@@ -105,7 +105,8 @@ module Dependabot
|
|
105
105
|
PipCompileFileUpdater.new(
|
106
106
|
dependencies: dependencies,
|
107
107
|
dependency_files: dependency_files,
|
108
|
-
credentials: credentials
|
108
|
+
credentials: credentials,
|
109
|
+
index_urls: pip_compile_index_urls
|
109
110
|
).updated_dependency_files
|
110
111
|
end
|
111
112
|
|
@@ -113,10 +114,22 @@ module Dependabot
|
|
113
114
|
RequirementFileUpdater.new(
|
114
115
|
dependencies: dependencies,
|
115
116
|
dependency_files: dependency_files,
|
116
|
-
credentials: credentials
|
117
|
+
credentials: credentials,
|
118
|
+
index_urls: pip_compile_index_urls
|
117
119
|
).updated_dependency_files
|
118
120
|
end
|
119
121
|
|
122
|
+
def pip_compile_index_urls
|
123
|
+
if credentials.any?(&:replaces_base?)
|
124
|
+
credentials.select(&:replaces_base?).map { |cred| AuthedUrlBuilder.authed_url(credential: cred) }
|
125
|
+
else
|
126
|
+
urls = credentials.map { |cred| AuthedUrlBuilder.authed_url(credential: cred) }
|
127
|
+
# If there are no credentials that replace the base, we need to
|
128
|
+
# ensure that the base URL is included in the list of extra-index-urls.
|
129
|
+
[nil, *urls]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
120
133
|
def check_required_files
|
121
134
|
filenames = dependency_files.map(&:name)
|
122
135
|
return if filenames.any? { |name| name.end_with?(".txt", ".in") }
|
@@ -262,6 +262,8 @@ module Dependabot
|
|
262
262
|
def library?
|
263
263
|
return false unless updating_pyproject?
|
264
264
|
|
265
|
+
return false if library_details["name"].nil?
|
266
|
+
|
265
267
|
# Hit PyPi and check whether there are details for a library with a
|
266
268
|
# matching name and description
|
267
269
|
index_response = Dependabot::RegistryClient.get(
|
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.255.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dependabot-common
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.255.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.
|
26
|
+
version: 0.255.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: debug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 0.8.1
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: simplecov
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.22.0
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.22.0
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: turbo_tests
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -274,7 +288,7 @@ licenses:
|
|
274
288
|
- Nonstandard
|
275
289
|
metadata:
|
276
290
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
277
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
291
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.255.0
|
278
292
|
post_install_message:
|
279
293
|
rdoc_options: []
|
280
294
|
require_paths:
|
@@ -290,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
304
|
- !ruby/object:Gem::Version
|
291
305
|
version: 3.1.0
|
292
306
|
requirements: []
|
293
|
-
rubygems_version: 3.
|
307
|
+
rubygems_version: 3.5.9
|
294
308
|
signing_key:
|
295
309
|
specification_version: 4
|
296
310
|
summary: Provides Dependabot support for Python
|