diff options
| author | mo khan <mo.khan@gmail.com> | 2020-03-20 17:08:23 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-03-26 20:04:48 -0600 |
| commit | 38a2f3123bb4dc6ec2f7479a0e682c92b81a954b (patch) | |
| tree | 16feaf24e3c5ca71bd1c5d93a0504b2e18cf6919 /lib | |
| parent | 4db9ccdf7a07654e7d546b5a6ab7467cf3818c93 (diff) | |
Install pip packages from a custom index
* Read PIP_INDEX_URL to identify where to download packages from
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/license/finder/ext.rb | 1 | ||||
| -rw-r--r-- | lib/license/finder/ext/pip.rb | 69 | ||||
| -rw-r--r-- | lib/license/finder/ext/shared_helpers.rb | 4 | ||||
| -rw-r--r-- | lib/license/management.rb | 1 |
4 files changed, 74 insertions, 1 deletions
diff --git a/lib/license/finder/ext.rb b/lib/license/finder/ext.rb index c17ffea..8731e4f 100644 --- a/lib/license/finder/ext.rb +++ b/lib/license/finder/ext.rb @@ -3,6 +3,7 @@ require 'license/finder/ext/license' require 'license/finder/ext/maven' require 'license/finder/ext/nuget' +require 'license/finder/ext/pip' require 'license/finder/ext/shared_helpers' # Apply patch to the JsonReport found in the `license_finder` gem. diff --git a/lib/license/finder/ext/pip.rb b/lib/license/finder/ext/pip.rb new file mode 100644 index 0000000..54b7d40 --- /dev/null +++ b/lib/license/finder/ext/pip.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +module LicenseFinder + class Pip + def current_packages + detected_dependencies.map do |name, version| + PipPackage.new(name, version, pypi.definition_for(name, version)) + end + end + + def possible_package_paths + path = project_path || Pathname.pwd + + [ + path.join(@requirements_path), + path.join('setup.py') + ] + end + + def prepare + return install_packages if detected_package_path == @requirements_path + + requirements_path = detected_package_path.dirname.join('requirements.txt') + requirements_path.write('.') unless requirements_path.exist? + install_packages + end + + private + + def detected_dependencies + stdout, _stderr, status = execute([ + python_executable, + LicenseFinder::BIN_PATH.join('license_finder_pip.py'), + detected_package_path + ]) + return [] unless status.success? + + JSON.parse(stdout).map { |package| package.values_at('name', 'version') } + end + + def install_packages + execute([prepare_command, "-i", pip_index_url, "-r", @requirements_path]) + end + + def execute(command) + Dir.chdir(project_path) do + ::LicenseFinder::SharedHelpers::Cmd.run(Array(command).join(' ')) + end + end + + def python_executable + "python#{@python_version == '2' ? '' : '3'}" + end + + def pip_index_url + ENV.fetch('PIP_INDEX_URL', 'https://pypi.org/simple/') + end + + def pypi + @pypi ||= Spandx::Python::PyPI.new(sources: [ + Spandx::Python::Source.new({ + 'name' => 'pypi', + 'url' => pip_index_url, + 'verify_ssl' => true + }) + ]) + end + end +end diff --git a/lib/license/finder/ext/shared_helpers.rb b/lib/license/finder/ext/shared_helpers.rb index bc37b9c..b6b6fcd 100644 --- a/lib/license/finder/ext/shared_helpers.rb +++ b/lib/license/finder/ext/shared_helpers.rb @@ -4,8 +4,10 @@ module LicenseFinder module SharedHelpers class Cmd def self.run(command) + ::License::Management.logger.debug(command) stdout, stderr, status = Open3.capture3(command) - ::License::Management.logger.debug([command, stdout].join('\n')) + ::License::Management.logger.debug(stdout) unless stdout.nil? || stdout.empty? + ::License::Management.logger.error(stderr) unless stderr.nil? || stderr.empty? [stdout, stderr, status] end end diff --git a/lib/license/management.rb b/lib/license/management.rb index a39c841..16a9d62 100644 --- a/lib/license/management.rb +++ b/lib/license/management.rb @@ -3,6 +3,7 @@ require 'json' require 'logger' require 'pathname' +require 'spandx' require 'yaml' require 'license_finder' |
