dependabot-uv 0.299.1

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.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/helpers/build +34 -0
  3. data/helpers/lib/__init__.py +0 -0
  4. data/helpers/lib/hasher.py +36 -0
  5. data/helpers/lib/parser.py +270 -0
  6. data/helpers/requirements.txt +13 -0
  7. data/helpers/run.py +22 -0
  8. data/lib/dependabot/uv/authed_url_builder.rb +31 -0
  9. data/lib/dependabot/uv/file_fetcher.rb +328 -0
  10. data/lib/dependabot/uv/file_parser/pipfile_files_parser.rb +192 -0
  11. data/lib/dependabot/uv/file_parser/pyproject_files_parser.rb +345 -0
  12. data/lib/dependabot/uv/file_parser/python_requirement_parser.rb +185 -0
  13. data/lib/dependabot/uv/file_parser/setup_file_parser.rb +193 -0
  14. data/lib/dependabot/uv/file_parser.rb +437 -0
  15. data/lib/dependabot/uv/file_updater/compile_file_updater.rb +576 -0
  16. data/lib/dependabot/uv/file_updater/pyproject_preparer.rb +124 -0
  17. data/lib/dependabot/uv/file_updater/requirement_file_updater.rb +73 -0
  18. data/lib/dependabot/uv/file_updater/requirement_replacer.rb +214 -0
  19. data/lib/dependabot/uv/file_updater.rb +105 -0
  20. data/lib/dependabot/uv/language.rb +76 -0
  21. data/lib/dependabot/uv/language_version_manager.rb +114 -0
  22. data/lib/dependabot/uv/metadata_finder.rb +186 -0
  23. data/lib/dependabot/uv/name_normaliser.rb +26 -0
  24. data/lib/dependabot/uv/native_helpers.rb +38 -0
  25. data/lib/dependabot/uv/package_manager.rb +54 -0
  26. data/lib/dependabot/uv/pip_compile_file_matcher.rb +38 -0
  27. data/lib/dependabot/uv/pipenv_runner.rb +108 -0
  28. data/lib/dependabot/uv/requirement.rb +163 -0
  29. data/lib/dependabot/uv/requirement_parser.rb +60 -0
  30. data/lib/dependabot/uv/update_checker/index_finder.rb +227 -0
  31. data/lib/dependabot/uv/update_checker/latest_version_finder.rb +297 -0
  32. data/lib/dependabot/uv/update_checker/pip_compile_version_resolver.rb +506 -0
  33. data/lib/dependabot/uv/update_checker/pip_version_resolver.rb +73 -0
  34. data/lib/dependabot/uv/update_checker/requirements_updater.rb +391 -0
  35. data/lib/dependabot/uv/update_checker.rb +317 -0
  36. data/lib/dependabot/uv/version.rb +321 -0
  37. data/lib/dependabot/uv.rb +35 -0
  38. metadata +306 -0
@@ -0,0 +1,321 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "dependabot/version"
5
+ require "dependabot/utils"
6
+
7
+ # See https://packaging.python.org/en/latest/specifications/version-specifiers for spec details.
8
+
9
+ module Dependabot
10
+ module Uv
11
+ class Version < Dependabot::Version
12
+ sig { returns(Integer) }
13
+ attr_reader :epoch
14
+
15
+ sig { returns(T::Array[Integer]) }
16
+ attr_reader :release_segment
17
+
18
+ sig { returns(T.nilable(T::Array[T.any(String, Integer)])) }
19
+ attr_reader :dev
20
+
21
+ sig { returns(T.nilable(T::Array[T.any(String, Integer)])) }
22
+ attr_reader :pre
23
+
24
+ sig { returns(T.nilable(T::Array[T.any(String, Integer)])) }
25
+ attr_reader :post
26
+
27
+ sig { returns(T.nilable(T::Array[T.any(String, Integer)])) }
28
+ attr_reader :local
29
+
30
+ INFINITY = 1000
31
+ NEGATIVE_INFINITY = -INFINITY
32
+
33
+ # See https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
34
+ VERSION_PATTERN = /
35
+ v?
36
+ (?:
37
+ (?:(?<epoch>[0-9]+)!)? # epoch
38
+ (?<release>[0-9]+(?:\.[0-9]+)*) # release
39
+ (?<pre> # prerelease
40
+ [-_\.]?
41
+ (?<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
42
+ [-_\.]?
43
+ (?<pre_n>[0-9]+)?
44
+ )?
45
+ (?<post> # post release
46
+ (?:-(?<post_n1>[0-9]+))
47
+ |
48
+ (?:
49
+ [-_\.]?
50
+ (?<post_l>post|rev|r)
51
+ [-_\.]?
52
+ (?<post_n2>[0-9]+)?
53
+ )
54
+ )?
55
+ (?<dev> # dev release
56
+ [-_\.]?
57
+ (?<dev_l>dev)
58
+ [-_\.]?
59
+ (?<dev_n>[0-9]+)?
60
+ )?
61
+ )
62
+ (?:\+(?<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
63
+ /ix
64
+
65
+ ANCHORED_VERSION_PATTERN = /\A\s*#{VERSION_PATTERN}\s*\z/
66
+
67
+ sig { override.params(version: VersionParameter).returns(T::Boolean) }
68
+ def self.correct?(version)
69
+ return false if version.nil?
70
+
71
+ version.to_s.match?(ANCHORED_VERSION_PATTERN)
72
+ end
73
+
74
+ sig { override.params(version: VersionParameter).void }
75
+ def initialize(version)
76
+ raise Dependabot::BadRequirementError, "Malformed version string - string is nil" if version.nil?
77
+
78
+ @version_string = version.to_s
79
+
80
+ raise Dependabot::BadRequirementError, "Malformed version string - string is empty" if @version_string.empty?
81
+
82
+ matches = ANCHORED_VERSION_PATTERN.match(@version_string.downcase)
83
+
84
+ unless matches
85
+ raise Dependabot::BadRequirementError,
86
+ "Malformed version string - #{@version_string} does not match regex"
87
+ end
88
+
89
+ @epoch = matches["epoch"].to_i
90
+ @release_segment = matches["release"]&.split(".")&.map(&:to_i) || []
91
+ @pre = parse_letter_version(matches["pre_l"], matches["pre_n"])
92
+ @post = parse_letter_version(matches["post_l"], matches["post_n1"] || matches["post_n2"])
93
+ @dev = parse_letter_version(matches["dev_l"], matches["dev_n"])
94
+ @local = parse_local_version(matches["local"])
95
+ super(matches["release"] || "")
96
+ end
97
+
98
+ sig { override.params(version: VersionParameter).returns(Dependabot::Uv::Version) }
99
+ def self.new(version)
100
+ T.cast(super, Dependabot::Uv::Version)
101
+ end
102
+
103
+ sig { returns(String) }
104
+ def to_s
105
+ @version_string
106
+ end
107
+
108
+ sig { returns(String) }
109
+ def inspect # :nodoc:
110
+ "#<#{self.class} #{@version_string}>"
111
+ end
112
+
113
+ sig { returns(T::Boolean) }
114
+ def prerelease?
115
+ !!(pre || dev)
116
+ end
117
+
118
+ sig { returns(Dependabot::Uv::Version) }
119
+ def release
120
+ Dependabot::Uv::Version.new(release_segment.join("."))
121
+ end
122
+
123
+ sig { params(other: VersionParameter).returns(Integer) }
124
+ def <=>(other)
125
+ other = Dependabot::Uv::Version.new(other.to_s) unless other.is_a?(Dependabot::Uv::Version)
126
+ other = T.cast(other, Dependabot::Uv::Version)
127
+
128
+ epoch_comparison = epoch <=> other.epoch
129
+ return epoch_comparison unless epoch_comparison.zero?
130
+
131
+ release_comparison = release_version_comparison(other)
132
+ return release_comparison unless release_comparison.zero?
133
+
134
+ pre_comparison = compare_keys(pre_cmp_key, other.pre_cmp_key)
135
+ return pre_comparison unless pre_comparison.zero?
136
+
137
+ post_comparison = compare_keys(post_cmp_key, other.post_cmp_key)
138
+ return post_comparison unless post_comparison.zero?
139
+
140
+ dev_comparison = compare_keys(dev_cmp_key, other.dev_cmp_key)
141
+ return dev_comparison unless dev_comparison.zero?
142
+
143
+ compare_keys(local_cmp_key, other.local_cmp_key)
144
+ end
145
+
146
+ sig do
147
+ params(
148
+ key: T.any(Integer, T::Array[T.any(String, Integer)]),
149
+ other_key: T.any(Integer, T::Array[T.any(String, Integer)])
150
+ ).returns(Integer)
151
+ end
152
+ def compare_keys(key, other_key)
153
+ if key.is_a?(Integer) && other_key.is_a?(Integer)
154
+ key <=> other_key
155
+ elsif key.is_a?(Array) && other_key.is_a?(Array)
156
+ key <=> other_key
157
+ elsif key.is_a?(Integer)
158
+ key == NEGATIVE_INFINITY ? -1 : 1
159
+ elsif other_key.is_a?(Integer)
160
+ other_key == NEGATIVE_INFINITY ? 1 : -1
161
+ end
162
+ end
163
+
164
+ sig { returns(T.any(Integer, T::Array[T.any(String, Integer)])) }
165
+ def pre_cmp_key
166
+ if pre.nil? && post.nil? && dev # sort 1.0.dev0 before 1.0a0
167
+ NEGATIVE_INFINITY
168
+ elsif pre.nil?
169
+ INFINITY # versions without a pre-release should sort after those with one.
170
+ else
171
+ T.must(pre)
172
+ end
173
+ end
174
+
175
+ sig { returns(T.any(Integer, T::Array[T.any(String, Integer)])) }
176
+ def local_cmp_key
177
+ if local.nil?
178
+ # Versions without a local segment should sort before those with one.
179
+ NEGATIVE_INFINITY
180
+ else
181
+ # According to PEP440.
182
+ # - Alphanumeric segments sort before numeric segments
183
+ # - Alphanumeric segments sort lexicographically
184
+ # - Numeric segments sort numerically
185
+ # - Shorter versions sort before longer versions when the prefixes match exactly
186
+ local&.map do |token|
187
+ if token.is_a?(Integer)
188
+ [token, ""]
189
+ else
190
+ [NEGATIVE_INFINITY, token]
191
+ end
192
+ end
193
+ end
194
+ end
195
+
196
+ sig { returns(T.any(Integer, T::Array[T.any(String, Integer)])) }
197
+ def post_cmp_key
198
+ # Versions without a post segment should sort before those with one.
199
+ return NEGATIVE_INFINITY if post.nil?
200
+
201
+ T.must(post)
202
+ end
203
+
204
+ sig { returns(T.any(Integer, T::Array[T.any(String, Integer)])) }
205
+ def dev_cmp_key
206
+ # Versions without a dev segment should sort after those with one.
207
+ return INFINITY if dev.nil?
208
+
209
+ T.must(dev)
210
+ end
211
+
212
+ sig { returns(String) }
213
+ def lowest_prerelease_suffix
214
+ "dev0"
215
+ end
216
+
217
+ sig { override.returns(T::Array[String]) }
218
+ def ignored_patch_versions
219
+ parts = release_segment # e.g [1,2,3] if version is 1.2.3-alpha3
220
+ version_parts = parts.fill(0, parts.length...2)
221
+ upper_parts = version_parts.first(1) + [version_parts[1].to_i + 1] + [lowest_prerelease_suffix]
222
+ lower_bound = "> #{self}"
223
+ upper_bound = "< #{upper_parts.join('.')}"
224
+
225
+ ["#{lower_bound}, #{upper_bound}"]
226
+ end
227
+
228
+ sig { override.returns(T::Array[String]) }
229
+ def ignored_minor_versions
230
+ parts = release_segment # e.g [1,2,3] if version is 1.2.3-alpha3
231
+ version_parts = parts.fill(0, parts.length...2)
232
+ lower_parts = version_parts.first(1) + [version_parts[1].to_i + 1] + [lowest_prerelease_suffix]
233
+ upper_parts = version_parts.first(0) + [version_parts[0].to_i + 1] + [lowest_prerelease_suffix]
234
+ lower_bound = ">= #{lower_parts.join('.')}"
235
+ upper_bound = "< #{upper_parts.join('.')}"
236
+
237
+ ["#{lower_bound}, #{upper_bound}"]
238
+ end
239
+
240
+ sig { override.returns(T::Array[String]) }
241
+ def ignored_major_versions
242
+ version_parts = release_segment # e.g [1,2,3] if version is 1.2.3-alpha3
243
+ lower_parts = [version_parts[0].to_i + 1] + [lowest_prerelease_suffix] # earliest next major version prerelease
244
+ lower_bound = ">= #{lower_parts.join('.')}"
245
+
246
+ [lower_bound]
247
+ end
248
+
249
+ private
250
+
251
+ sig { params(other: Dependabot::Uv::Version).returns(Integer) }
252
+ def release_version_comparison(other)
253
+ tokens, other_tokens = pad_for_comparison(release_segment, other.release_segment)
254
+ tokens <=> other_tokens
255
+ end
256
+
257
+ sig do
258
+ params(
259
+ tokens: T::Array[Integer],
260
+ other_tokens: T::Array[Integer]
261
+ ).returns(T::Array[T::Array[Integer]])
262
+ end
263
+ def pad_for_comparison(tokens, other_tokens)
264
+ tokens = tokens.dup
265
+ other_tokens = other_tokens.dup
266
+
267
+ longer = [tokens, other_tokens].max_by(&:count)
268
+ shorter = [tokens, other_tokens].min_by(&:count)
269
+
270
+ difference = T.must(longer).length - T.must(shorter).length
271
+
272
+ difference.times { T.must(shorter) << 0 }
273
+
274
+ [tokens, other_tokens]
275
+ end
276
+
277
+ sig { params(local: T.nilable(String)).returns(T.nilable(T::Array[T.any(String, Integer)])) }
278
+ def parse_local_version(local)
279
+ return if local.nil?
280
+
281
+ # Takes a string like abc.1.twelve and turns it into ["abc", 1, "twelve"]
282
+ local.split(/[\._-]/).map { |s| /^\d+$/.match?(s) ? s.to_i : s }
283
+ end
284
+
285
+ sig do
286
+ params(
287
+ letter: T.nilable(String), number: T.nilable(String)
288
+ ).returns(T.nilable(T::Array[T.any(String, Integer)]))
289
+ end
290
+ def parse_letter_version(letter = nil, number = nil)
291
+ return if letter.nil? && number.nil?
292
+
293
+ if letter
294
+ # Implicit 0 for cases where prerelease has no numeral
295
+ number ||= 0
296
+
297
+ # Normalize alternate spellings
298
+ if letter == "alpha"
299
+ letter = "a"
300
+ elsif letter == "beta"
301
+ letter = "b"
302
+ elsif %w(c pre preview).include? letter
303
+ letter = "rc"
304
+ elsif %w(rev r).include? letter
305
+ letter = "post"
306
+ end
307
+
308
+ return letter, number.to_i
309
+ end
310
+
311
+ # Number but no letter i.e. implicit post release syntax (e.g. 1.0-1)
312
+ letter = "post"
313
+
314
+ [letter, number.to_i]
315
+ end
316
+ end
317
+ end
318
+ end
319
+
320
+ Dependabot::Utils
321
+ .register_version_class("uv", Dependabot::Uv::Version)
@@ -0,0 +1,35 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # These all need to be required so the various classes can be registered in a
5
+ # lookup table of package manager names to concrete classes.
6
+ require "dependabot/uv/file_fetcher"
7
+ require "dependabot/uv/file_parser"
8
+ require "dependabot/uv/update_checker"
9
+ require "dependabot/uv/file_updater"
10
+ require "dependabot/uv/metadata_finder"
11
+ require "dependabot/uv/requirement"
12
+ require "dependabot/uv/version"
13
+ require "dependabot/uv/name_normaliser"
14
+
15
+ require "dependabot/pull_request_creator/labeler"
16
+ Dependabot::PullRequestCreator::Labeler
17
+ .register_label_details("uv", name: "python:uv", colour: "2b67c6")
18
+
19
+ require "dependabot/dependency"
20
+ Dependabot::Dependency.register_production_check(
21
+ "uv",
22
+ lambda do |groups|
23
+ return true if groups.empty?
24
+ return true if groups.include?("default")
25
+ return true if groups.include?("install_requires")
26
+
27
+ groups.include?("dependencies")
28
+ end
29
+ )
30
+
31
+ # See https://www.python.org/dev/peps/pep-0503/#normalized-names
32
+ Dependabot::Dependency.register_name_normaliser(
33
+ "uv",
34
+ ->(name) { Dependabot::Uv::NameNormaliser.normalise(name) }
35
+ )
metadata ADDED
@@ -0,0 +1,306 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dependabot-uv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.299.1
5
+ platform: ruby
6
+ authors:
7
+ - Dependabot
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dependabot-common
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.299.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.299.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: debug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: gpgme
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.12'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.12'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-its
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-sorbet
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.9.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.9.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.67.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.67.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-performance
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 1.22.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 1.22.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 2.29.1
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 2.29.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-sorbet
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.8.5
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.8.5
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
181
+ - !ruby/object:Gem::Dependency
182
+ name: turbo_tests
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 2.2.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.2.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: vcr
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '6.1'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '6.1'
209
+ - !ruby/object:Gem::Dependency
210
+ name: webmock
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '3.18'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '3.18'
223
+ - !ruby/object:Gem::Dependency
224
+ name: webrick
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '1.7'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '1.7'
237
+ description: Dependabot-uv provides support for bumping Python packages via Dependabot.
238
+ If you want support for multiple package managers, you probably want the meta-gem
239
+ dependabot-omnibus.
240
+ email: opensource@github.com
241
+ executables: []
242
+ extensions: []
243
+ extra_rdoc_files: []
244
+ files:
245
+ - helpers/build
246
+ - helpers/lib/__init__.py
247
+ - helpers/lib/hasher.py
248
+ - helpers/lib/parser.py
249
+ - helpers/requirements.txt
250
+ - helpers/run.py
251
+ - lib/dependabot/uv.rb
252
+ - lib/dependabot/uv/authed_url_builder.rb
253
+ - lib/dependabot/uv/file_fetcher.rb
254
+ - lib/dependabot/uv/file_parser.rb
255
+ - lib/dependabot/uv/file_parser/pipfile_files_parser.rb
256
+ - lib/dependabot/uv/file_parser/pyproject_files_parser.rb
257
+ - lib/dependabot/uv/file_parser/python_requirement_parser.rb
258
+ - lib/dependabot/uv/file_parser/setup_file_parser.rb
259
+ - lib/dependabot/uv/file_updater.rb
260
+ - lib/dependabot/uv/file_updater/compile_file_updater.rb
261
+ - lib/dependabot/uv/file_updater/pyproject_preparer.rb
262
+ - lib/dependabot/uv/file_updater/requirement_file_updater.rb
263
+ - lib/dependabot/uv/file_updater/requirement_replacer.rb
264
+ - lib/dependabot/uv/language.rb
265
+ - lib/dependabot/uv/language_version_manager.rb
266
+ - lib/dependabot/uv/metadata_finder.rb
267
+ - lib/dependabot/uv/name_normaliser.rb
268
+ - lib/dependabot/uv/native_helpers.rb
269
+ - lib/dependabot/uv/package_manager.rb
270
+ - lib/dependabot/uv/pip_compile_file_matcher.rb
271
+ - lib/dependabot/uv/pipenv_runner.rb
272
+ - lib/dependabot/uv/requirement.rb
273
+ - lib/dependabot/uv/requirement_parser.rb
274
+ - lib/dependabot/uv/update_checker.rb
275
+ - lib/dependabot/uv/update_checker/index_finder.rb
276
+ - lib/dependabot/uv/update_checker/latest_version_finder.rb
277
+ - lib/dependabot/uv/update_checker/pip_compile_version_resolver.rb
278
+ - lib/dependabot/uv/update_checker/pip_version_resolver.rb
279
+ - lib/dependabot/uv/update_checker/requirements_updater.rb
280
+ - lib/dependabot/uv/version.rb
281
+ homepage: https://github.com/dependabot/dependabot-core
282
+ licenses:
283
+ - MIT
284
+ metadata:
285
+ bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
286
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.299.1
287
+ post_install_message:
288
+ rdoc_options: []
289
+ require_paths:
290
+ - lib
291
+ required_ruby_version: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - ">="
294
+ - !ruby/object:Gem::Version
295
+ version: 3.1.0
296
+ required_rubygems_version: !ruby/object:Gem::Requirement
297
+ requirements:
298
+ - - ">="
299
+ - !ruby/object:Gem::Version
300
+ version: 3.1.0
301
+ requirements: []
302
+ rubygems_version: 3.5.22
303
+ signing_key:
304
+ specification_version: 4
305
+ summary: Provides Dependabot support for Python uv
306
+ test_files: []