diff --git a/services/pypi/pypi-helpers.js b/services/pypi/pypi-helpers.js index 258652cdb24a68b6900262869a137153fc9b3e2b..0a108c9b07c2873c968b69213ed76dd9bc106f2c 100644 --- a/services/pypi/pypi-helpers.js +++ b/services/pypi/pypi-helpers.js @@ -57,13 +57,19 @@ function getLicenses(packageData) { if (license) { return [license] } else { - const acronymRegex = /\(([^)]+)\)/ + const parenthesizedAcronymRegex = /\(([^)]+)\)/ + const bareAcronymRegex = /^[a-z0-9]+$/ let licenses = parseClassifiers(packageData, /^License :: (.+)$/) .map(classifier => classifier.split(' :: ').pop()) + .map(license => license.replace(' license', '')) .map(license => { - const match = license.match(acronymRegex) + const match = license.match(parenthesizedAcronymRegex) return match ? match[1].toUpperCase() : license }) + .map(license => { + const match = license.match(bareAcronymRegex) + return match ? license.toUpperCase() : license + }) if (licenses.length > 1) { licenses = licenses.filter(l => l !== 'dfsg approved') } diff --git a/services/pypi/pypi-helpers.spec.js b/services/pypi/pypi-helpers.spec.js index 8ab9cae8092716e9360650b9fa7c430047abb36a..e121639229ba4984a16925132cd9db52a67c243d 100644 --- a/services/pypi/pypi-helpers.spec.js +++ b/services/pypi/pypi-helpers.spec.js @@ -121,7 +121,7 @@ describe('PyPI helpers', function() { ], }, }), - ]).expect(['mit license']) + ]).expect(['MIT']) given({ info: { license: '', diff --git a/services/pypi/pypi-license.tester.js b/services/pypi/pypi-license.tester.js new file mode 100644 index 0000000000000000000000000000000000000000..2626a85b590a7514a40e445585c5c6dd3553854b --- /dev/null +++ b/services/pypi/pypi-license.tester.js @@ -0,0 +1,55 @@ +'use strict' + +const t = (module.exports = require('../tester').createServiceTester()) + +t.create('license (valid, package version in request)') + .get('/requests/2.18.4.json') + .expectBadge({ label: 'license', message: 'Apache 2.0' }) + +t.create('license (valid, no package version specified)') + .get('/requests.json') + .expectBadge({ label: 'license', message: 'Apache 2.0' }) + +t.create('license (invalid)') + .get('/not-a-package.json') + .expectBadge({ label: 'license', message: 'package or version not found' }) + +t.create('license (from trove classifier)') + .get('/mapi.json') + .intercept(nock => + nock('https://pypi.org') + .get('/pypi/mapi/json') + .reply(200, { + info: { + version: '1.2.3', + license: '', + classifiers: ['License :: OSI Approved :: MIT License'], + }, + releases: {}, + }) + ) + .expectBadge({ + label: 'license', + message: 'MIT', + }) + +t.create('license (as acronym from trove classifier)') + .get('/magma.json') + .intercept(nock => + nock('https://pypi.org') + .get('/pypi/magma/json') + .reply(200, { + info: { + version: '1.2.3', + license: '', + classifiers: [ + 'License :: OSI Approved :: GNU General Public License (GPL)', + ], + }, + releases: {}, + }) + ) + .expectBadge({ + label: 'license', + message: 'GPL', + }) diff --git a/services/pypi/pypi.tester.js b/services/pypi/pypi.tester.js index 8915cac77cf75ffee3ca7b975c1839784d980817..28d61829aedffd113ad3a1ffe01177d0f9ab8651 100644 --- a/services/pypi/pypi.tester.js +++ b/services/pypi/pypi.tester.js @@ -97,60 +97,6 @@ t.create('no trove classifiers') message: 'v1.2.3', }) -// tests for license endpoint - -t.create('license (valid, package version in request)') - .get('/l/requests/2.18.4.json') - .expectBadge({ label: 'license', message: 'Apache 2.0' }) - -t.create('license (valid, no package version specified)') - .get('/l/requests.json') - .expectBadge({ label: 'license', message: 'Apache 2.0' }) - -t.create('license (invalid)') - .get('/l/not-a-package.json') - .expectBadge({ label: 'license', message: 'package or version not found' }) - -t.create('license (from trove classifier)') - .get('/l/mapi.json') - .intercept(nock => - nock('https://pypi.org') - .get('/pypi/mapi/json') - .reply(200, { - info: { - version: '1.2.3', - license: '', - classifiers: ['License :: OSI Approved :: MIT License'], - }, - releases: {}, - }) - ) - .expectBadge({ - label: 'license', - message: 'mit license', - }) - -t.create('license (as acronym from trove classifier)') - .get('/l/magma.json') - .intercept(nock => - nock('https://pypi.org') - .get('/pypi/magma/json') - .reply(200, { - info: { - version: '1.2.3', - license: '', - classifiers: [ - 'License :: OSI Approved :: GNU General Public License (GPL)', - ], - }, - releases: {}, - }) - ) - .expectBadge({ - label: 'license', - message: 'GPL', - }) - // tests for wheel endpoint t.create('wheel (has wheel, package version in request)')