From 7eae541a0e2d53329e5ebc70c1439b4b21ea6422 Mon Sep 17 00:00:00 2001 From: Ee Durbin Date: Wed, 4 Sep 2024 09:04:28 -0400 Subject: [PATCH] exclude vendored spdx data from sdist/whl. build/bring our own Per feedback, integrate a variant of #799 that builds a minimal JSON dataset to feed vendored license-expression 32K src/packaging/_spdx.json vs 848K src/packaging/_vendor/license_expression/data/scancode-licensedb-index.json --- pyproject.toml | 2 +- src/packaging/_spdx.json | 1 + src/packaging/metadata.py | 7 +++- tasks/__init__.py | 3 +- tasks/licenses.py | 67 +++++++++++++++++++++++++++++++++++++++ tasks/paths.py | 1 + tasks/requirements.txt | 1 + 7 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 src/packaging/_spdx.json create mode 100644 tasks/licenses.py diff --git a/pyproject.toml b/pyproject.toml index 7f9d319d..968b527b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ Source = "https://github.com/pypa/packaging" [tool.flit.sdist] include = ["LICENSE*", "tests/", "docs/", "CHANGELOG.rst"] -exclude = ["docs/_build", "tests/manylinux/build-hello-world.sh", "tests/musllinux/build.sh", "tests/hello-world.c", "tests/__pycache__", "build/__pycache__"] +exclude = ["docs/_build", "tests/manylinux/build-hello-world.sh", "tests/musllinux/build.sh", "tests/hello-world.c", "tests/__pycache__", "build/__pycache__", "src/packaging/_vendor/license_expression/data/*"] [tool.pytest.ini_options] addopts = [ diff --git a/src/packaging/_spdx.json b/src/packaging/_spdx.json new file mode 100644 index 00000000..7de1c582 --- /dev/null +++ b/src/packaging/_spdx.json @@ -0,0 +1 @@ +[{"spdx_license_key": "0BSD"}, {"spdx_license_key": "3D-Slicer-1.0"}, {"spdx_license_key": "AAL"}, {"spdx_license_key": "Abstyles"}, {"spdx_license_key": "AdaCore-doc"}, {"spdx_license_key": "Adobe-2006"}, {"spdx_license_key": "Adobe-Display-PostScript"}, {"spdx_license_key": "Adobe-Glyph"}, {"spdx_license_key": "Adobe-Utopia"}, {"spdx_license_key": "ADSL"}, {"spdx_license_key": "AFL-1.1"}, {"spdx_license_key": "AFL-1.2"}, {"spdx_license_key": "AFL-2.0"}, {"spdx_license_key": "AFL-2.1"}, {"spdx_license_key": "AFL-3.0"}, {"spdx_license_key": "Afmparse"}, {"spdx_license_key": "AGPL-1.0", "is_deprecated": true}, {"spdx_license_key": "AGPL-1.0-only"}, {"spdx_license_key": "AGPL-1.0-or-later"}, {"spdx_license_key": "AGPL-3.0", "is_deprecated": true}, {"spdx_license_key": "AGPL-3.0-only"}, {"spdx_license_key": "AGPL-3.0-or-later"}, {"spdx_license_key": "Aladdin"}, {"spdx_license_key": "AMD-newlib"}, {"spdx_license_key": "AMDPLPA"}, {"spdx_license_key": "AML"}, {"spdx_license_key": "AML-glslang"}, {"spdx_license_key": "AMPAS"}, {"spdx_license_key": "ANTLR-PD"}, {"spdx_license_key": "ANTLR-PD-fallback"}, {"spdx_license_key": "any-OSI"}, {"spdx_license_key": "Apache-1.0"}, {"spdx_license_key": "Apache-1.1"}, {"spdx_license_key": "Apache-2.0"}, {"spdx_license_key": "APAFML"}, {"spdx_license_key": "APL-1.0"}, {"spdx_license_key": "App-s2p"}, {"spdx_license_key": "APSL-1.0"}, {"spdx_license_key": "APSL-1.1"}, {"spdx_license_key": "APSL-1.2"}, {"spdx_license_key": "APSL-2.0"}, {"spdx_license_key": "Arphic-1999"}, {"spdx_license_key": "Artistic-1.0"}, {"spdx_license_key": "Artistic-1.0-cl8"}, {"spdx_license_key": "Artistic-1.0-Perl"}, {"spdx_license_key": "Artistic-2.0"}, {"spdx_license_key": "ASWF-Digital-Assets-1.0"}, {"spdx_license_key": "ASWF-Digital-Assets-1.1"}, {"spdx_license_key": "Baekmuk"}, {"spdx_license_key": "Bahyph"}, {"spdx_license_key": "Barr"}, {"spdx_license_key": "bcrypt-Solar-Designer"}, {"spdx_license_key": "Beerware"}, {"spdx_license_key": "Bitstream-Charter"}, {"spdx_license_key": "Bitstream-Vera"}, {"spdx_license_key": "BitTorrent-1.0"}, {"spdx_license_key": "BitTorrent-1.1"}, {"spdx_license_key": "blessing"}, {"spdx_license_key": "BlueOak-1.0.0"}, {"spdx_license_key": "Boehm-GC"}, {"spdx_license_key": "Borceux"}, {"spdx_license_key": "Brian-Gladman-2-Clause"}, {"spdx_license_key": "Brian-Gladman-3-Clause"}, {"spdx_license_key": "BSD-1-Clause"}, {"spdx_license_key": "BSD-2-Clause"}, {"spdx_license_key": "BSD-2-Clause-Darwin"}, {"spdx_license_key": "BSD-2-Clause-first-lines"}, {"spdx_license_key": "BSD-2-Clause-FreeBSD", "is_deprecated": true}, {"spdx_license_key": "BSD-2-Clause-NetBSD", "is_deprecated": true}, {"spdx_license_key": "BSD-2-Clause-Patent"}, {"spdx_license_key": "BSD-2-Clause-Views"}, {"spdx_license_key": "BSD-3-Clause"}, {"spdx_license_key": "BSD-3-Clause-acpica"}, {"spdx_license_key": "BSD-3-Clause-Attribution"}, {"spdx_license_key": "BSD-3-Clause-Clear"}, {"spdx_license_key": "BSD-3-Clause-flex"}, {"spdx_license_key": "BSD-3-Clause-HP"}, {"spdx_license_key": "BSD-3-Clause-LBNL"}, {"spdx_license_key": "BSD-3-Clause-Modification"}, {"spdx_license_key": "BSD-3-Clause-No-Military-License"}, {"spdx_license_key": "BSD-3-Clause-No-Nuclear-License"}, {"spdx_license_key": "BSD-3-Clause-No-Nuclear-License-2014"}, {"spdx_license_key": "BSD-3-Clause-No-Nuclear-Warranty"}, {"spdx_license_key": "BSD-3-Clause-Open-MPI"}, {"spdx_license_key": "BSD-3-Clause-Sun"}, {"spdx_license_key": "BSD-4-Clause"}, {"spdx_license_key": "BSD-4-Clause-Shortened"}, {"spdx_license_key": "BSD-4-Clause-UC"}, {"spdx_license_key": "BSD-4.3RENO"}, {"spdx_license_key": "BSD-4.3TAHOE"}, {"spdx_license_key": "BSD-Advertising-Acknowledgement"}, {"spdx_license_key": "BSD-Attribution-HPND-disclaimer"}, {"spdx_license_key": "BSD-Inferno-Nettverk"}, {"spdx_license_key": "BSD-Protection"}, {"spdx_license_key": "BSD-Source-beginning-file"}, {"spdx_license_key": "BSD-Source-Code"}, {"spdx_license_key": "BSD-Systemics"}, {"spdx_license_key": "BSD-Systemics-W3Works"}, {"spdx_license_key": "BSL-1.0"}, {"spdx_license_key": "BUSL-1.1"}, {"spdx_license_key": "bzip2-1.0.5", "is_deprecated": true}, {"spdx_license_key": "bzip2-1.0.6"}, {"spdx_license_key": "C-UDA-1.0"}, {"spdx_license_key": "CAL-1.0"}, {"spdx_license_key": "CAL-1.0-Combined-Work-Exception"}, {"spdx_license_key": "Caldera"}, {"spdx_license_key": "Caldera-no-preamble"}, {"spdx_license_key": "Catharon"}, {"spdx_license_key": "CATOSL-1.1"}, {"spdx_license_key": "CC-BY-1.0"}, {"spdx_license_key": "CC-BY-2.0"}, {"spdx_license_key": "CC-BY-2.5"}, {"spdx_license_key": "CC-BY-2.5-AU"}, {"spdx_license_key": "CC-BY-3.0"}, {"spdx_license_key": "CC-BY-3.0-AT"}, {"spdx_license_key": "CC-BY-3.0-AU"}, {"spdx_license_key": "CC-BY-3.0-DE"}, {"spdx_license_key": "CC-BY-3.0-IGO"}, {"spdx_license_key": "CC-BY-3.0-NL"}, {"spdx_license_key": "CC-BY-3.0-US"}, {"spdx_license_key": "CC-BY-4.0"}, {"spdx_license_key": "CC-BY-NC-1.0"}, {"spdx_license_key": "CC-BY-NC-2.0"}, {"spdx_license_key": "CC-BY-NC-2.5"}, {"spdx_license_key": "CC-BY-NC-3.0"}, {"spdx_license_key": "CC-BY-NC-3.0-DE"}, {"spdx_license_key": "CC-BY-NC-4.0"}, {"spdx_license_key": "CC-BY-NC-ND-1.0"}, {"spdx_license_key": "CC-BY-NC-ND-2.0"}, {"spdx_license_key": "CC-BY-NC-ND-2.5"}, {"spdx_license_key": "CC-BY-NC-ND-3.0"}, {"spdx_license_key": "CC-BY-NC-ND-3.0-DE"}, {"spdx_license_key": "CC-BY-NC-ND-3.0-IGO"}, {"spdx_license_key": "CC-BY-NC-ND-4.0"}, {"spdx_license_key": "CC-BY-NC-SA-1.0"}, {"spdx_license_key": "CC-BY-NC-SA-2.0"}, {"spdx_license_key": "CC-BY-NC-SA-2.0-DE"}, {"spdx_license_key": "CC-BY-NC-SA-2.0-FR"}, {"spdx_license_key": "CC-BY-NC-SA-2.0-UK"}, {"spdx_license_key": "CC-BY-NC-SA-2.5"}, {"spdx_license_key": "CC-BY-NC-SA-3.0"}, {"spdx_license_key": "CC-BY-NC-SA-3.0-DE"}, {"spdx_license_key": "CC-BY-NC-SA-3.0-IGO"}, {"spdx_license_key": "CC-BY-NC-SA-4.0"}, {"spdx_license_key": "CC-BY-ND-1.0"}, {"spdx_license_key": "CC-BY-ND-2.0"}, {"spdx_license_key": "CC-BY-ND-2.5"}, {"spdx_license_key": "CC-BY-ND-3.0"}, {"spdx_license_key": "CC-BY-ND-3.0-DE"}, {"spdx_license_key": "CC-BY-ND-4.0"}, {"spdx_license_key": "CC-BY-SA-1.0"}, {"spdx_license_key": "CC-BY-SA-2.0"}, {"spdx_license_key": "CC-BY-SA-2.0-UK"}, {"spdx_license_key": "CC-BY-SA-2.1-JP"}, {"spdx_license_key": "CC-BY-SA-2.5"}, {"spdx_license_key": "CC-BY-SA-3.0"}, {"spdx_license_key": "CC-BY-SA-3.0-AT"}, {"spdx_license_key": "CC-BY-SA-3.0-DE"}, {"spdx_license_key": "CC-BY-SA-3.0-IGO"}, {"spdx_license_key": "CC-BY-SA-4.0"}, {"spdx_license_key": "CC-PDDC"}, {"spdx_license_key": "CC0-1.0"}, {"spdx_license_key": "CDDL-1.0"}, {"spdx_license_key": "CDDL-1.1"}, {"spdx_license_key": "CDL-1.0"}, {"spdx_license_key": "CDLA-Permissive-1.0"}, {"spdx_license_key": "CDLA-Permissive-2.0"}, {"spdx_license_key": "CDLA-Sharing-1.0"}, {"spdx_license_key": "CECILL-1.0"}, {"spdx_license_key": "CECILL-1.1"}, {"spdx_license_key": "CECILL-2.0"}, {"spdx_license_key": "CECILL-2.1"}, {"spdx_license_key": "CECILL-B"}, {"spdx_license_key": "CECILL-C"}, {"spdx_license_key": "CERN-OHL-1.1"}, {"spdx_license_key": "CERN-OHL-1.2"}, {"spdx_license_key": "CERN-OHL-P-2.0"}, {"spdx_license_key": "CERN-OHL-S-2.0"}, {"spdx_license_key": "CERN-OHL-W-2.0"}, {"spdx_license_key": "CFITSIO"}, {"spdx_license_key": "check-cvs"}, {"spdx_license_key": "checkmk"}, {"spdx_license_key": "ClArtistic"}, {"spdx_license_key": "Clips"}, {"spdx_license_key": "CMU-Mach"}, {"spdx_license_key": "CMU-Mach-nodoc"}, {"spdx_license_key": "CNRI-Jython"}, {"spdx_license_key": "CNRI-Python"}, {"spdx_license_key": "CNRI-Python-GPL-Compatible"}, {"spdx_license_key": "COIL-1.0"}, {"spdx_license_key": "Community-Spec-1.0"}, {"spdx_license_key": "Condor-1.1"}, {"spdx_license_key": "copyleft-next-0.3.0"}, {"spdx_license_key": "copyleft-next-0.3.1"}, {"spdx_license_key": "Cornell-Lossless-JPEG"}, {"spdx_license_key": "CPAL-1.0"}, {"spdx_license_key": "CPL-1.0"}, {"spdx_license_key": "CPOL-1.02"}, {"spdx_license_key": "Cronyx"}, {"spdx_license_key": "Crossword"}, {"spdx_license_key": "CrystalStacker"}, {"spdx_license_key": "CUA-OPL-1.0"}, {"spdx_license_key": "Cube"}, {"spdx_license_key": "curl"}, {"spdx_license_key": "cve-tou"}, {"spdx_license_key": "D-FSL-1.0"}, {"spdx_license_key": "DEC-3-Clause"}, {"spdx_license_key": "diffmark"}, {"spdx_license_key": "DL-DE-BY-2.0"}, {"spdx_license_key": "DL-DE-ZERO-2.0"}, {"spdx_license_key": "DOC"}, {"spdx_license_key": "DocBook-Schema"}, {"spdx_license_key": "DocBook-XML"}, {"spdx_license_key": "Dotseqn"}, {"spdx_license_key": "DRL-1.0"}, {"spdx_license_key": "DRL-1.1"}, {"spdx_license_key": "DSDP"}, {"spdx_license_key": "dtoa"}, {"spdx_license_key": "dvipdfm"}, {"spdx_license_key": "ECL-1.0"}, {"spdx_license_key": "ECL-2.0"}, {"spdx_license_key": "eCos-2.0", "is_deprecated": true}, {"spdx_license_key": "EFL-1.0"}, {"spdx_license_key": "EFL-2.0"}, {"spdx_license_key": "eGenix"}, {"spdx_license_key": "Elastic-2.0"}, {"spdx_license_key": "Entessa"}, {"spdx_license_key": "EPICS"}, {"spdx_license_key": "EPL-1.0"}, {"spdx_license_key": "EPL-2.0"}, {"spdx_license_key": "ErlPL-1.1"}, {"spdx_license_key": "etalab-2.0"}, {"spdx_license_key": "EUDatagrid"}, {"spdx_license_key": "EUPL-1.0"}, {"spdx_license_key": "EUPL-1.1"}, {"spdx_license_key": "EUPL-1.2"}, {"spdx_license_key": "Eurosym"}, {"spdx_license_key": "Fair"}, {"spdx_license_key": "FBM"}, {"spdx_license_key": "FDK-AAC"}, {"spdx_license_key": "Ferguson-Twofish"}, {"spdx_license_key": "Frameworx-1.0"}, {"spdx_license_key": "FreeBSD-DOC"}, {"spdx_license_key": "FreeImage"}, {"spdx_license_key": "FSFAP"}, {"spdx_license_key": "FSFAP-no-warranty-disclaimer"}, {"spdx_license_key": "FSFUL"}, {"spdx_license_key": "FSFULLR"}, {"spdx_license_key": "FSFULLRWD"}, {"spdx_license_key": "FTL"}, {"spdx_license_key": "Furuseth"}, {"spdx_license_key": "fwlw"}, {"spdx_license_key": "GCR-docs"}, {"spdx_license_key": "GD"}, {"spdx_license_key": "GFDL-1.1", "is_deprecated": true}, {"spdx_license_key": "GFDL-1.1-invariants-only"}, {"spdx_license_key": "GFDL-1.1-invariants-or-later"}, {"spdx_license_key": "GFDL-1.1-no-invariants-only"}, {"spdx_license_key": "GFDL-1.1-no-invariants-or-later"}, {"spdx_license_key": "GFDL-1.1-only"}, {"spdx_license_key": "GFDL-1.1-or-later"}, {"spdx_license_key": "GFDL-1.2", "is_deprecated": true}, {"spdx_license_key": "GFDL-1.2-invariants-only"}, {"spdx_license_key": "GFDL-1.2-invariants-or-later"}, {"spdx_license_key": "GFDL-1.2-no-invariants-only"}, {"spdx_license_key": "GFDL-1.2-no-invariants-or-later"}, {"spdx_license_key": "GFDL-1.2-only"}, {"spdx_license_key": "GFDL-1.2-or-later"}, {"spdx_license_key": "GFDL-1.3", "is_deprecated": true}, {"spdx_license_key": "GFDL-1.3-invariants-only"}, {"spdx_license_key": "GFDL-1.3-invariants-or-later"}, {"spdx_license_key": "GFDL-1.3-no-invariants-only"}, {"spdx_license_key": "GFDL-1.3-no-invariants-or-later"}, {"spdx_license_key": "GFDL-1.3-only"}, {"spdx_license_key": "GFDL-1.3-or-later"}, {"spdx_license_key": "Giftware"}, {"spdx_license_key": "GL2PS"}, {"spdx_license_key": "Glide"}, {"spdx_license_key": "Glulxe"}, {"spdx_license_key": "GLWTPL"}, {"spdx_license_key": "gnuplot"}, {"spdx_license_key": "GPL-1.0", "is_deprecated": true}, {"spdx_license_key": "GPL-1.0+", "is_deprecated": true}, {"spdx_license_key": "GPL-1.0-only"}, {"spdx_license_key": "GPL-1.0-or-later"}, {"spdx_license_key": "GPL-2.0", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0+", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0-only"}, {"spdx_license_key": "GPL-2.0-or-later"}, {"spdx_license_key": "GPL-2.0-with-autoconf-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0-with-bison-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0-with-classpath-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0-with-font-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-2.0-with-GCC-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-3.0", "is_deprecated": true}, {"spdx_license_key": "GPL-3.0+", "is_deprecated": true}, {"spdx_license_key": "GPL-3.0-only"}, {"spdx_license_key": "GPL-3.0-or-later"}, {"spdx_license_key": "GPL-3.0-with-autoconf-exception", "is_deprecated": true}, {"spdx_license_key": "GPL-3.0-with-GCC-exception", "is_deprecated": true}, {"spdx_license_key": "Graphics-Gems"}, {"spdx_license_key": "gSOAP-1.3b"}, {"spdx_license_key": "gtkbook"}, {"spdx_license_key": "Gutmann"}, {"spdx_license_key": "HaskellReport"}, {"spdx_license_key": "hdparm"}, {"spdx_license_key": "HIDAPI"}, {"spdx_license_key": "Hippocratic-2.1"}, {"spdx_license_key": "HP-1986"}, {"spdx_license_key": "HP-1989"}, {"spdx_license_key": "HPND"}, {"spdx_license_key": "HPND-DEC"}, {"spdx_license_key": "HPND-doc"}, {"spdx_license_key": "HPND-doc-sell"}, {"spdx_license_key": "HPND-export-US"}, {"spdx_license_key": "HPND-export-US-acknowledgement"}, {"spdx_license_key": "HPND-export-US-modify"}, {"spdx_license_key": "HPND-export2-US"}, {"spdx_license_key": "HPND-Fenneberg-Livingston"}, {"spdx_license_key": "HPND-INRIA-IMAG"}, {"spdx_license_key": "HPND-Intel"}, {"spdx_license_key": "HPND-Kevlin-Henney"}, {"spdx_license_key": "HPND-Markus-Kuhn"}, {"spdx_license_key": "HPND-merchantability-variant"}, {"spdx_license_key": "HPND-MIT-disclaimer"}, {"spdx_license_key": "HPND-Netrek"}, {"spdx_license_key": "HPND-Pbmplus"}, {"spdx_license_key": "HPND-sell-MIT-disclaimer-xserver"}, {"spdx_license_key": "HPND-sell-regexpr"}, {"spdx_license_key": "HPND-sell-variant"}, {"spdx_license_key": "HPND-sell-variant-MIT-disclaimer"}, {"spdx_license_key": "HPND-sell-variant-MIT-disclaimer-rev"}, {"spdx_license_key": "HPND-UC"}, {"spdx_license_key": "HPND-UC-export-US"}, {"spdx_license_key": "HTMLTIDY"}, {"spdx_license_key": "IBM-pibs"}, {"spdx_license_key": "ICU"}, {"spdx_license_key": "IEC-Code-Components-EULA"}, {"spdx_license_key": "IJG"}, {"spdx_license_key": "IJG-short"}, {"spdx_license_key": "ImageMagick"}, {"spdx_license_key": "iMatix"}, {"spdx_license_key": "Imlib2"}, {"spdx_license_key": "Info-ZIP"}, {"spdx_license_key": "Inner-Net-2.0"}, {"spdx_license_key": "Intel"}, {"spdx_license_key": "Intel-ACPI"}, {"spdx_license_key": "Interbase-1.0"}, {"spdx_license_key": "IPA"}, {"spdx_license_key": "IPL-1.0"}, {"spdx_license_key": "ISC"}, {"spdx_license_key": "ISC-Veillard"}, {"spdx_license_key": "Jam"}, {"spdx_license_key": "JasPer-2.0"}, {"spdx_license_key": "JPL-image"}, {"spdx_license_key": "JPNIC"}, {"spdx_license_key": "JSON"}, {"spdx_license_key": "Kastrup"}, {"spdx_license_key": "Kazlib"}, {"spdx_license_key": "Knuth-CTAN"}, {"spdx_license_key": "LAL-1.2"}, {"spdx_license_key": "LAL-1.3"}, {"spdx_license_key": "Latex2e"}, {"spdx_license_key": "Latex2e-translated-notice"}, {"spdx_license_key": "Leptonica"}, {"spdx_license_key": "LGPL-2.0", "is_deprecated": true}, {"spdx_license_key": "LGPL-2.0+", "is_deprecated": true}, {"spdx_license_key": "LGPL-2.0-only"}, {"spdx_license_key": "LGPL-2.0-or-later"}, {"spdx_license_key": "LGPL-2.1", "is_deprecated": true}, {"spdx_license_key": "LGPL-2.1+", "is_deprecated": true}, {"spdx_license_key": "LGPL-2.1-only"}, {"spdx_license_key": "LGPL-2.1-or-later"}, {"spdx_license_key": "LGPL-3.0", "is_deprecated": true}, {"spdx_license_key": "LGPL-3.0+", "is_deprecated": true}, {"spdx_license_key": "LGPL-3.0-only"}, {"spdx_license_key": "LGPL-3.0-or-later"}, {"spdx_license_key": "LGPLLR"}, {"spdx_license_key": "Libpng"}, {"spdx_license_key": "libpng-2.0"}, {"spdx_license_key": "libselinux-1.0"}, {"spdx_license_key": "libtiff"}, {"spdx_license_key": "libutil-David-Nugent"}, {"spdx_license_key": "LiLiQ-P-1.1"}, {"spdx_license_key": "LiLiQ-R-1.1"}, {"spdx_license_key": "LiLiQ-Rplus-1.1"}, {"spdx_license_key": "Linux-man-pages-1-para"}, {"spdx_license_key": "Linux-man-pages-copyleft"}, {"spdx_license_key": "Linux-man-pages-copyleft-2-para"}, {"spdx_license_key": "Linux-man-pages-copyleft-var"}, {"spdx_license_key": "Linux-OpenIB"}, {"spdx_license_key": "LOOP"}, {"spdx_license_key": "LPD-document"}, {"spdx_license_key": "LPL-1.0"}, {"spdx_license_key": "LPL-1.02"}, {"spdx_license_key": "LPPL-1.0"}, {"spdx_license_key": "LPPL-1.1"}, {"spdx_license_key": "LPPL-1.2"}, {"spdx_license_key": "LPPL-1.3a"}, {"spdx_license_key": "LPPL-1.3c"}, {"spdx_license_key": "lsof"}, {"spdx_license_key": "Lucida-Bitmap-Fonts"}, {"spdx_license_key": "LZMA-SDK-9.11-to-9.20"}, {"spdx_license_key": "LZMA-SDK-9.22"}, {"spdx_license_key": "Mackerras-3-Clause"}, {"spdx_license_key": "Mackerras-3-Clause-acknowledgment"}, {"spdx_license_key": "magaz"}, {"spdx_license_key": "mailprio"}, {"spdx_license_key": "MakeIndex"}, {"spdx_license_key": "Martin-Birgmeier"}, {"spdx_license_key": "McPhee-slideshow"}, {"spdx_license_key": "metamail"}, {"spdx_license_key": "Minpack"}, {"spdx_license_key": "MirOS"}, {"spdx_license_key": "MIT"}, {"spdx_license_key": "MIT-0"}, {"spdx_license_key": "MIT-advertising"}, {"spdx_license_key": "MIT-CMU"}, {"spdx_license_key": "MIT-enna"}, {"spdx_license_key": "MIT-feh"}, {"spdx_license_key": "MIT-Festival"}, {"spdx_license_key": "MIT-Khronos-old"}, {"spdx_license_key": "MIT-Modern-Variant"}, {"spdx_license_key": "MIT-open-group"}, {"spdx_license_key": "MIT-testregex"}, {"spdx_license_key": "MIT-Wu"}, {"spdx_license_key": "MITNFA"}, {"spdx_license_key": "MMIXware"}, {"spdx_license_key": "Motosoto"}, {"spdx_license_key": "MPEG-SSG"}, {"spdx_license_key": "mpi-permissive"}, {"spdx_license_key": "mpich2"}, {"spdx_license_key": "MPL-1.0"}, {"spdx_license_key": "MPL-1.1"}, {"spdx_license_key": "MPL-2.0"}, {"spdx_license_key": "MPL-2.0-no-copyleft-exception"}, {"spdx_license_key": "mplus"}, {"spdx_license_key": "MS-LPL"}, {"spdx_license_key": "MS-PL"}, {"spdx_license_key": "MS-RL"}, {"spdx_license_key": "MTLL"}, {"spdx_license_key": "MulanPSL-1.0"}, {"spdx_license_key": "MulanPSL-2.0"}, {"spdx_license_key": "Multics"}, {"spdx_license_key": "Mup"}, {"spdx_license_key": "NAIST-2003"}, {"spdx_license_key": "NASA-1.3"}, {"spdx_license_key": "Naumen"}, {"spdx_license_key": "NBPL-1.0"}, {"spdx_license_key": "NCBI-PD"}, {"spdx_license_key": "NCGL-UK-2.0"}, {"spdx_license_key": "NCL"}, {"spdx_license_key": "NCSA"}, {"spdx_license_key": "Net-SNMP", "is_deprecated": true}, {"spdx_license_key": "NetCDF"}, {"spdx_license_key": "Newsletr"}, {"spdx_license_key": "NGPL"}, {"spdx_license_key": "NICTA-1.0"}, {"spdx_license_key": "NIST-PD"}, {"spdx_license_key": "NIST-PD-fallback"}, {"spdx_license_key": "NIST-Software"}, {"spdx_license_key": "NLOD-1.0"}, {"spdx_license_key": "NLOD-2.0"}, {"spdx_license_key": "NLPL"}, {"spdx_license_key": "Nokia"}, {"spdx_license_key": "NOSL"}, {"spdx_license_key": "Noweb"}, {"spdx_license_key": "NPL-1.0"}, {"spdx_license_key": "NPL-1.1"}, {"spdx_license_key": "NPOSL-3.0"}, {"spdx_license_key": "NRL"}, {"spdx_license_key": "NTP"}, {"spdx_license_key": "NTP-0"}, {"spdx_license_key": "Nunit", "is_deprecated": true}, {"spdx_license_key": "O-UDA-1.0"}, {"spdx_license_key": "OAR"}, {"spdx_license_key": "OCCT-PL"}, {"spdx_license_key": "OCLC-2.0"}, {"spdx_license_key": "ODbL-1.0"}, {"spdx_license_key": "ODC-By-1.0"}, {"spdx_license_key": "OFFIS"}, {"spdx_license_key": "OFL-1.0"}, {"spdx_license_key": "OFL-1.0-no-RFN"}, {"spdx_license_key": "OFL-1.0-RFN"}, {"spdx_license_key": "OFL-1.1"}, {"spdx_license_key": "OFL-1.1-no-RFN"}, {"spdx_license_key": "OFL-1.1-RFN"}, {"spdx_license_key": "OGC-1.0"}, {"spdx_license_key": "OGDL-Taiwan-1.0"}, {"spdx_license_key": "OGL-Canada-2.0"}, {"spdx_license_key": "OGL-UK-1.0"}, {"spdx_license_key": "OGL-UK-2.0"}, {"spdx_license_key": "OGL-UK-3.0"}, {"spdx_license_key": "OGTSL"}, {"spdx_license_key": "OLDAP-1.1"}, {"spdx_license_key": "OLDAP-1.2"}, {"spdx_license_key": "OLDAP-1.3"}, {"spdx_license_key": "OLDAP-1.4"}, {"spdx_license_key": "OLDAP-2.0"}, {"spdx_license_key": "OLDAP-2.0.1"}, {"spdx_license_key": "OLDAP-2.1"}, {"spdx_license_key": "OLDAP-2.2"}, {"spdx_license_key": "OLDAP-2.2.1"}, {"spdx_license_key": "OLDAP-2.2.2"}, {"spdx_license_key": "OLDAP-2.3"}, {"spdx_license_key": "OLDAP-2.4"}, {"spdx_license_key": "OLDAP-2.5"}, {"spdx_license_key": "OLDAP-2.6"}, {"spdx_license_key": "OLDAP-2.7"}, {"spdx_license_key": "OLDAP-2.8"}, {"spdx_license_key": "OLFL-1.3"}, {"spdx_license_key": "OML"}, {"spdx_license_key": "OpenPBS-2.3"}, {"spdx_license_key": "OpenSSL"}, {"spdx_license_key": "OpenSSL-standalone"}, {"spdx_license_key": "OpenVision"}, {"spdx_license_key": "OPL-1.0"}, {"spdx_license_key": "OPL-UK-3.0"}, {"spdx_license_key": "OPUBL-1.0"}, {"spdx_license_key": "OSET-PL-2.1"}, {"spdx_license_key": "OSL-1.0"}, {"spdx_license_key": "OSL-1.1"}, {"spdx_license_key": "OSL-2.0"}, {"spdx_license_key": "OSL-2.1"}, {"spdx_license_key": "OSL-3.0"}, {"spdx_license_key": "PADL"}, {"spdx_license_key": "Parity-6.0.0"}, {"spdx_license_key": "Parity-7.0.0"}, {"spdx_license_key": "PDDL-1.0"}, {"spdx_license_key": "PHP-3.0"}, {"spdx_license_key": "PHP-3.01"}, {"spdx_license_key": "Pixar"}, {"spdx_license_key": "pkgconf"}, {"spdx_license_key": "Plexus"}, {"spdx_license_key": "pnmstitch"}, {"spdx_license_key": "PolyForm-Noncommercial-1.0.0"}, {"spdx_license_key": "PolyForm-Small-Business-1.0.0"}, {"spdx_license_key": "PostgreSQL"}, {"spdx_license_key": "PPL"}, {"spdx_license_key": "PSF-2.0"}, {"spdx_license_key": "psfrag"}, {"spdx_license_key": "psutils"}, {"spdx_license_key": "Python-2.0"}, {"spdx_license_key": "Python-2.0.1"}, {"spdx_license_key": "python-ldap"}, {"spdx_license_key": "Qhull"}, {"spdx_license_key": "QPL-1.0"}, {"spdx_license_key": "QPL-1.0-INRIA-2004"}, {"spdx_license_key": "radvd"}, {"spdx_license_key": "Rdisc"}, {"spdx_license_key": "RHeCos-1.1"}, {"spdx_license_key": "RPL-1.1"}, {"spdx_license_key": "RPL-1.5"}, {"spdx_license_key": "RPSL-1.0"}, {"spdx_license_key": "RSA-MD"}, {"spdx_license_key": "RSCPL"}, {"spdx_license_key": "Ruby"}, {"spdx_license_key": "Ruby-pty"}, {"spdx_license_key": "SAX-PD"}, {"spdx_license_key": "SAX-PD-2.0"}, {"spdx_license_key": "Saxpath"}, {"spdx_license_key": "SCEA"}, {"spdx_license_key": "SchemeReport"}, {"spdx_license_key": "Sendmail"}, {"spdx_license_key": "Sendmail-8.23"}, {"spdx_license_key": "SGI-B-1.0"}, {"spdx_license_key": "SGI-B-1.1"}, {"spdx_license_key": "SGI-B-2.0"}, {"spdx_license_key": "SGI-OpenGL"}, {"spdx_license_key": "SGP4"}, {"spdx_license_key": "SHL-0.5"}, {"spdx_license_key": "SHL-0.51"}, {"spdx_license_key": "SimPL-2.0"}, {"spdx_license_key": "SISSL"}, {"spdx_license_key": "SISSL-1.2"}, {"spdx_license_key": "SL"}, {"spdx_license_key": "Sleepycat"}, {"spdx_license_key": "SMLNJ"}, {"spdx_license_key": "SMPPL"}, {"spdx_license_key": "SNIA"}, {"spdx_license_key": "snprintf"}, {"spdx_license_key": "softSurfer"}, {"spdx_license_key": "Soundex"}, {"spdx_license_key": "Spencer-86"}, {"spdx_license_key": "Spencer-94"}, {"spdx_license_key": "Spencer-99"}, {"spdx_license_key": "SPL-1.0"}, {"spdx_license_key": "ssh-keyscan"}, {"spdx_license_key": "SSH-OpenSSH"}, {"spdx_license_key": "SSH-short"}, {"spdx_license_key": "SSLeay-standalone"}, {"spdx_license_key": "SSPL-1.0"}, {"spdx_license_key": "StandardML-NJ", "is_deprecated": true}, {"spdx_license_key": "SugarCRM-1.1.3"}, {"spdx_license_key": "Sun-PPP"}, {"spdx_license_key": "Sun-PPP-2000"}, {"spdx_license_key": "SunPro"}, {"spdx_license_key": "SWL"}, {"spdx_license_key": "swrule"}, {"spdx_license_key": "Symlinks"}, {"spdx_license_key": "TAPR-OHL-1.0"}, {"spdx_license_key": "TCL"}, {"spdx_license_key": "TCP-wrappers"}, {"spdx_license_key": "TermReadKey"}, {"spdx_license_key": "TGPPL-1.0"}, {"spdx_license_key": "threeparttable"}, {"spdx_license_key": "TMate"}, {"spdx_license_key": "TORQUE-1.1"}, {"spdx_license_key": "TOSL"}, {"spdx_license_key": "TPDL"}, {"spdx_license_key": "TPL-1.0"}, {"spdx_license_key": "TTWL"}, {"spdx_license_key": "TTYP0"}, {"spdx_license_key": "TU-Berlin-1.0"}, {"spdx_license_key": "TU-Berlin-2.0"}, {"spdx_license_key": "Ubuntu-font-1.0"}, {"spdx_license_key": "UCAR"}, {"spdx_license_key": "UCL-1.0"}, {"spdx_license_key": "ulem"}, {"spdx_license_key": "UMich-Merit"}, {"spdx_license_key": "Unicode-3.0"}, {"spdx_license_key": "Unicode-DFS-2015"}, {"spdx_license_key": "Unicode-DFS-2016"}, {"spdx_license_key": "Unicode-TOU"}, {"spdx_license_key": "UnixCrypt"}, {"spdx_license_key": "Unlicense"}, {"spdx_license_key": "UPL-1.0"}, {"spdx_license_key": "URT-RLE"}, {"spdx_license_key": "Vim"}, {"spdx_license_key": "VOSTROM"}, {"spdx_license_key": "VSL-1.0"}, {"spdx_license_key": "W3C"}, {"spdx_license_key": "W3C-19980720"}, {"spdx_license_key": "W3C-20150513"}, {"spdx_license_key": "w3m"}, {"spdx_license_key": "Watcom-1.0"}, {"spdx_license_key": "Widget-Workshop"}, {"spdx_license_key": "Wsuipa"}, {"spdx_license_key": "WTFPL"}, {"spdx_license_key": "wxWindows", "is_deprecated": true}, {"spdx_license_key": "X11"}, {"spdx_license_key": "X11-distribute-modifications-variant"}, {"spdx_license_key": "X11-swapped"}, {"spdx_license_key": "Xdebug-1.03"}, {"spdx_license_key": "Xerox"}, {"spdx_license_key": "Xfig"}, {"spdx_license_key": "XFree86-1.1"}, {"spdx_license_key": "xinetd"}, {"spdx_license_key": "xkeyboard-config-Zinoviev"}, {"spdx_license_key": "xlock"}, {"spdx_license_key": "Xnet"}, {"spdx_license_key": "xpp"}, {"spdx_license_key": "XSkat"}, {"spdx_license_key": "xzoom"}, {"spdx_license_key": "YPL-1.0"}, {"spdx_license_key": "YPL-1.1"}, {"spdx_license_key": "Zed"}, {"spdx_license_key": "Zeeff"}, {"spdx_license_key": "Zend-2.0"}, {"spdx_license_key": "Zimbra-1.3"}, {"spdx_license_key": "Zimbra-1.4"}, {"spdx_license_key": "Zlib"}, {"spdx_license_key": "zlib-acknowledgement"}, {"spdx_license_key": "ZPL-1.1"}, {"spdx_license_key": "ZPL-2.0"}, {"spdx_license_key": "ZPL-2.1"}, {"spdx_license_key": "389-exception", "is_exception": true}, {"spdx_license_key": "Asterisk-exception", "is_exception": true}, {"spdx_license_key": "Asterisk-linking-protocols-exception", "is_exception": true}, {"spdx_license_key": "Autoconf-exception-2.0", "is_exception": true}, {"spdx_license_key": "Autoconf-exception-3.0", "is_exception": true}, {"spdx_license_key": "Autoconf-exception-generic", "is_exception": true}, {"spdx_license_key": "Autoconf-exception-generic-3.0", "is_exception": true}, {"spdx_license_key": "Autoconf-exception-macro", "is_exception": true}, {"spdx_license_key": "Bison-exception-1.24", "is_exception": true}, {"spdx_license_key": "Bison-exception-2.2", "is_exception": true}, {"spdx_license_key": "Bootloader-exception", "is_exception": true}, {"spdx_license_key": "Classpath-exception-2.0", "is_exception": true}, {"spdx_license_key": "CLISP-exception-2.0", "is_exception": true}, {"spdx_license_key": "cryptsetup-OpenSSL-exception", "is_exception": true}, {"spdx_license_key": "DigiRule-FOSS-exception", "is_exception": true}, {"spdx_license_key": "eCos-exception-2.0", "is_exception": true}, {"spdx_license_key": "erlang-otp-linking-exception", "is_exception": true}, {"spdx_license_key": "Fawkes-Runtime-exception", "is_exception": true}, {"spdx_license_key": "FLTK-exception", "is_exception": true}, {"spdx_license_key": "fmt-exception", "is_exception": true}, {"spdx_license_key": "Font-exception-2.0", "is_exception": true}, {"spdx_license_key": "freertos-exception-2.0", "is_exception": true}, {"spdx_license_key": "GCC-exception-2.0", "is_exception": true}, {"spdx_license_key": "GCC-exception-2.0-note", "is_exception": true}, {"spdx_license_key": "GCC-exception-3.1", "is_exception": true}, {"spdx_license_key": "Gmsh-exception", "is_exception": true}, {"spdx_license_key": "GNAT-exception", "is_exception": true}, {"spdx_license_key": "GNOME-examples-exception", "is_exception": true}, {"spdx_license_key": "GNU-compiler-exception", "is_exception": true}, {"spdx_license_key": "gnu-javamail-exception", "is_exception": true}, {"spdx_license_key": "GPL-3.0-interface-exception", "is_exception": true}, {"spdx_license_key": "GPL-3.0-linking-exception", "is_exception": true}, {"spdx_license_key": "GPL-3.0-linking-source-exception", "is_exception": true}, {"spdx_license_key": "GPL-CC-1.0", "is_exception": true}, {"spdx_license_key": "GStreamer-exception-2005", "is_exception": true}, {"spdx_license_key": "GStreamer-exception-2008", "is_exception": true}, {"spdx_license_key": "i2p-gpl-java-exception", "is_exception": true}, {"spdx_license_key": "KiCad-libraries-exception", "is_exception": true}, {"spdx_license_key": "LGPL-3.0-linking-exception", "is_exception": true}, {"spdx_license_key": "libpri-OpenH323-exception", "is_exception": true}, {"spdx_license_key": "Libtool-exception", "is_exception": true}, {"spdx_license_key": "Linux-syscall-note", "is_exception": true}, {"spdx_license_key": "LLGPL", "is_exception": true}, {"spdx_license_key": "LLVM-exception", "is_exception": true}, {"spdx_license_key": "LZMA-exception", "is_exception": true}, {"spdx_license_key": "mif-exception", "is_exception": true}, {"spdx_license_key": "Nokia-Qt-exception-1.1", "is_exception": true, "is_deprecated": true}, {"spdx_license_key": "OCaml-LGPL-linking-exception", "is_exception": true}, {"spdx_license_key": "OCCT-exception-1.0", "is_exception": true}, {"spdx_license_key": "OpenJDK-assembly-exception-1.0", "is_exception": true}, {"spdx_license_key": "openvpn-openssl-exception", "is_exception": true}, {"spdx_license_key": "PCRE2-exception", "is_exception": true}, {"spdx_license_key": "PS-or-PDF-font-exception-20170817", "is_exception": true}, {"spdx_license_key": "QPL-1.0-INRIA-2004-exception", "is_exception": true}, {"spdx_license_key": "Qt-GPL-exception-1.0", "is_exception": true}, {"spdx_license_key": "Qt-LGPL-exception-1.1", "is_exception": true}, {"spdx_license_key": "Qwt-exception-1.0", "is_exception": true}, {"spdx_license_key": "romic-exception", "is_exception": true}, {"spdx_license_key": "RRDtool-FLOSS-exception-2.0", "is_exception": true}, {"spdx_license_key": "SANE-exception", "is_exception": true}, {"spdx_license_key": "SHL-2.0", "is_exception": true}, {"spdx_license_key": "SHL-2.1", "is_exception": true}, {"spdx_license_key": "stunnel-exception", "is_exception": true}, {"spdx_license_key": "SWI-exception", "is_exception": true}, {"spdx_license_key": "Swift-exception", "is_exception": true}, {"spdx_license_key": "Texinfo-exception", "is_exception": true}, {"spdx_license_key": "u-boot-exception-2.0", "is_exception": true}, {"spdx_license_key": "UBDL-exception", "is_exception": true}, {"spdx_license_key": "Universal-FOSS-exception-1.0", "is_exception": true}, {"spdx_license_key": "vsftpd-openssl-exception", "is_exception": true}, {"spdx_license_key": "WxWindows-exception-3.1", "is_exception": true}, {"spdx_license_key": "x11vnc-openssl-exception", "is_exception": true}] diff --git a/src/packaging/metadata.py b/src/packaging/metadata.py index 46380970..a4ec49e9 100644 --- a/src/packaging/metadata.py +++ b/src/packaging/metadata.py @@ -6,6 +6,7 @@ import email.message import email.parser import email.policy +import importlib.resources import typing from typing import ( Any, @@ -26,6 +27,8 @@ T = typing.TypeVar("T") +spdx_license_index_location = importlib.resources.path("packaging", "_spdx.json") + if "ExceptionGroup" in builtins.__dict__: # pragma: no cover ExceptionGroup = ExceptionGroup @@ -647,7 +650,9 @@ def _process_requires_dist( return reqs def _process_license_expression(self, value: str) -> str: - licensing = get_spdx_licensing() + licensing = get_spdx_licensing( + license_index_location=spdx_license_index_location + ) try: return str(licensing.parse(value, validate=True)) except LicenseExpressionError as exc: diff --git a/tasks/__init__.py b/tasks/__init__.py index 883da23c..a3d36801 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -4,6 +4,7 @@ import invoke -from . import check +from . import check, licenses ns = invoke.Collection(check) +ns.add_collection(licenses) diff --git a/tasks/licenses.py b/tasks/licenses.py new file mode 100644 index 00000000..491cddef --- /dev/null +++ b/tasks/licenses.py @@ -0,0 +1,67 @@ +import json +import time + +import httpx +import invoke + +from .paths import SPDX_LICENSES + +LATEST_API = "https://api.github.com/repos/spdx/license-list-data/releases/latest" +LICENSES_URL = ( + "https://raw.githubusercontent.com/spdx/license-list-data/v{}/json/licenses.json" +) +EXCEPTIONS_URL = ( + "https://raw.githubusercontent.com/spdx/license-list-data/v{}/json/exceptions.json" +) + + +def download_data(url): + for _ in range(600): + try: + response = httpx.get(url) + response.raise_for_status() + except Exception: + time.sleep(1) + continue + else: + return json.loads(response.content.decode("utf-8")) + + message = "Download failed" + raise ConnectionError(message) + + +@invoke.task +def update(ctx): + print("Updating SPDX licenses...") + + latest_version = download_data(LATEST_API)["tag_name"][1:] + print(f"Latest version: {latest_version}") + + license_payload = download_data(LICENSES_URL.format(latest_version))["licenses"] + print(f"Licenses: {len(license_payload)}") + + exception_payload = download_data(EXCEPTIONS_URL.format(latest_version))[ + "exceptions" + ] + print(f"Exceptions: {len(exception_payload)}") + + licenses = [] + for license_data in license_payload: + _l = { + "spdx_license_key": license_data["licenseId"], + } + if license_data["isDeprecatedLicenseId"]: + _l["is_deprecated"] = license_data["isDeprecatedLicenseId"] + licenses.append(_l) + + for exception_data in exception_payload: + _l = { + "spdx_license_key": exception_data["licenseExceptionId"], + "is_exception": True, + } + if exception_data["isDeprecatedLicenseId"]: + _l["is_deprecated"] = exception_data["isDeprecatedLicenseId"] + licenses.append(_l) + + with open(SPDX_LICENSES, "w", encoding="utf-8") as f: + f.write(json.dumps(licenses)) diff --git a/tasks/paths.py b/tasks/paths.py index 0888fb69..0d9af1c4 100644 --- a/tasks/paths.py +++ b/tasks/paths.py @@ -7,3 +7,4 @@ PROJECT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) CACHE = os.path.join(PROJECT, ".cache") +SPDX_LICENSES = os.path.join(PROJECT, "src", "packaging", "_spdx.json") diff --git a/tasks/requirements.txt b/tasks/requirements.txt index 5677c0e8..89cd6209 100644 --- a/tasks/requirements.txt +++ b/tasks/requirements.txt @@ -1,3 +1,4 @@ # The requirements required to invoke the tasks invoke progress +httpx