Class: Licensed::Source::Pip

Inherits:
Object
  • Object
show all
Defined in:
lib/licensed/source/pip.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Pip

Returns a new instance of Pip.



12
13
14
# File 'lib/licensed/source/pip.rb', line 12

def initialize(config)
  @config = config
end

Class Method Details

.typeObject



8
9
10
# File 'lib/licensed/source/pip.rb', line 8

def self.type
  "pip"
end

Instance Method Details

#dependenciesObject



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/licensed/source/pip.rb', line 21

def dependencies
  @dependencies ||= parse_requirements_txt.map do |package_name|
    package = package_info(package_name)
    location = File.join(package["Location"], package["Name"] +  "-" + package["Version"] + ".dist-info")
    Dependency.new(location, {
                     "type"        => Pip.type,
                     "name"        => package["Name"],
                     "summary"     => package["Summary"],
                     "homepage"    => package["Home-page"],
                     "version"     => package["Version"]
                   })
  end
end

#enabled?Boolean

Returns:

  • (Boolean)


16
17
18
19
# File 'lib/licensed/source/pip.rb', line 16

def enabled?
  return unless virtual_env_pip && Licensed::Shell.tool_available?(virtual_env_pip)
  File.exist?(@config.pwd.join("requirements.txt"))
end

#package_info(package_name) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/licensed/source/pip.rb', line 44

def package_info(package_name)
  p_info = pip_command(package_name).lines
  p_info.each_with_object(Hash.new(0)) { |pkg, a|
    k, v = pkg.split(":", 2)
    next if k.nil? || k.empty?
    a[k.strip] = v&.strip
  }
end

#parse_requirements_txtObject

Build the list of packages from a ‘requirements.txt’ Assumes that the requirements.txt follow the format pkg=1.0.0 or pkg==1.0.0



37
38
39
40
41
42
# File 'lib/licensed/source/pip.rb', line 37

def parse_requirements_txt
  File.open(@config.pwd.join("requirements.txt")).map do |line|
    p_split = line.split("=")
    p_split[0]
  end
end

#pip_command(*args) ⇒ Object



53
54
55
# File 'lib/licensed/source/pip.rb', line 53

def pip_command(*args)
  Licensed::Shell.execute(virtual_env_pip, "--disable-pip-version-check", "show", *args)
end

#virtual_env_dirObject



62
63
64
65
66
67
68
# File 'lib/licensed/source/pip.rb', line 62

def virtual_env_dir
  return @virtual_env_dir if defined?(@virtual_env_dir)
  @virtual_env_dir = begin
    venv_dir = @config.dig("python", "virtual_env_dir")
    File.expand_path(venv_dir, Licensed::Git.repository_root) if venv_dir
  end
end

#virtual_env_pipObject



57
58
59
60
# File 'lib/licensed/source/pip.rb', line 57

def virtual_env_pip
  return unless virtual_env_dir
  File.join(virtual_env_dir, "bin", "pip")
end