1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# frozen_string_literal: true
module License
module Management
class Pipenv < LicenseFinder::PackageManager
include Loggable
def initialize(options = {})
super
@lockfile = Pathname('Pipfile.lock')
end
def current_packages
@current_packages ||=
begin
packages = {}
each_dependency(groups: allowed_groups) do |name, data, group|
version = canonicalize(data['version'])
package = packages.fetch(key_for(name, version)) do |key|
packages[key] = build_package_for(name, version)
end
package.groups << group
end
packages.values
end
end
def possible_package_paths
project_path ? [project_path.join(@lockfile)] : [@lockfile]
end
private
def each_dependency(groups: [])
dependencies = JSON.parse(IO.read(detected_package_path))
groups.each do |group|
dependencies[group].each do |name, data|
yield name, data, group
end
end
end
def canonicalize(version)
version.sub(/^==/, '')
end
def build_package_for(name, version)
LicenseFinder::PipPackage.new(name, version, PyPI.definition(name, version))
end
def key_for(name, version)
"#{name}-#{version}"
end
def allowed_groups
%w[default develop] - ignored_groups
end
def ignored_groups
@ignored_groups.to_a || []
end
end
end
end
|