bibliothecary 8.5.1 → 8.6.0

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: 28eee333f0558f68657092d126ca5465eddbba371f1ad189a3007d4b43915063
4
- data.tar.gz: 91cb04d35a821cd7a8af93688a7db430d445f37f805493f379c2eeccddca5f74
3
+ metadata.gz: 69baa22eeba713511d022a85df1280b987885810f25e421f8d7eecf8af795317
4
+ data.tar.gz: c663614b9e7c5aee6613a403a14aa2faccbbe07bf69d3cb68a92faa09449803c
5
5
  SHA512:
6
- metadata.gz: 8286430aba8f90efd0fc73b63f1fe31f57a7aa3759f88613fdecced517ad98a12a2ce62032bab0919c94f125c84953a71ba3862533a4a2e410ec11d1e4cf4a99
7
- data.tar.gz: 310fa03c90fca4ee65fb46b2fb78b9f9276b082adeada8a4536cd9357441c7f33c54cbf016cd087a7b7c5f0b6517664ed8107d92cbe730e57538888e2e778fe6
6
+ metadata.gz: 27bc063ab4832d89e65673935169d9ad78fb13a48bacaf4d8a640781f8bc5a1f4a486da73e7e7409e64eb721246695997471f342e966d9434d576f480238c253
7
+ data.tar.gz: aea0d2e9eea3a8e9dec803d040ea14299febdf52528d58a7479240e6e65def97a5e24c60a0c0955ee72929140698ae78f6ca6ecbe44c1d1b7240f64d90d6570a
@@ -14,6 +14,9 @@ module Bibliothecary
14
14
  MANIFEST_REGEXP = /.*require[^\/]*(\/)?[^\/]*\.(txt|pip|in)$/
15
15
  PIP_COMPILE_REGEXP = /.*require.*$/
16
16
 
17
+ # Adapted from https://peps.python.org/pep-0508/#names
18
+ PEP_508_NAME_REGEX = /^([A-Z0-9][A-Z0-9._-]*[A-Z0-9]|[A-Z0-9])/i
19
+
17
20
  def self.mapping
18
21
  {
19
22
  match_filenames('requirements-dev.txt', 'requirements/dev.txt',
@@ -56,7 +59,7 @@ module Bibliothecary
56
59
  },
57
60
  match_filename("pyproject.toml") => {
58
61
  kind: 'manifest',
59
- parser: :parse_poetry
62
+ parser: :parse_pyproject
60
63
  },
61
64
  match_filename("poetry.lock") => {
62
65
  kind: 'lockfile',
@@ -90,9 +93,30 @@ module Bibliothecary
90
93
  map_dependencies(manifest['packages'], 'runtime') + map_dependencies(manifest['dev-packages'], 'develop')
91
94
  end
92
95
 
96
+ def self.parse_pyproject(file_contents, options: {})
97
+ deps = []
98
+
99
+ file_contents = Tomlrb.parse(file_contents)
100
+
101
+ # Parse poetry [tool.poetry] deps
102
+ poetry_manifest = file_contents.fetch('tool', {}).fetch('poetry', {})
103
+ deps += map_dependencies(poetry_manifest['dependencies'], 'runtime')
104
+ deps += map_dependencies(poetry_manifest['dev-dependencies'], 'develop')
105
+
106
+ # Parse PEP621 [project] deps
107
+ pep621_manifest = file_contents.fetch('project', {})
108
+ pep621_deps = pep621_manifest.fetch('dependencies', []).map { |d| parse_pep_508_dep_spec(d) }
109
+ deps += map_dependencies(pep621_deps, 'runtime')
110
+
111
+ # We're combining both poetry+PEP621 deps instead of making them mutually exclusive, until we
112
+ # find a reason not to ingest them both.
113
+ deps.uniq
114
+ end
115
+
116
+ # TODO: this was deprecated in 8.6.0. Remove this in any major version bump >= 9.*
93
117
  def self.parse_poetry(file_contents, options: {})
94
- manifest = Tomlrb.parse(file_contents).fetch('tool', {}).fetch('poetry', {})
95
- map_dependencies(manifest['dependencies'], 'runtime') + map_dependencies(manifest['dev-dependencies'], 'develop')
118
+ puts "Warning: parse_poetry() is deprecated, use parse_pyproject() instead."
119
+ parse_pyproject(file_contents, options)
96
120
  end
97
121
 
98
122
  def self.parse_conda(file_contents, options: {})
@@ -252,6 +276,15 @@ module Bibliothecary
252
276
  # parsing after we match.
253
277
  false
254
278
  end
279
+
280
+ # Simply parses out the name of a PEP 508 Dependency specification: https://peps.python.org/pep-0508/
281
+ # Leaves the rest as-is with any leading semicolons or spaces stripped
282
+ def self.parse_pep_508_dep_spec(dep)
283
+ name, requirement = dep.split(PEP_508_NAME_REGEX, 2).last(2).map(&:strip)
284
+ requirement = requirement.sub(/^[\s;]*/, "")
285
+ requirement = "*" if requirement == ""
286
+ return name, requirement
287
+ end
255
288
  end
256
289
  end
257
290
  end
@@ -1,3 +1,3 @@
1
1
  module Bibliothecary
2
- VERSION = "8.5.1"
2
+ VERSION = "8.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibliothecary
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.5.1
4
+ version: 8.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-18 00:00:00.000000000 Z
11
+ date: 2023-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tomlrb