dependabot-python 0.111.27 → 0.111.28

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e240917970cfdb0ebd6d48acaa79c18d613baf1f138ca6207d101910c9810069
4
- data.tar.gz: 13be53930a68a1dad68ef8bad2e6485e2ce5acd2a60871b2a8d76a12db39d33e
3
+ metadata.gz: 9d8b6adc1f2d136a92dbf6980f1fb0e2402ee04d8671e067c017fdef952b727d
4
+ data.tar.gz: c05e90c49c095f40c32950ce894cf8131fea9e11708b228c455a5b6eed8fd859
5
5
  SHA512:
6
- metadata.gz: 15399689e9e8baca73f44699537e5944eb111b2b78761fe0bd122216e2a31cb882c67380371f6e703c91eae962b9bfc8cd37aa320b155df37eab8847ecf47524
7
- data.tar.gz: 8208b476b422d9a0f6be76c2c5b48fde1f6b61455cfa91f3c5930aff3fe8eb3ea88056a2e11cbf01368ce9ac594847ccb57ca0f4265759ec326518e172f34f49
6
+ metadata.gz: de00b1055f33feda4ff3f6bba2a4111f0eb1d2003dc3c058a242ac66a9cc945706ca3f4bcdbb2b6e7c180086aed3602758cef322fae5a7023551399411eb749f
7
+ data.tar.gz: c83b4e3756d6817cb03dfa01cd8e1aeaa3933eed558136e206725101f9aa5682776b91fe244a99879963cd568f3aee2cf52760234b61cde71d19b0a27de83ae6
@@ -1,5 +1,5 @@
1
- pip==19.1.1
2
- pip-tools==3.9.0
1
+ pip==19.2.1
2
+ pip-tools==4.0.0
3
3
  hashin==0.14.5
4
4
  pipenv==2018.11.26
5
5
  pipfile==0.0.2
@@ -9,6 +9,7 @@ require "dependabot/python/file_updater"
9
9
  require "dependabot/python/metadata_finder"
10
10
  require "dependabot/python/requirement"
11
11
  require "dependabot/python/version"
12
+ require "dependabot/python/name_normaliser"
12
13
 
13
14
  require "dependabot/pull_request_creator/labeler"
14
15
  Dependabot::PullRequestCreator::Labeler.
@@ -29,5 +30,5 @@ Dependabot::Dependency.register_production_check(
29
30
  # See https://www.python.org/dev/peps/pep-0503/#normalized-names
30
31
  Dependabot::Dependency.register_name_normaliser(
31
32
  "pip",
32
- ->(name) { name.downcase.gsub(/[-_.]+/, "-") }
33
+ ->(name) { NameNormaliser.normalise(name) }
33
34
  )
@@ -9,6 +9,7 @@ require "dependabot/shared_helpers"
9
9
  require "dependabot/python/requirement"
10
10
  require "dependabot/errors"
11
11
  require "dependabot/python/native_helpers"
12
+ require "dependabot/python/name_normaliser"
12
13
 
13
14
  module Dependabot
14
15
  module Python
@@ -137,6 +138,9 @@ module Dependabot
137
138
  return false unless pip_compile_files.any?
138
139
  return false unless filename.end_with?(".txt")
139
140
 
141
+ file = dependency_files.find { |f| f.name == filename }
142
+ return true if file&.content&.match?(output_file_regex(filename))
143
+
140
144
  basename = filename.gsub(/\.txt$/, "")
141
145
  pip_compile_files.any? { |f| f.name == basename + ".in" }
142
146
  end
@@ -181,9 +185,8 @@ module Dependabot
181
185
  end
182
186
  end
183
187
 
184
- # See https://www.python.org/dev/peps/pep-0503/#normalized-names
185
188
  def normalised_name(name)
186
- Dependency.name_normaliser_for_package_manager("pip").call(name)
189
+ NameNormaliser.normalise(name)
187
190
  end
188
191
 
189
192
  def check_required_files
@@ -213,6 +216,10 @@ module Dependabot
213
216
  raise Dependabot::DependencyFileNotParseable, pyproject.path
214
217
  end
215
218
 
219
+ def output_file_regex(filename)
220
+ "--output-file[=\s]+#{Regexp.escape(filename)}(?:\s|$)"
221
+ end
222
+
216
223
  def pyproject
217
224
  @pyproject ||= get_original_file("pyproject.toml")
218
225
  end
@@ -237,5 +244,4 @@ module Dependabot
237
244
  end
238
245
  end
239
246
 
240
- Dependabot::FileParsers.
241
- register("pip", Dependabot::Python::FileParser)
247
+ Dependabot::FileParsers.register("pip", Dependabot::Python::FileParser)
@@ -6,6 +6,7 @@ require "dependabot/dependency"
6
6
  require "dependabot/file_parsers/base/dependency_set"
7
7
  require "dependabot/python/file_parser"
8
8
  require "dependabot/errors"
9
+ require "dependabot/python/name_normaliser"
9
10
 
10
11
  module Dependabot
11
12
  module Python
@@ -134,7 +135,7 @@ module Dependabot
134
135
  end
135
136
 
136
137
  def normalised_name(name)
137
- Dependency.name_normaliser_for_package_manager("pip").call(name)
138
+ NameNormaliser.normalise(name)
138
139
  end
139
140
 
140
141
  def parsed_pipfile
@@ -7,6 +7,7 @@ require "dependabot/file_parsers/base/dependency_set"
7
7
  require "dependabot/python/file_parser"
8
8
  require "dependabot/python/requirement"
9
9
  require "dependabot/errors"
10
+ require "dependabot/python/name_normaliser"
10
11
 
11
12
  module Dependabot
12
13
  module Python
@@ -98,7 +99,7 @@ module Dependabot
98
99
  end
99
100
 
100
101
  def normalise(name)
101
- Dependency.name_normaliser_for_package_manager("pip").call(name)
102
+ NameNormaliser.normalise(name)
102
103
  end
103
104
 
104
105
  def parsed_pyproject
@@ -6,6 +6,7 @@ require "dependabot/file_parsers/base/dependency_set"
6
6
  require "dependabot/shared_helpers"
7
7
  require "dependabot/python/file_parser"
8
8
  require "dependabot/python/native_helpers"
9
+ require "dependabot/python/name_normaliser"
9
10
 
10
11
  module Dependabot
11
12
  module Python
@@ -164,7 +165,7 @@ module Dependabot
164
165
  end
165
166
 
166
167
  def normalised_name(name)
167
- Dependency.name_normaliser_for_package_manager("pip").call(name)
168
+ NameNormaliser.normalise(name)
168
169
  end
169
170
 
170
171
  def setup_file
@@ -143,5 +143,4 @@ module Dependabot
143
143
  end
144
144
  end
145
145
 
146
- Dependabot::FileUpdaters.
147
- register("pip", Dependabot::Python::FileUpdater)
146
+ Dependabot::FileUpdaters.register("pip", Dependabot::Python::FileUpdater)
@@ -9,6 +9,7 @@ require "dependabot/python/file_updater"
9
9
  require "dependabot/shared_helpers"
10
10
  require "dependabot/python/native_helpers"
11
11
  require "dependabot/python/python_versions"
12
+ require "dependabot/python/name_normaliser"
12
13
 
13
14
  module Dependabot
14
15
  module Python
@@ -203,7 +204,8 @@ module Dependabot
203
204
  def error_suggests_bad_python_version?(message)
204
205
  return true if message.include?("not find a version that satisfies")
205
206
 
206
- message.include?('Command "python setup.py egg_info" failed')
207
+ message.include?('Command "python setup.py egg_info" failed') ||
208
+ message.include?("exit status 1: python setup.py egg_info")
207
209
  end
208
210
 
209
211
  def write_updated_dependency_files
@@ -422,15 +424,13 @@ module Dependabot
422
424
  end
423
425
 
424
426
  def pip_compile_options(filename)
425
- current_requirements_file_name = filename.sub(/\.in$/, ".txt")
427
+ requirements_file = compiled_file_for_filename(filename)
428
+ return "--build-isolation" unless requirements_file
426
429
 
427
- requirements_file =
428
- dependency_files.
429
- find { |f| f.name == current_requirements_file_name }
430
-
431
- return unless requirements_file
432
-
433
- options = ["--build-isolation"]
430
+ options = [
431
+ "--build-isolation",
432
+ "--output-file=#{requirements_file.name}"
433
+ ]
434
434
 
435
435
  if requirements_file.content.include?("--hash=sha")
436
436
  options << "--generate-hashes"
@@ -464,8 +464,7 @@ module Dependabot
464
464
 
465
465
  files_from_compiled_files =
466
466
  pip_compile_files.map(&:name).select do |fn|
467
- compiled_file = dependency_files.
468
- find { |f| f.name == fn.gsub(/\.in$/, ".txt") }
467
+ compiled_file = compiled_file_for_filename(fn)
469
468
  compiled_file_includes_dependency?(compiled_file)
470
469
  end
471
470
 
@@ -474,6 +473,22 @@ module Dependabot
474
473
  order_filenames_for_compilation(filenames)
475
474
  end
476
475
 
476
+ def compiled_file_for_filename(filename)
477
+ compiled_file =
478
+ compiled_files.
479
+ find { |f| f.content.match?(output_file_regex(filename)) }
480
+
481
+ compiled_file ||=
482
+ compiled_files.
483
+ find { |f| f.name == filename.gsub(/\.in$/, ".txt") }
484
+
485
+ compiled_file
486
+ end
487
+
488
+ def output_file_regex(filename)
489
+ "--output-file[=\s]+.*\s#{Regexp.escape(filename)}\s*$"
490
+ end
491
+
477
492
  def compiled_file_includes_dependency?(compiled_file)
478
493
  return false unless compiled_file
479
494
 
@@ -485,7 +500,7 @@ module Dependabot
485
500
  end
486
501
 
487
502
  def normalise(name)
488
- Dependency.name_normaliser_for_package_manager("pip").call(name)
503
+ NameNormaliser.normalise(name)
489
504
  end
490
505
 
491
506
  # If the files we need to update require one another then we need to
@@ -8,6 +8,7 @@ require "dependabot/python/file_parser/python_requirement_parser"
8
8
  require "dependabot/python/file_updater"
9
9
  require "dependabot/shared_helpers"
10
10
  require "dependabot/python/native_helpers"
11
+ require "dependabot/python/name_normaliser"
11
12
 
12
13
  module Dependabot
13
14
  module Python
@@ -290,7 +291,8 @@ module Dependabot
290
291
  def error_suggests_bad_python_version?(message)
291
292
  return true if message.include?("UnsupportedPythonVersion")
292
293
 
293
- message.include?('Command "python setup.py egg_info" failed')
294
+ message.include?('Command "python setup.py egg_info" failed') ||
295
+ message.include?("exit status 1: python setup.py egg_info")
294
296
  end
295
297
 
296
298
  def write_temporary_dependency_files(pipfile_content)
@@ -421,7 +423,7 @@ module Dependabot
421
423
  end
422
424
 
423
425
  def normalise(name)
424
- Dependency.name_normaliser_for_package_manager("pip").call(name)
426
+ NameNormaliser.normalise(name)
425
427
  end
426
428
 
427
429
  def parsed_lockfile
@@ -6,6 +6,7 @@ require "dependabot/dependency"
6
6
  require "dependabot/python/file_parser"
7
7
  require "dependabot/python/file_updater"
8
8
  require "dependabot/python/authed_url_builder"
9
+ require "dependabot/python/name_normaliser"
9
10
 
10
11
  module Dependabot
11
12
  module Python
@@ -104,7 +105,7 @@ module Dependabot
104
105
  end
105
106
 
106
107
  def normalise(name)
107
- Dependency.name_normaliser_for_package_manager("pip").call(name)
108
+ NameNormaliser.normalise(name)
108
109
  end
109
110
 
110
111
  def pipfile_sources
@@ -10,6 +10,7 @@ require "dependabot/python/python_versions"
10
10
  require "dependabot/python/file_parser/python_requirement_parser"
11
11
  require "dependabot/python/file_updater"
12
12
  require "dependabot/python/native_helpers"
13
+ require "dependabot/python/name_normaliser"
13
14
 
14
15
  module Dependabot
15
16
  module Python
@@ -291,7 +292,7 @@ module Dependabot
291
292
  end
292
293
 
293
294
  def normalise(name)
294
- Dependency.name_normaliser_for_package_manager("pip").call(name)
295
+ NameNormaliser.normalise(name)
295
296
  end
296
297
 
297
298
  def pyproject
@@ -6,6 +6,7 @@ require "dependabot/dependency"
6
6
  require "dependabot/python/file_parser"
7
7
  require "dependabot/python/file_updater"
8
8
  require "dependabot/python/authed_url_builder"
9
+ require "dependabot/python/name_normaliser"
9
10
  require "securerandom"
10
11
 
11
12
  module Dependabot
@@ -79,7 +80,7 @@ module Dependabot
79
80
  end
80
81
 
81
82
  def normalise(name)
82
- Dependency.name_normaliser_for_package_manager("pip").call(name)
83
+ NameNormaliser.normalise(name)
83
84
  end
84
85
 
85
86
  def pyproject_sources
@@ -5,6 +5,7 @@ require "dependabot/python/requirement_parser"
5
5
  require "dependabot/python/file_updater"
6
6
  require "dependabot/shared_helpers"
7
7
  require "dependabot/python/native_helpers"
8
+ require "dependabot/python/name_normaliser"
8
9
 
9
10
  module Dependabot
10
11
  module Python
@@ -167,7 +168,7 @@ module Dependabot
167
168
  end
168
169
 
169
170
  def normalise(name)
170
- Dependency.name_normaliser_for_package_manager("pip").call(name)
171
+ NameNormaliser.normalise(name)
171
172
  end
172
173
 
173
174
  def requirements_match(req1, req2)
@@ -173,5 +173,4 @@ module Dependabot
173
173
  end
174
174
  end
175
175
 
176
- Dependabot::MetadataFinders.
177
- register("pip", Dependabot::Python::MetadataFinder)
176
+ Dependabot::MetadataFinders.register("pip", Dependabot::Python::MetadataFinder)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dependabot
4
+ module Python
5
+ module NameNormaliser
6
+ def self.normalise(name)
7
+ name.downcase.gsub(/[-_.]+/, "-")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -10,6 +10,7 @@ require "dependabot/shared_helpers"
10
10
  require "dependabot/errors"
11
11
  require "dependabot/python/requirement"
12
12
  require "dependabot/python/requirement_parser"
13
+ require "dependabot/python/name_normaliser"
13
14
 
14
15
  module Dependabot
15
16
  module Python
@@ -288,7 +289,7 @@ module Dependabot
288
289
  end
289
290
 
290
291
  def normalised_name(name)
291
- Dependency.name_normaliser_for_package_manager("pip").call(name)
292
+ NameNormaliser.normalise(name)
292
293
  end
293
294
 
294
295
  def pipfile
@@ -318,5 +319,4 @@ module Dependabot
318
319
  end
319
320
  end
320
321
 
321
- Dependabot::UpdateCheckers.
322
- register("pip", Dependabot::Python::UpdateChecker)
322
+ Dependabot::UpdateCheckers.register("pip", Dependabot::Python::UpdateChecker)
@@ -8,6 +8,7 @@ require "dependabot/dependency"
8
8
  require "dependabot/python/update_checker"
9
9
  require "dependabot/shared_helpers"
10
10
  require "dependabot/python/authed_url_builder"
11
+ require "dependabot/python/name_normaliser"
11
12
 
12
13
  module Dependabot
13
14
  module Python
@@ -222,9 +223,7 @@ module Dependabot
222
223
  end
223
224
 
224
225
  def normalised_name
225
- Dependency.
226
- name_normaliser_for_package_manager("pip").
227
- call(dependency.name)
226
+ NameNormaliser.normalise(dependency.name)
228
227
  end
229
228
 
230
229
  def name_regex
@@ -13,6 +13,7 @@ require "dependabot/python/version"
13
13
  require "dependabot/shared_helpers"
14
14
  require "dependabot/python/native_helpers"
15
15
  require "dependabot/python/python_versions"
16
+ require "dependabot/python/name_normaliser"
16
17
 
17
18
  module Dependabot
18
19
  module Python
@@ -74,14 +75,15 @@ module Dependabot
74
75
  # This is slow, as pip-compile needs to do installs.
75
76
  run_pip_compile_command(
76
77
  "pyenv exec pip-compile --allow-unsafe "\
77
- "--build-isolation -P #{dependency.name} #{filename}"
78
+ "#{pip_compile_options(filename)} -P #{dependency.name} "\
79
+ "#{filename}"
78
80
  )
79
81
  # Run pip-compile a second time, without an update argument,
80
82
  # to ensure it handles markers correctly
81
83
  write_original_manifest_files unless dependency.top_level?
82
84
  run_pip_compile_command(
83
85
  "pyenv exec pip-compile --allow-unsafe "\
84
- "--build-isolation #{filename}"
86
+ "#{pip_compile_options(filename)} #{filename}"
85
87
  )
86
88
  end
87
89
 
@@ -196,6 +198,16 @@ module Dependabot
196
198
  )
197
199
  end
198
200
 
201
+ def pip_compile_options(filename)
202
+ requirements_file = compiled_file_for_filename(filename)
203
+ return "--build-isolation" unless requirements_file
204
+
205
+ [
206
+ "--build-isolation",
207
+ "--output-file=#{requirements_file.name}"
208
+ ].join(" ")
209
+ end
210
+
199
211
  def run_pip_compile_command(command)
200
212
  run_command("pyenv local #{python_version}")
201
213
  run_command(command)
@@ -250,7 +262,8 @@ module Dependabot
250
262
  end
251
263
 
252
264
  def error_certainly_bad_python_version?(message)
253
- unless message.include?('Command "python setup.py egg_info" failed')
265
+ unless message.include?('"python setup.py egg_info" failed') ||
266
+ message.include?("exit status 1: python setup.py egg_info")
254
267
  return false
255
268
  end
256
269
 
@@ -261,7 +274,8 @@ module Dependabot
261
274
  return true if message.include?("not find a version that satisfies")
262
275
  return true if message.include?("No matching distribution found")
263
276
 
264
- message.include?('Command "python setup.py egg_info" failed')
277
+ message.include?('Command "python setup.py egg_info" failed') ||
278
+ message.include?("exit status 1: python setup.py egg_info")
265
279
  end
266
280
 
267
281
  def write_temporary_dependency_files(updated_req: nil,
@@ -345,7 +359,7 @@ module Dependabot
345
359
  end
346
360
 
347
361
  def normalise(name)
348
- Dependency.name_normaliser_for_package_manager("pip").call(name)
362
+ NameNormaliser.normalise(name)
349
363
  end
350
364
 
351
365
  def clean_error_message(message)
@@ -367,8 +381,7 @@ module Dependabot
367
381
 
368
382
  files_from_compiled_files =
369
383
  pip_compile_files.map(&:name).select do |fn|
370
- compiled_file = dependency_files.
371
- find { |f| f.name == fn.gsub(/\.in$/, ".txt") }
384
+ compiled_file = compiled_file_for_filename(fn)
372
385
  compiled_file_includes_dependency?(compiled_file)
373
386
  end
374
387
 
@@ -377,6 +390,22 @@ module Dependabot
377
390
  order_filenames_for_compilation(filenames)
378
391
  end
379
392
 
393
+ def compiled_file_for_filename(filename)
394
+ compiled_file =
395
+ compiled_files.
396
+ find { |f| f.content.match?(output_file_regex(filename)) }
397
+
398
+ compiled_file ||=
399
+ compiled_files.
400
+ find { |f| f.name == filename.gsub(/\.in$/, ".txt") }
401
+
402
+ compiled_file
403
+ end
404
+
405
+ def output_file_regex(filename)
406
+ "--output-file[=\s]+.*\s#{Regexp.escape(filename)}\s*$"
407
+ end
408
+
380
409
  def compiled_file_includes_dependency?(compiled_file)
381
410
  return false unless compiled_file
382
411
 
@@ -13,6 +13,7 @@ require "dependabot/python/file_updater/setup_file_sanitizer"
13
13
  require "dependabot/python/update_checker"
14
14
  require "dependabot/python/python_versions"
15
15
  require "dependabot/python/native_helpers"
16
+ require "dependabot/python/name_normaliser"
16
17
  require "dependabot/python/version"
17
18
 
18
19
  # rubocop:disable Metrics/ClassLength
@@ -467,7 +468,8 @@ module Dependabot
467
468
  return true if error_message.include?("UnsupportedPythonVersion")
468
469
  return true if error_message.include?("at matches #{dependency.name}")
469
470
 
470
- error_message.include?('Command "python setup.py egg_info" failed')
471
+ error_message.include?('Command "python setup.py egg_info" failed') ||
472
+ message.include?("exit status 1: python setup.py egg_info")
471
473
  end
472
474
 
473
475
  def pipenv_env_variables
@@ -481,7 +483,7 @@ module Dependabot
481
483
  end
482
484
 
483
485
  def normalise(name)
484
- Dependency.name_normaliser_for_package_manager("pip").call(name)
486
+ NameNormaliser.normalise(name)
485
487
  end
486
488
 
487
489
  def pipfile
@@ -15,6 +15,7 @@ require "dependabot/python/requirement"
15
15
  require "dependabot/python/native_helpers"
16
16
  require "dependabot/python/python_versions"
17
17
  require "dependabot/python/authed_url_builder"
18
+ require "dependabot/python/name_normaliser"
18
19
 
19
20
  module Dependabot
20
21
  module Python
@@ -326,7 +327,7 @@ module Dependabot
326
327
  end
327
328
 
328
329
  def normalise(name)
329
- Dependency.name_normaliser_for_package_manager("pip").call(name)
330
+ NameNormaliser.normalise(name)
330
331
  end
331
332
  end
332
333
  end
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.111.27
4
+ version: 0.111.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-24 00:00:00.000000000 Z
11
+ date: 2019-07-25 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.111.27
19
+ version: 0.111.28
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.111.27
26
+ version: 0.111.28
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -168,6 +168,7 @@ files:
168
168
  - lib/dependabot/python/file_updater/requirement_replacer.rb
169
169
  - lib/dependabot/python/file_updater/setup_file_sanitizer.rb
170
170
  - lib/dependabot/python/metadata_finder.rb
171
+ - lib/dependabot/python/name_normaliser.rb
171
172
  - lib/dependabot/python/native_helpers.rb
172
173
  - lib/dependabot/python/python_versions.rb
173
174
  - lib/dependabot/python/requirement.rb