diff options
Diffstat (limited to 'lib/license')
| -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 | ||||
| -rw-r--r-- | lib/license/management/version.rb | 2 |
5 files changed, 75 insertions, 2 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' diff --git a/lib/license/management/version.rb b/lib/license/management/version.rb index c004a9c..946d5e9 100644 --- a/lib/license/management/version.rb +++ b/lib/license/management/version.rb @@ -2,6 +2,6 @@ module License module Management - VERSION = '3.1.4' + VERSION = '3.2.0' end end |
