lib/license_finder/packages/pip_package.rb
# frozen_string_literal: true
require 'set'
module LicenseFinder
class PipPackage < Package
LICENSE_FORMAT = /^License.*::\s*(.*)$/.freeze
INVALID_LICENSES = ['', 'UNKNOWN'].to_set
def self.license_names_from_spec(spec)
license_names = spec['license'].to_s.strip.split(' or ')
has_unrecognized_license = false
license_names.each do |license_name|
license = License.find_by_name(license_name.strip)
has_unrecognized_license ||= license.unrecognized_matcher?
end
return license_names if !license_names.empty? && !has_unrecognized_license
spec
.fetch('classifiers', [])
.select { |c| c =~ LICENSE_FORMAT }
.map { |c| c.gsub(LICENSE_FORMAT, '\1') }
end
def initialize(name, version, spec, options = {})
super(
name,
version,
options.merge(
authors: spec['author'],
summary: spec['summary'],
description: spec['description'],
homepage: spec['home_page'],
spec_licenses: self.class.license_names_from_spec(spec)
)
)
end
def package_manager
'Pip'
end
def package_url
"https://pypi.org/project/#{CGI.escape(name)}/#{CGI.escape(version)}/"
end
end
end