dependabot-conda 0.391.0 → 0.392.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77bb5fb35cc078e208e8c9d1670a7599fa3333d3a046e5dcf38aee7eba9084ff
4
- data.tar.gz: 9d2a56aa0bfefbfc1a679cc55c121f447e8b234b637ff568477c284c385b15b9
3
+ metadata.gz: ee822579eaf5c3ed3b029528a4a9204ee40b7a5c26d17807f5261fca44c1323d
4
+ data.tar.gz: c2f2173d3829508e9a7a63f1ec80c840034c20356857af4507f112d743bc99d7
5
5
  SHA512:
6
- metadata.gz: 55cbd0430fe8db6db9ad97b0860c201f5dd86495a7f74c2d07291dd3609ed0e1050040a6fb1e29902cfd7c6be6a95eb4e14ccf42d51b93f7172151b689fa2047
7
- data.tar.gz: 15edf2e2443b27fdc650ef6354e5bbc8ad6b89d1d643400d6e76fb81ac49919d9ecfd10935d9ffd1b6fffa6e9698ebd8f305fcc2c012c518340f55e3b1065f38
6
+ metadata.gz: aac051bca37bee0e86824f3cab6dbb388d509bb2f86e4fc4c53e851ce36b754e64a40e007edf2a1641e5770fa1754072ff409ba7d4e23fdda050476d6006fb70
7
+ data.tar.gz: 5c63b5fcdedb799ae284aa15a1eb151138c84b1d7ea37c435811ac0f9f04b8b1a340827e299deb100a6a3d39f40bb1a372934f44babe699a7309d5452ec48ad9
@@ -15,6 +15,14 @@ module Dependabot
15
15
  class FileParser < Dependabot::FileParsers::Base
16
16
  extend T::Sig
17
17
 
18
+ ParsedDependency = T.type_alias do
19
+ {
20
+ name: String,
21
+ version: T.nilable(String),
22
+ requirements: T::Array[Dependabot::DependencyRequirement]
23
+ }
24
+ end
25
+
18
26
  sig { override.returns(T::Array[Dependabot::Dependency]) }
19
27
  def parse
20
28
  dependencies = T.let([], T::Array[Dependabot::Dependency])
@@ -99,13 +107,13 @@ module Dependabot
99
107
  parsed_dep = parse_conda_dependency_string(dep, file)
100
108
  next unless parsed_dep
101
109
 
102
- name = T.cast(parsed_dep[:name], String)
110
+ name = parsed_dep[:name]
103
111
  next if name == "pip"
104
112
 
105
113
  parsed_dependencies << create_dependency(
106
114
  name: name,
107
- version: T.cast(parsed_dep[:version], T.nilable(String)),
108
- requirements: T.cast(parsed_dep[:requirements], T::Array[T::Hash[Symbol, T.anything]]),
115
+ version: parsed_dep[:version],
116
+ requirements: parsed_dep[:requirements],
109
117
  package_manager: "conda"
110
118
  )
111
119
  end
@@ -137,9 +145,9 @@ module Dependabot
137
145
  next unless parsed_dep
138
146
 
139
147
  parsed_dependencies << create_dependency(
140
- name: T.cast(parsed_dep[:name], String),
141
- version: T.cast(parsed_dep[:version], T.nilable(String)),
142
- requirements: T.cast(parsed_dep[:requirements], T::Array[T::Hash[Symbol, T.anything]]),
148
+ name: parsed_dep[:name],
149
+ version: parsed_dep[:version],
150
+ requirements: parsed_dep[:requirements],
143
151
  package_manager: "pip"
144
152
  )
145
153
  end
@@ -147,9 +155,7 @@ module Dependabot
147
155
  parsed_dependencies
148
156
  end
149
157
 
150
- sig do
151
- params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.anything]))
152
- end
158
+ sig { params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(ParsedDependency)) }
153
159
  def parse_conda_dependency_string(dep_string, file)
154
160
  return nil if dep_string.nil?
155
161
 
@@ -168,7 +174,7 @@ module Dependabot
168
174
  match = normalized_dep_string.match(/^([a-zA-Z0-9_.-]+)(?:\s*(.+))?$/)
169
175
  return nil unless match
170
176
 
171
- name = match[1]
177
+ name = T.must(match[1])
172
178
  constraint = match[2]&.strip
173
179
 
174
180
  version = extract_conda_version(constraint)
@@ -221,27 +227,25 @@ module Dependabot
221
227
  constraint: T.nilable(String),
222
228
  file: Dependabot::DependencyFile,
223
229
  channel: T.nilable(String)
224
- ).returns(T::Array[T::Hash[Symbol, T.anything]])
230
+ ).returns(T::Array[Dependabot::DependencyRequirement])
225
231
  end
226
232
  def build_conda_requirements(constraint, file, channel = nil)
227
233
  source = channel ? { channel: channel } : nil
228
234
 
229
- [{
235
+ [Dependabot::DependencyRequirement.create(
230
236
  requirement: constraint && !constraint.empty? ? constraint : nil,
231
237
  file: file.name,
232
238
  source: source,
233
239
  groups: ["dependencies"]
234
- }]
240
+ )]
235
241
  end
236
242
 
237
- sig do
238
- params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.anything]))
239
- end
243
+ sig { params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(ParsedDependency)) }
240
244
  def parse_pip_dependency_string(dep_string, file)
241
245
  match = dep_string.match(/^([a-zA-Z0-9_.-]+)(?:\s*(==|>=|>|<=|<|!=|~=)\s*([0-9][a-zA-Z0-9._+-]*))?$/)
242
246
  return nil unless match
243
247
 
244
- name = match[1]
248
+ name = T.must(match[1])
245
249
  operator = match[2]
246
250
  version = match[3]
247
251
 
@@ -259,16 +263,15 @@ module Dependabot
259
263
  end
260
264
  end
261
265
 
262
- requirements = if operator && version
263
- [{
264
- requirement: "#{operator}#{version}",
265
- file: file.name,
266
- source: nil,
267
- groups: ["pip"]
268
- }]
269
- else
270
- []
271
- end
266
+ requirements = T.let([], T::Array[Dependabot::DependencyRequirement])
267
+ if operator && version
268
+ requirements << Dependabot::DependencyRequirement.create(
269
+ requirement: "#{operator}#{version}",
270
+ file: file.name,
271
+ source: nil,
272
+ groups: ["pip"]
273
+ )
274
+ end
272
275
 
273
276
  {
274
277
  name: name,
@@ -281,7 +284,7 @@ module Dependabot
281
284
  params(
282
285
  name: String,
283
286
  version: T.nilable(String),
284
- requirements: T::Array[T::Hash[Symbol, T.anything]],
287
+ requirements: T::Array[Dependabot::DependencyRequirement],
285
288
  package_manager: String
286
289
  ).returns(Dependabot::Dependency)
287
290
  end
@@ -231,9 +231,7 @@ module Dependabot
231
231
  def get_requirement_for_dependency(dependency, context)
232
232
  # Look for a requirement in the dependency's requirements array
233
233
  requirements = dependency.requirements
234
- requirement = nil
235
-
236
- requirement = requirements.first&.dig(:requirement) unless requirements.empty?
234
+ requirement = requirements.first&.requirement_string unless requirements.empty?
237
235
 
238
236
  return requirement if requirement && !requirement.empty?
239
237
 
@@ -29,7 +29,7 @@ module Dependabot
29
29
 
30
30
  sig { returns(T::Boolean) }
31
31
  def pip_dependency?
32
- dependency.requirements.any? { |req| req[:groups]&.include?("pip") }
32
+ dependency.requirements.any? { |req| req.groups&.include?("pip") }
33
33
  end
34
34
 
35
35
  sig { returns(Dependabot::Python::MetadataFinder) }
@@ -61,7 +61,7 @@ module Dependabot
61
61
 
62
62
  sig { returns(T::Boolean) }
63
63
  def pip_dependency?
64
- dependency.requirements.any? { |req| req[:groups]&.include?("pip") }
64
+ dependency.requirements.any? { |req| req.groups&.include?("pip") }
65
65
  end
66
66
 
67
67
  sig { returns(T.nilable(Dependabot::Package::PackageDetails)) }
@@ -115,13 +115,11 @@ module Dependabot
115
115
 
116
116
  sig { returns(T.nilable(String)) }
117
117
  def extract_channel_from_source
118
- return nil unless dependency.requirements.first
118
+ requirement = dependency.requirements.first
119
+ return nil unless requirement
119
120
 
120
- source = T.let(T.must(dependency.requirements.first)[:source], T.nilable(T::Hash[Symbol, Object]))
121
- return nil unless source
122
-
123
- channel = source[:channel]
124
- return nil unless channel.is_a?(String)
121
+ channel = requirement.source_string("channel")
122
+ return nil unless channel
125
123
  return nil unless CondaRegistryClient::SUPPORTED_CHANNELS.include?(channel)
126
124
 
127
125
  channel
@@ -130,7 +128,7 @@ module Dependabot
130
128
  sig { returns(T.nilable(String)) }
131
129
  def extract_channel_from_requirement
132
130
  dependency.requirements.each do |req|
133
- requirement_string = req[:requirement]
131
+ requirement_string = req.requirement_string
134
132
  next unless requirement_string&.include?("::")
135
133
 
136
134
  channel = requirement_string.split("::").first
@@ -185,11 +183,11 @@ module Dependabot
185
183
  )
186
184
  end
187
185
 
188
- sig { returns(T::Array[T::Hash[Symbol, T.anything]]) }
186
+ sig { returns(T::Array[Dependabot::DependencyRequirement]) }
189
187
  def python_compatible_requirements
190
188
  dependency.requirements.map do |req|
191
- req.merge(
192
- requirement: convert_conda_requirement_to_pip(req[:requirement])
189
+ Dependabot::DependencyRequirement.create(
190
+ req.merge(requirement: convert_conda_requirement_to_pip(req.requirement_string))
193
191
  )
194
192
  end
195
193
  end
@@ -72,10 +72,11 @@ module Dependabot
72
72
 
73
73
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
74
74
  def update_requirement(req)
75
- return req unless req[:requirement]
76
- return req if ["", "*"].include?(req[:requirement])
75
+ requirement = req.requirement_string
76
+ return req unless requirement
77
+ return req if ["", "*"].include?(requirement)
77
78
 
78
- requirement_strings = req[:requirement].split(",").map(&:strip)
79
+ requirement_strings = requirement.split(",").map(&:strip)
79
80
  new_req = calculate_updated_requirement(req, requirement_strings)
80
81
 
81
82
  Dependabot::DependencyRequirement.create(
@@ -121,7 +122,7 @@ module Dependabot
121
122
  # For BumpVersions strategy, always update to the new version
122
123
  if update_strategy == RequirementsUpdateStrategy::BumpVersionsIfNecessary &&
123
124
  new_version_satisfies?(req)
124
- return req[:requirement]
125
+ return T.must(req.requirement)
125
126
  end
126
127
 
127
128
  update_requirements_range(requirement_strings)
@@ -133,10 +134,10 @@ module Dependabot
133
134
  # For BumpVersions strategy, always update to the new version
134
135
  if update_strategy == RequirementsUpdateStrategy::BumpVersionsIfNecessary &&
135
136
  new_version_satisfies?(req)
136
- return req[:requirement]
137
+ return T.must(req.requirement)
137
138
  end
138
139
 
139
- bump_version_string(req[:requirement], T.must(latest_resolvable_version).to_s)
140
+ bump_version_string(T.must(req.requirement_string), T.must(latest_resolvable_version).to_s)
140
141
  end
141
142
 
142
143
  sig do
@@ -174,21 +175,23 @@ module Dependabot
174
175
 
175
176
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
176
177
  def widen_requirement(req)
177
- return req unless req[:requirement]
178
- return req if ["", "*"].include?(req[:requirement])
178
+ requirement = req.requirement_string
179
+ return req unless requirement
180
+ return req if ["", "*"].include?(requirement)
179
181
 
180
182
  # For WidenRanges, always widen to ensure proper upper bounds
181
183
  # Don't return early even if version satisfies - we want to add/update bounds
182
- new_requirement = widen_requirement_string(req[:requirement])
184
+ new_requirement = widen_requirement_string(requirement)
183
185
  Dependabot::DependencyRequirement.create(req.merge(requirement: new_requirement))
184
186
  end
185
187
 
186
188
  sig { params(req: Dependabot::DependencyRequirement).returns(T::Boolean) }
187
189
  def new_version_satisfies?(req)
188
- return false unless req[:requirement]
190
+ requirement = req.requirement_string
191
+ return false unless requirement
189
192
 
190
193
  Conda::Requirement
191
- .requirements_array(req[:requirement])
194
+ .requirements_array(requirement)
192
195
  .all? { |r| r.satisfied_by?(T.must(latest_resolvable_version)) }
193
196
  end
194
197
 
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "sorbet-runtime"
@@ -50,7 +50,7 @@ module Dependabot
50
50
 
51
51
  sig { override.returns(T.nilable(T.any(String, Dependabot::Version))) }
52
52
  def latest_version
53
- return nil if dependency.requirements.all? { |req| req[:requirement].nil? || req[:requirement] == "*" }
53
+ return nil if dependency.requirements.all? { |req| req.requirement.nil? || req.requirement == "*" }
54
54
 
55
55
  @latest_version ||= fetch_latest_version
56
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-conda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.391.0
4
+ version: 0.392.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.391.0
18
+ version: 0.392.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.391.0
25
+ version: 0.392.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: dependabot-python
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - '='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.391.0
32
+ version: 0.392.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.391.0
39
+ version: 0.392.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: debug
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -274,7 +274,7 @@ licenses:
274
274
  - MIT
275
275
  metadata:
276
276
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
277
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.391.0
277
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.392.0
278
278
  rdoc_options: []
279
279
  require_paths:
280
280
  - lib