mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 07:46:07 -07:00
Bump packaging from 24.1 to 24.2 (#2428)
* Bump packaging from 24.1 to 24.2 Bumps [packaging](https://github.com/pypa/packaging) from 24.1 to 24.2. - [Release notes](https://github.com/pypa/packaging/releases) - [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pypa/packaging/compare/24.1...24.2) --- updated-dependencies: - dependency-name: packaging dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update packaging==24.2 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> [skip ci]
This commit is contained in:
parent
9289ead996
commit
d9a87f9726
12 changed files with 1170 additions and 132 deletions
|
@ -6,10 +6,10 @@ __title__ = "packaging"
|
||||||
__summary__ = "Core utilities for Python packages"
|
__summary__ = "Core utilities for Python packages"
|
||||||
__uri__ = "https://github.com/pypa/packaging"
|
__uri__ = "https://github.com/pypa/packaging"
|
||||||
|
|
||||||
__version__ = "24.1"
|
__version__ = "24.2"
|
||||||
|
|
||||||
__author__ = "Donald Stufft and individual contributors"
|
__author__ = "Donald Stufft and individual contributors"
|
||||||
__email__ = "donald@stufft.io"
|
__email__ = "donald@stufft.io"
|
||||||
|
|
||||||
__license__ = "BSD-2-Clause or Apache-2.0"
|
__license__ = "BSD-2-Clause or Apache-2.0"
|
||||||
__copyright__ = "2014 %s" % __author__
|
__copyright__ = f"2014 {__author__}"
|
||||||
|
|
|
@ -48,8 +48,8 @@ class ELFFile:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ident = self._read("16B")
|
ident = self._read("16B")
|
||||||
except struct.error:
|
except struct.error as e:
|
||||||
raise ELFInvalid("unable to parse identification")
|
raise ELFInvalid("unable to parse identification") from e
|
||||||
magic = bytes(ident[:4])
|
magic = bytes(ident[:4])
|
||||||
if magic != b"\x7fELF":
|
if magic != b"\x7fELF":
|
||||||
raise ELFInvalid(f"invalid magic: {magic!r}")
|
raise ELFInvalid(f"invalid magic: {magic!r}")
|
||||||
|
@ -67,11 +67,11 @@ class ELFFile:
|
||||||
(2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB.
|
(2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB.
|
||||||
(2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
|
(2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
|
||||||
}[(self.capacity, self.encoding)]
|
}[(self.capacity, self.encoding)]
|
||||||
except KeyError:
|
except KeyError as e:
|
||||||
raise ELFInvalid(
|
raise ELFInvalid(
|
||||||
f"unrecognized capacity ({self.capacity}) or "
|
f"unrecognized capacity ({self.capacity}) or "
|
||||||
f"encoding ({self.encoding})"
|
f"encoding ({self.encoding})"
|
||||||
)
|
) from e
|
||||||
|
|
||||||
try:
|
try:
|
||||||
(
|
(
|
||||||
|
|
|
@ -164,6 +164,7 @@ def _parse_glibc_version(version_str: str) -> tuple[int, int]:
|
||||||
f"Expected glibc version with 2 components major.minor,"
|
f"Expected glibc version with 2 components major.minor,"
|
||||||
f" got: {version_str}",
|
f" got: {version_str}",
|
||||||
RuntimeWarning,
|
RuntimeWarning,
|
||||||
|
stacklevel=2,
|
||||||
)
|
)
|
||||||
return -1, -1
|
return -1, -1
|
||||||
return int(m.group("major")), int(m.group("minor"))
|
return int(m.group("major")), int(m.group("minor"))
|
||||||
|
|
145
lib/packaging/licenses/__init__.py
Normal file
145
lib/packaging/licenses/__init__.py
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
#######################################################################################
|
||||||
|
#
|
||||||
|
# Adapted from:
|
||||||
|
# https://github.com/pypa/hatch/blob/5352e44/backend/src/hatchling/licenses/parse.py
|
||||||
|
#
|
||||||
|
# MIT License
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-present Ofek Lev <oss@ofek.dev>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||||
|
# software and associated documentation files (the "Software"), to deal in the Software
|
||||||
|
# without restriction, including without limitation the rights to use, copy, modify,
|
||||||
|
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in all copies
|
||||||
|
# or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||||
|
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||||
|
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# With additional allowance of arbitrary `LicenseRef-` identifiers, not just
|
||||||
|
# `LicenseRef-Public-Domain` and `LicenseRef-Proprietary`.
|
||||||
|
#
|
||||||
|
#######################################################################################
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
|
from typing import NewType, cast
|
||||||
|
|
||||||
|
from packaging.licenses._spdx import EXCEPTIONS, LICENSES
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"NormalizedLicenseExpression",
|
||||||
|
"InvalidLicenseExpression",
|
||||||
|
"canonicalize_license_expression",
|
||||||
|
]
|
||||||
|
|
||||||
|
license_ref_allowed = re.compile("^[A-Za-z0-9.-]*$")
|
||||||
|
|
||||||
|
NormalizedLicenseExpression = NewType("NormalizedLicenseExpression", str)
|
||||||
|
|
||||||
|
|
||||||
|
class InvalidLicenseExpression(ValueError):
|
||||||
|
"""Raised when a license-expression string is invalid
|
||||||
|
|
||||||
|
>>> canonicalize_license_expression("invalid")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid'
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def canonicalize_license_expression(
|
||||||
|
raw_license_expression: str,
|
||||||
|
) -> NormalizedLicenseExpression:
|
||||||
|
if not raw_license_expression:
|
||||||
|
message = f"Invalid license expression: {raw_license_expression!r}"
|
||||||
|
raise InvalidLicenseExpression(message)
|
||||||
|
|
||||||
|
# Pad any parentheses so tokenization can be achieved by merely splitting on
|
||||||
|
# whitespace.
|
||||||
|
license_expression = raw_license_expression.replace("(", " ( ").replace(")", " ) ")
|
||||||
|
licenseref_prefix = "LicenseRef-"
|
||||||
|
license_refs = {
|
||||||
|
ref.lower(): "LicenseRef-" + ref[len(licenseref_prefix) :]
|
||||||
|
for ref in license_expression.split()
|
||||||
|
if ref.lower().startswith(licenseref_prefix.lower())
|
||||||
|
}
|
||||||
|
|
||||||
|
# Normalize to lower case so we can look up licenses/exceptions
|
||||||
|
# and so boolean operators are Python-compatible.
|
||||||
|
license_expression = license_expression.lower()
|
||||||
|
|
||||||
|
tokens = license_expression.split()
|
||||||
|
|
||||||
|
# Rather than implementing boolean logic, we create an expression that Python can
|
||||||
|
# parse. Everything that is not involved with the grammar itself is treated as
|
||||||
|
# `False` and the expression should evaluate as such.
|
||||||
|
python_tokens = []
|
||||||
|
for token in tokens:
|
||||||
|
if token not in {"or", "and", "with", "(", ")"}:
|
||||||
|
python_tokens.append("False")
|
||||||
|
elif token == "with":
|
||||||
|
python_tokens.append("or")
|
||||||
|
elif token == "(" and python_tokens and python_tokens[-1] not in {"or", "and"}:
|
||||||
|
message = f"Invalid license expression: {raw_license_expression!r}"
|
||||||
|
raise InvalidLicenseExpression(message)
|
||||||
|
else:
|
||||||
|
python_tokens.append(token)
|
||||||
|
|
||||||
|
python_expression = " ".join(python_tokens)
|
||||||
|
try:
|
||||||
|
invalid = eval(python_expression, globals(), locals())
|
||||||
|
except Exception:
|
||||||
|
invalid = True
|
||||||
|
|
||||||
|
if invalid is not False:
|
||||||
|
message = f"Invalid license expression: {raw_license_expression!r}"
|
||||||
|
raise InvalidLicenseExpression(message) from None
|
||||||
|
|
||||||
|
# Take a final pass to check for unknown licenses/exceptions.
|
||||||
|
normalized_tokens = []
|
||||||
|
for token in tokens:
|
||||||
|
if token in {"or", "and", "with", "(", ")"}:
|
||||||
|
normalized_tokens.append(token.upper())
|
||||||
|
continue
|
||||||
|
|
||||||
|
if normalized_tokens and normalized_tokens[-1] == "WITH":
|
||||||
|
if token not in EXCEPTIONS:
|
||||||
|
message = f"Unknown license exception: {token!r}"
|
||||||
|
raise InvalidLicenseExpression(message)
|
||||||
|
|
||||||
|
normalized_tokens.append(EXCEPTIONS[token]["id"])
|
||||||
|
else:
|
||||||
|
if token.endswith("+"):
|
||||||
|
final_token = token[:-1]
|
||||||
|
suffix = "+"
|
||||||
|
else:
|
||||||
|
final_token = token
|
||||||
|
suffix = ""
|
||||||
|
|
||||||
|
if final_token.startswith("licenseref-"):
|
||||||
|
if not license_ref_allowed.match(final_token):
|
||||||
|
message = f"Invalid licenseref: {final_token!r}"
|
||||||
|
raise InvalidLicenseExpression(message)
|
||||||
|
normalized_tokens.append(license_refs[final_token] + suffix)
|
||||||
|
else:
|
||||||
|
if final_token not in LICENSES:
|
||||||
|
message = f"Unknown license: {final_token!r}"
|
||||||
|
raise InvalidLicenseExpression(message)
|
||||||
|
normalized_tokens.append(LICENSES[final_token]["id"] + suffix)
|
||||||
|
|
||||||
|
normalized_expression = " ".join(normalized_tokens)
|
||||||
|
|
||||||
|
return cast(
|
||||||
|
NormalizedLicenseExpression,
|
||||||
|
normalized_expression.replace("( ", "(").replace(" )", ")"),
|
||||||
|
)
|
759
lib/packaging/licenses/_spdx.py
Normal file
759
lib/packaging/licenses/_spdx.py
Normal file
|
@ -0,0 +1,759 @@
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TypedDict
|
||||||
|
|
||||||
|
class SPDXLicense(TypedDict):
|
||||||
|
id: str
|
||||||
|
deprecated: bool
|
||||||
|
|
||||||
|
class SPDXException(TypedDict):
|
||||||
|
id: str
|
||||||
|
deprecated: bool
|
||||||
|
|
||||||
|
|
||||||
|
VERSION = '3.25.0'
|
||||||
|
|
||||||
|
LICENSES: dict[str, SPDXLicense] = {
|
||||||
|
'0bsd': {'id': '0BSD', 'deprecated': False},
|
||||||
|
'3d-slicer-1.0': {'id': '3D-Slicer-1.0', 'deprecated': False},
|
||||||
|
'aal': {'id': 'AAL', 'deprecated': False},
|
||||||
|
'abstyles': {'id': 'Abstyles', 'deprecated': False},
|
||||||
|
'adacore-doc': {'id': 'AdaCore-doc', 'deprecated': False},
|
||||||
|
'adobe-2006': {'id': 'Adobe-2006', 'deprecated': False},
|
||||||
|
'adobe-display-postscript': {'id': 'Adobe-Display-PostScript', 'deprecated': False},
|
||||||
|
'adobe-glyph': {'id': 'Adobe-Glyph', 'deprecated': False},
|
||||||
|
'adobe-utopia': {'id': 'Adobe-Utopia', 'deprecated': False},
|
||||||
|
'adsl': {'id': 'ADSL', 'deprecated': False},
|
||||||
|
'afl-1.1': {'id': 'AFL-1.1', 'deprecated': False},
|
||||||
|
'afl-1.2': {'id': 'AFL-1.2', 'deprecated': False},
|
||||||
|
'afl-2.0': {'id': 'AFL-2.0', 'deprecated': False},
|
||||||
|
'afl-2.1': {'id': 'AFL-2.1', 'deprecated': False},
|
||||||
|
'afl-3.0': {'id': 'AFL-3.0', 'deprecated': False},
|
||||||
|
'afmparse': {'id': 'Afmparse', 'deprecated': False},
|
||||||
|
'agpl-1.0': {'id': 'AGPL-1.0', 'deprecated': True},
|
||||||
|
'agpl-1.0-only': {'id': 'AGPL-1.0-only', 'deprecated': False},
|
||||||
|
'agpl-1.0-or-later': {'id': 'AGPL-1.0-or-later', 'deprecated': False},
|
||||||
|
'agpl-3.0': {'id': 'AGPL-3.0', 'deprecated': True},
|
||||||
|
'agpl-3.0-only': {'id': 'AGPL-3.0-only', 'deprecated': False},
|
||||||
|
'agpl-3.0-or-later': {'id': 'AGPL-3.0-or-later', 'deprecated': False},
|
||||||
|
'aladdin': {'id': 'Aladdin', 'deprecated': False},
|
||||||
|
'amd-newlib': {'id': 'AMD-newlib', 'deprecated': False},
|
||||||
|
'amdplpa': {'id': 'AMDPLPA', 'deprecated': False},
|
||||||
|
'aml': {'id': 'AML', 'deprecated': False},
|
||||||
|
'aml-glslang': {'id': 'AML-glslang', 'deprecated': False},
|
||||||
|
'ampas': {'id': 'AMPAS', 'deprecated': False},
|
||||||
|
'antlr-pd': {'id': 'ANTLR-PD', 'deprecated': False},
|
||||||
|
'antlr-pd-fallback': {'id': 'ANTLR-PD-fallback', 'deprecated': False},
|
||||||
|
'any-osi': {'id': 'any-OSI', 'deprecated': False},
|
||||||
|
'apache-1.0': {'id': 'Apache-1.0', 'deprecated': False},
|
||||||
|
'apache-1.1': {'id': 'Apache-1.1', 'deprecated': False},
|
||||||
|
'apache-2.0': {'id': 'Apache-2.0', 'deprecated': False},
|
||||||
|
'apafml': {'id': 'APAFML', 'deprecated': False},
|
||||||
|
'apl-1.0': {'id': 'APL-1.0', 'deprecated': False},
|
||||||
|
'app-s2p': {'id': 'App-s2p', 'deprecated': False},
|
||||||
|
'apsl-1.0': {'id': 'APSL-1.0', 'deprecated': False},
|
||||||
|
'apsl-1.1': {'id': 'APSL-1.1', 'deprecated': False},
|
||||||
|
'apsl-1.2': {'id': 'APSL-1.2', 'deprecated': False},
|
||||||
|
'apsl-2.0': {'id': 'APSL-2.0', 'deprecated': False},
|
||||||
|
'arphic-1999': {'id': 'Arphic-1999', 'deprecated': False},
|
||||||
|
'artistic-1.0': {'id': 'Artistic-1.0', 'deprecated': False},
|
||||||
|
'artistic-1.0-cl8': {'id': 'Artistic-1.0-cl8', 'deprecated': False},
|
||||||
|
'artistic-1.0-perl': {'id': 'Artistic-1.0-Perl', 'deprecated': False},
|
||||||
|
'artistic-2.0': {'id': 'Artistic-2.0', 'deprecated': False},
|
||||||
|
'aswf-digital-assets-1.0': {'id': 'ASWF-Digital-Assets-1.0', 'deprecated': False},
|
||||||
|
'aswf-digital-assets-1.1': {'id': 'ASWF-Digital-Assets-1.1', 'deprecated': False},
|
||||||
|
'baekmuk': {'id': 'Baekmuk', 'deprecated': False},
|
||||||
|
'bahyph': {'id': 'Bahyph', 'deprecated': False},
|
||||||
|
'barr': {'id': 'Barr', 'deprecated': False},
|
||||||
|
'bcrypt-solar-designer': {'id': 'bcrypt-Solar-Designer', 'deprecated': False},
|
||||||
|
'beerware': {'id': 'Beerware', 'deprecated': False},
|
||||||
|
'bitstream-charter': {'id': 'Bitstream-Charter', 'deprecated': False},
|
||||||
|
'bitstream-vera': {'id': 'Bitstream-Vera', 'deprecated': False},
|
||||||
|
'bittorrent-1.0': {'id': 'BitTorrent-1.0', 'deprecated': False},
|
||||||
|
'bittorrent-1.1': {'id': 'BitTorrent-1.1', 'deprecated': False},
|
||||||
|
'blessing': {'id': 'blessing', 'deprecated': False},
|
||||||
|
'blueoak-1.0.0': {'id': 'BlueOak-1.0.0', 'deprecated': False},
|
||||||
|
'boehm-gc': {'id': 'Boehm-GC', 'deprecated': False},
|
||||||
|
'borceux': {'id': 'Borceux', 'deprecated': False},
|
||||||
|
'brian-gladman-2-clause': {'id': 'Brian-Gladman-2-Clause', 'deprecated': False},
|
||||||
|
'brian-gladman-3-clause': {'id': 'Brian-Gladman-3-Clause', 'deprecated': False},
|
||||||
|
'bsd-1-clause': {'id': 'BSD-1-Clause', 'deprecated': False},
|
||||||
|
'bsd-2-clause': {'id': 'BSD-2-Clause', 'deprecated': False},
|
||||||
|
'bsd-2-clause-darwin': {'id': 'BSD-2-Clause-Darwin', 'deprecated': False},
|
||||||
|
'bsd-2-clause-first-lines': {'id': 'BSD-2-Clause-first-lines', 'deprecated': False},
|
||||||
|
'bsd-2-clause-freebsd': {'id': 'BSD-2-Clause-FreeBSD', 'deprecated': True},
|
||||||
|
'bsd-2-clause-netbsd': {'id': 'BSD-2-Clause-NetBSD', 'deprecated': True},
|
||||||
|
'bsd-2-clause-patent': {'id': 'BSD-2-Clause-Patent', 'deprecated': False},
|
||||||
|
'bsd-2-clause-views': {'id': 'BSD-2-Clause-Views', 'deprecated': False},
|
||||||
|
'bsd-3-clause': {'id': 'BSD-3-Clause', 'deprecated': False},
|
||||||
|
'bsd-3-clause-acpica': {'id': 'BSD-3-Clause-acpica', 'deprecated': False},
|
||||||
|
'bsd-3-clause-attribution': {'id': 'BSD-3-Clause-Attribution', 'deprecated': False},
|
||||||
|
'bsd-3-clause-clear': {'id': 'BSD-3-Clause-Clear', 'deprecated': False},
|
||||||
|
'bsd-3-clause-flex': {'id': 'BSD-3-Clause-flex', 'deprecated': False},
|
||||||
|
'bsd-3-clause-hp': {'id': 'BSD-3-Clause-HP', 'deprecated': False},
|
||||||
|
'bsd-3-clause-lbnl': {'id': 'BSD-3-Clause-LBNL', 'deprecated': False},
|
||||||
|
'bsd-3-clause-modification': {'id': 'BSD-3-Clause-Modification', 'deprecated': False},
|
||||||
|
'bsd-3-clause-no-military-license': {'id': 'BSD-3-Clause-No-Military-License', 'deprecated': False},
|
||||||
|
'bsd-3-clause-no-nuclear-license': {'id': 'BSD-3-Clause-No-Nuclear-License', 'deprecated': False},
|
||||||
|
'bsd-3-clause-no-nuclear-license-2014': {'id': 'BSD-3-Clause-No-Nuclear-License-2014', 'deprecated': False},
|
||||||
|
'bsd-3-clause-no-nuclear-warranty': {'id': 'BSD-3-Clause-No-Nuclear-Warranty', 'deprecated': False},
|
||||||
|
'bsd-3-clause-open-mpi': {'id': 'BSD-3-Clause-Open-MPI', 'deprecated': False},
|
||||||
|
'bsd-3-clause-sun': {'id': 'BSD-3-Clause-Sun', 'deprecated': False},
|
||||||
|
'bsd-4-clause': {'id': 'BSD-4-Clause', 'deprecated': False},
|
||||||
|
'bsd-4-clause-shortened': {'id': 'BSD-4-Clause-Shortened', 'deprecated': False},
|
||||||
|
'bsd-4-clause-uc': {'id': 'BSD-4-Clause-UC', 'deprecated': False},
|
||||||
|
'bsd-4.3reno': {'id': 'BSD-4.3RENO', 'deprecated': False},
|
||||||
|
'bsd-4.3tahoe': {'id': 'BSD-4.3TAHOE', 'deprecated': False},
|
||||||
|
'bsd-advertising-acknowledgement': {'id': 'BSD-Advertising-Acknowledgement', 'deprecated': False},
|
||||||
|
'bsd-attribution-hpnd-disclaimer': {'id': 'BSD-Attribution-HPND-disclaimer', 'deprecated': False},
|
||||||
|
'bsd-inferno-nettverk': {'id': 'BSD-Inferno-Nettverk', 'deprecated': False},
|
||||||
|
'bsd-protection': {'id': 'BSD-Protection', 'deprecated': False},
|
||||||
|
'bsd-source-beginning-file': {'id': 'BSD-Source-beginning-file', 'deprecated': False},
|
||||||
|
'bsd-source-code': {'id': 'BSD-Source-Code', 'deprecated': False},
|
||||||
|
'bsd-systemics': {'id': 'BSD-Systemics', 'deprecated': False},
|
||||||
|
'bsd-systemics-w3works': {'id': 'BSD-Systemics-W3Works', 'deprecated': False},
|
||||||
|
'bsl-1.0': {'id': 'BSL-1.0', 'deprecated': False},
|
||||||
|
'busl-1.1': {'id': 'BUSL-1.1', 'deprecated': False},
|
||||||
|
'bzip2-1.0.5': {'id': 'bzip2-1.0.5', 'deprecated': True},
|
||||||
|
'bzip2-1.0.6': {'id': 'bzip2-1.0.6', 'deprecated': False},
|
||||||
|
'c-uda-1.0': {'id': 'C-UDA-1.0', 'deprecated': False},
|
||||||
|
'cal-1.0': {'id': 'CAL-1.0', 'deprecated': False},
|
||||||
|
'cal-1.0-combined-work-exception': {'id': 'CAL-1.0-Combined-Work-Exception', 'deprecated': False},
|
||||||
|
'caldera': {'id': 'Caldera', 'deprecated': False},
|
||||||
|
'caldera-no-preamble': {'id': 'Caldera-no-preamble', 'deprecated': False},
|
||||||
|
'catharon': {'id': 'Catharon', 'deprecated': False},
|
||||||
|
'catosl-1.1': {'id': 'CATOSL-1.1', 'deprecated': False},
|
||||||
|
'cc-by-1.0': {'id': 'CC-BY-1.0', 'deprecated': False},
|
||||||
|
'cc-by-2.0': {'id': 'CC-BY-2.0', 'deprecated': False},
|
||||||
|
'cc-by-2.5': {'id': 'CC-BY-2.5', 'deprecated': False},
|
||||||
|
'cc-by-2.5-au': {'id': 'CC-BY-2.5-AU', 'deprecated': False},
|
||||||
|
'cc-by-3.0': {'id': 'CC-BY-3.0', 'deprecated': False},
|
||||||
|
'cc-by-3.0-at': {'id': 'CC-BY-3.0-AT', 'deprecated': False},
|
||||||
|
'cc-by-3.0-au': {'id': 'CC-BY-3.0-AU', 'deprecated': False},
|
||||||
|
'cc-by-3.0-de': {'id': 'CC-BY-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-3.0-igo': {'id': 'CC-BY-3.0-IGO', 'deprecated': False},
|
||||||
|
'cc-by-3.0-nl': {'id': 'CC-BY-3.0-NL', 'deprecated': False},
|
||||||
|
'cc-by-3.0-us': {'id': 'CC-BY-3.0-US', 'deprecated': False},
|
||||||
|
'cc-by-4.0': {'id': 'CC-BY-4.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-1.0': {'id': 'CC-BY-NC-1.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-2.0': {'id': 'CC-BY-NC-2.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-2.5': {'id': 'CC-BY-NC-2.5', 'deprecated': False},
|
||||||
|
'cc-by-nc-3.0': {'id': 'CC-BY-NC-3.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-3.0-de': {'id': 'CC-BY-NC-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-nc-4.0': {'id': 'CC-BY-NC-4.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-1.0': {'id': 'CC-BY-NC-ND-1.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-2.0': {'id': 'CC-BY-NC-ND-2.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-2.5': {'id': 'CC-BY-NC-ND-2.5', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-3.0': {'id': 'CC-BY-NC-ND-3.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-3.0-de': {'id': 'CC-BY-NC-ND-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-3.0-igo': {'id': 'CC-BY-NC-ND-3.0-IGO', 'deprecated': False},
|
||||||
|
'cc-by-nc-nd-4.0': {'id': 'CC-BY-NC-ND-4.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-1.0': {'id': 'CC-BY-NC-SA-1.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-2.0': {'id': 'CC-BY-NC-SA-2.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-2.0-de': {'id': 'CC-BY-NC-SA-2.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-2.0-fr': {'id': 'CC-BY-NC-SA-2.0-FR', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-2.0-uk': {'id': 'CC-BY-NC-SA-2.0-UK', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-2.5': {'id': 'CC-BY-NC-SA-2.5', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-3.0': {'id': 'CC-BY-NC-SA-3.0', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-3.0-de': {'id': 'CC-BY-NC-SA-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-3.0-igo': {'id': 'CC-BY-NC-SA-3.0-IGO', 'deprecated': False},
|
||||||
|
'cc-by-nc-sa-4.0': {'id': 'CC-BY-NC-SA-4.0', 'deprecated': False},
|
||||||
|
'cc-by-nd-1.0': {'id': 'CC-BY-ND-1.0', 'deprecated': False},
|
||||||
|
'cc-by-nd-2.0': {'id': 'CC-BY-ND-2.0', 'deprecated': False},
|
||||||
|
'cc-by-nd-2.5': {'id': 'CC-BY-ND-2.5', 'deprecated': False},
|
||||||
|
'cc-by-nd-3.0': {'id': 'CC-BY-ND-3.0', 'deprecated': False},
|
||||||
|
'cc-by-nd-3.0-de': {'id': 'CC-BY-ND-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-nd-4.0': {'id': 'CC-BY-ND-4.0', 'deprecated': False},
|
||||||
|
'cc-by-sa-1.0': {'id': 'CC-BY-SA-1.0', 'deprecated': False},
|
||||||
|
'cc-by-sa-2.0': {'id': 'CC-BY-SA-2.0', 'deprecated': False},
|
||||||
|
'cc-by-sa-2.0-uk': {'id': 'CC-BY-SA-2.0-UK', 'deprecated': False},
|
||||||
|
'cc-by-sa-2.1-jp': {'id': 'CC-BY-SA-2.1-JP', 'deprecated': False},
|
||||||
|
'cc-by-sa-2.5': {'id': 'CC-BY-SA-2.5', 'deprecated': False},
|
||||||
|
'cc-by-sa-3.0': {'id': 'CC-BY-SA-3.0', 'deprecated': False},
|
||||||
|
'cc-by-sa-3.0-at': {'id': 'CC-BY-SA-3.0-AT', 'deprecated': False},
|
||||||
|
'cc-by-sa-3.0-de': {'id': 'CC-BY-SA-3.0-DE', 'deprecated': False},
|
||||||
|
'cc-by-sa-3.0-igo': {'id': 'CC-BY-SA-3.0-IGO', 'deprecated': False},
|
||||||
|
'cc-by-sa-4.0': {'id': 'CC-BY-SA-4.0', 'deprecated': False},
|
||||||
|
'cc-pddc': {'id': 'CC-PDDC', 'deprecated': False},
|
||||||
|
'cc0-1.0': {'id': 'CC0-1.0', 'deprecated': False},
|
||||||
|
'cddl-1.0': {'id': 'CDDL-1.0', 'deprecated': False},
|
||||||
|
'cddl-1.1': {'id': 'CDDL-1.1', 'deprecated': False},
|
||||||
|
'cdl-1.0': {'id': 'CDL-1.0', 'deprecated': False},
|
||||||
|
'cdla-permissive-1.0': {'id': 'CDLA-Permissive-1.0', 'deprecated': False},
|
||||||
|
'cdla-permissive-2.0': {'id': 'CDLA-Permissive-2.0', 'deprecated': False},
|
||||||
|
'cdla-sharing-1.0': {'id': 'CDLA-Sharing-1.0', 'deprecated': False},
|
||||||
|
'cecill-1.0': {'id': 'CECILL-1.0', 'deprecated': False},
|
||||||
|
'cecill-1.1': {'id': 'CECILL-1.1', 'deprecated': False},
|
||||||
|
'cecill-2.0': {'id': 'CECILL-2.0', 'deprecated': False},
|
||||||
|
'cecill-2.1': {'id': 'CECILL-2.1', 'deprecated': False},
|
||||||
|
'cecill-b': {'id': 'CECILL-B', 'deprecated': False},
|
||||||
|
'cecill-c': {'id': 'CECILL-C', 'deprecated': False},
|
||||||
|
'cern-ohl-1.1': {'id': 'CERN-OHL-1.1', 'deprecated': False},
|
||||||
|
'cern-ohl-1.2': {'id': 'CERN-OHL-1.2', 'deprecated': False},
|
||||||
|
'cern-ohl-p-2.0': {'id': 'CERN-OHL-P-2.0', 'deprecated': False},
|
||||||
|
'cern-ohl-s-2.0': {'id': 'CERN-OHL-S-2.0', 'deprecated': False},
|
||||||
|
'cern-ohl-w-2.0': {'id': 'CERN-OHL-W-2.0', 'deprecated': False},
|
||||||
|
'cfitsio': {'id': 'CFITSIO', 'deprecated': False},
|
||||||
|
'check-cvs': {'id': 'check-cvs', 'deprecated': False},
|
||||||
|
'checkmk': {'id': 'checkmk', 'deprecated': False},
|
||||||
|
'clartistic': {'id': 'ClArtistic', 'deprecated': False},
|
||||||
|
'clips': {'id': 'Clips', 'deprecated': False},
|
||||||
|
'cmu-mach': {'id': 'CMU-Mach', 'deprecated': False},
|
||||||
|
'cmu-mach-nodoc': {'id': 'CMU-Mach-nodoc', 'deprecated': False},
|
||||||
|
'cnri-jython': {'id': 'CNRI-Jython', 'deprecated': False},
|
||||||
|
'cnri-python': {'id': 'CNRI-Python', 'deprecated': False},
|
||||||
|
'cnri-python-gpl-compatible': {'id': 'CNRI-Python-GPL-Compatible', 'deprecated': False},
|
||||||
|
'coil-1.0': {'id': 'COIL-1.0', 'deprecated': False},
|
||||||
|
'community-spec-1.0': {'id': 'Community-Spec-1.0', 'deprecated': False},
|
||||||
|
'condor-1.1': {'id': 'Condor-1.1', 'deprecated': False},
|
||||||
|
'copyleft-next-0.3.0': {'id': 'copyleft-next-0.3.0', 'deprecated': False},
|
||||||
|
'copyleft-next-0.3.1': {'id': 'copyleft-next-0.3.1', 'deprecated': False},
|
||||||
|
'cornell-lossless-jpeg': {'id': 'Cornell-Lossless-JPEG', 'deprecated': False},
|
||||||
|
'cpal-1.0': {'id': 'CPAL-1.0', 'deprecated': False},
|
||||||
|
'cpl-1.0': {'id': 'CPL-1.0', 'deprecated': False},
|
||||||
|
'cpol-1.02': {'id': 'CPOL-1.02', 'deprecated': False},
|
||||||
|
'cronyx': {'id': 'Cronyx', 'deprecated': False},
|
||||||
|
'crossword': {'id': 'Crossword', 'deprecated': False},
|
||||||
|
'crystalstacker': {'id': 'CrystalStacker', 'deprecated': False},
|
||||||
|
'cua-opl-1.0': {'id': 'CUA-OPL-1.0', 'deprecated': False},
|
||||||
|
'cube': {'id': 'Cube', 'deprecated': False},
|
||||||
|
'curl': {'id': 'curl', 'deprecated': False},
|
||||||
|
'cve-tou': {'id': 'cve-tou', 'deprecated': False},
|
||||||
|
'd-fsl-1.0': {'id': 'D-FSL-1.0', 'deprecated': False},
|
||||||
|
'dec-3-clause': {'id': 'DEC-3-Clause', 'deprecated': False},
|
||||||
|
'diffmark': {'id': 'diffmark', 'deprecated': False},
|
||||||
|
'dl-de-by-2.0': {'id': 'DL-DE-BY-2.0', 'deprecated': False},
|
||||||
|
'dl-de-zero-2.0': {'id': 'DL-DE-ZERO-2.0', 'deprecated': False},
|
||||||
|
'doc': {'id': 'DOC', 'deprecated': False},
|
||||||
|
'docbook-schema': {'id': 'DocBook-Schema', 'deprecated': False},
|
||||||
|
'docbook-xml': {'id': 'DocBook-XML', 'deprecated': False},
|
||||||
|
'dotseqn': {'id': 'Dotseqn', 'deprecated': False},
|
||||||
|
'drl-1.0': {'id': 'DRL-1.0', 'deprecated': False},
|
||||||
|
'drl-1.1': {'id': 'DRL-1.1', 'deprecated': False},
|
||||||
|
'dsdp': {'id': 'DSDP', 'deprecated': False},
|
||||||
|
'dtoa': {'id': 'dtoa', 'deprecated': False},
|
||||||
|
'dvipdfm': {'id': 'dvipdfm', 'deprecated': False},
|
||||||
|
'ecl-1.0': {'id': 'ECL-1.0', 'deprecated': False},
|
||||||
|
'ecl-2.0': {'id': 'ECL-2.0', 'deprecated': False},
|
||||||
|
'ecos-2.0': {'id': 'eCos-2.0', 'deprecated': True},
|
||||||
|
'efl-1.0': {'id': 'EFL-1.0', 'deprecated': False},
|
||||||
|
'efl-2.0': {'id': 'EFL-2.0', 'deprecated': False},
|
||||||
|
'egenix': {'id': 'eGenix', 'deprecated': False},
|
||||||
|
'elastic-2.0': {'id': 'Elastic-2.0', 'deprecated': False},
|
||||||
|
'entessa': {'id': 'Entessa', 'deprecated': False},
|
||||||
|
'epics': {'id': 'EPICS', 'deprecated': False},
|
||||||
|
'epl-1.0': {'id': 'EPL-1.0', 'deprecated': False},
|
||||||
|
'epl-2.0': {'id': 'EPL-2.0', 'deprecated': False},
|
||||||
|
'erlpl-1.1': {'id': 'ErlPL-1.1', 'deprecated': False},
|
||||||
|
'etalab-2.0': {'id': 'etalab-2.0', 'deprecated': False},
|
||||||
|
'eudatagrid': {'id': 'EUDatagrid', 'deprecated': False},
|
||||||
|
'eupl-1.0': {'id': 'EUPL-1.0', 'deprecated': False},
|
||||||
|
'eupl-1.1': {'id': 'EUPL-1.1', 'deprecated': False},
|
||||||
|
'eupl-1.2': {'id': 'EUPL-1.2', 'deprecated': False},
|
||||||
|
'eurosym': {'id': 'Eurosym', 'deprecated': False},
|
||||||
|
'fair': {'id': 'Fair', 'deprecated': False},
|
||||||
|
'fbm': {'id': 'FBM', 'deprecated': False},
|
||||||
|
'fdk-aac': {'id': 'FDK-AAC', 'deprecated': False},
|
||||||
|
'ferguson-twofish': {'id': 'Ferguson-Twofish', 'deprecated': False},
|
||||||
|
'frameworx-1.0': {'id': 'Frameworx-1.0', 'deprecated': False},
|
||||||
|
'freebsd-doc': {'id': 'FreeBSD-DOC', 'deprecated': False},
|
||||||
|
'freeimage': {'id': 'FreeImage', 'deprecated': False},
|
||||||
|
'fsfap': {'id': 'FSFAP', 'deprecated': False},
|
||||||
|
'fsfap-no-warranty-disclaimer': {'id': 'FSFAP-no-warranty-disclaimer', 'deprecated': False},
|
||||||
|
'fsful': {'id': 'FSFUL', 'deprecated': False},
|
||||||
|
'fsfullr': {'id': 'FSFULLR', 'deprecated': False},
|
||||||
|
'fsfullrwd': {'id': 'FSFULLRWD', 'deprecated': False},
|
||||||
|
'ftl': {'id': 'FTL', 'deprecated': False},
|
||||||
|
'furuseth': {'id': 'Furuseth', 'deprecated': False},
|
||||||
|
'fwlw': {'id': 'fwlw', 'deprecated': False},
|
||||||
|
'gcr-docs': {'id': 'GCR-docs', 'deprecated': False},
|
||||||
|
'gd': {'id': 'GD', 'deprecated': False},
|
||||||
|
'gfdl-1.1': {'id': 'GFDL-1.1', 'deprecated': True},
|
||||||
|
'gfdl-1.1-invariants-only': {'id': 'GFDL-1.1-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.1-invariants-or-later': {'id': 'GFDL-1.1-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.1-no-invariants-only': {'id': 'GFDL-1.1-no-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.1-no-invariants-or-later': {'id': 'GFDL-1.1-no-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.1-only': {'id': 'GFDL-1.1-only', 'deprecated': False},
|
||||||
|
'gfdl-1.1-or-later': {'id': 'GFDL-1.1-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.2': {'id': 'GFDL-1.2', 'deprecated': True},
|
||||||
|
'gfdl-1.2-invariants-only': {'id': 'GFDL-1.2-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.2-invariants-or-later': {'id': 'GFDL-1.2-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.2-no-invariants-only': {'id': 'GFDL-1.2-no-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.2-no-invariants-or-later': {'id': 'GFDL-1.2-no-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.2-only': {'id': 'GFDL-1.2-only', 'deprecated': False},
|
||||||
|
'gfdl-1.2-or-later': {'id': 'GFDL-1.2-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.3': {'id': 'GFDL-1.3', 'deprecated': True},
|
||||||
|
'gfdl-1.3-invariants-only': {'id': 'GFDL-1.3-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.3-invariants-or-later': {'id': 'GFDL-1.3-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.3-no-invariants-only': {'id': 'GFDL-1.3-no-invariants-only', 'deprecated': False},
|
||||||
|
'gfdl-1.3-no-invariants-or-later': {'id': 'GFDL-1.3-no-invariants-or-later', 'deprecated': False},
|
||||||
|
'gfdl-1.3-only': {'id': 'GFDL-1.3-only', 'deprecated': False},
|
||||||
|
'gfdl-1.3-or-later': {'id': 'GFDL-1.3-or-later', 'deprecated': False},
|
||||||
|
'giftware': {'id': 'Giftware', 'deprecated': False},
|
||||||
|
'gl2ps': {'id': 'GL2PS', 'deprecated': False},
|
||||||
|
'glide': {'id': 'Glide', 'deprecated': False},
|
||||||
|
'glulxe': {'id': 'Glulxe', 'deprecated': False},
|
||||||
|
'glwtpl': {'id': 'GLWTPL', 'deprecated': False},
|
||||||
|
'gnuplot': {'id': 'gnuplot', 'deprecated': False},
|
||||||
|
'gpl-1.0': {'id': 'GPL-1.0', 'deprecated': True},
|
||||||
|
'gpl-1.0+': {'id': 'GPL-1.0+', 'deprecated': True},
|
||||||
|
'gpl-1.0-only': {'id': 'GPL-1.0-only', 'deprecated': False},
|
||||||
|
'gpl-1.0-or-later': {'id': 'GPL-1.0-or-later', 'deprecated': False},
|
||||||
|
'gpl-2.0': {'id': 'GPL-2.0', 'deprecated': True},
|
||||||
|
'gpl-2.0+': {'id': 'GPL-2.0+', 'deprecated': True},
|
||||||
|
'gpl-2.0-only': {'id': 'GPL-2.0-only', 'deprecated': False},
|
||||||
|
'gpl-2.0-or-later': {'id': 'GPL-2.0-or-later', 'deprecated': False},
|
||||||
|
'gpl-2.0-with-autoconf-exception': {'id': 'GPL-2.0-with-autoconf-exception', 'deprecated': True},
|
||||||
|
'gpl-2.0-with-bison-exception': {'id': 'GPL-2.0-with-bison-exception', 'deprecated': True},
|
||||||
|
'gpl-2.0-with-classpath-exception': {'id': 'GPL-2.0-with-classpath-exception', 'deprecated': True},
|
||||||
|
'gpl-2.0-with-font-exception': {'id': 'GPL-2.0-with-font-exception', 'deprecated': True},
|
||||||
|
'gpl-2.0-with-gcc-exception': {'id': 'GPL-2.0-with-GCC-exception', 'deprecated': True},
|
||||||
|
'gpl-3.0': {'id': 'GPL-3.0', 'deprecated': True},
|
||||||
|
'gpl-3.0+': {'id': 'GPL-3.0+', 'deprecated': True},
|
||||||
|
'gpl-3.0-only': {'id': 'GPL-3.0-only', 'deprecated': False},
|
||||||
|
'gpl-3.0-or-later': {'id': 'GPL-3.0-or-later', 'deprecated': False},
|
||||||
|
'gpl-3.0-with-autoconf-exception': {'id': 'GPL-3.0-with-autoconf-exception', 'deprecated': True},
|
||||||
|
'gpl-3.0-with-gcc-exception': {'id': 'GPL-3.0-with-GCC-exception', 'deprecated': True},
|
||||||
|
'graphics-gems': {'id': 'Graphics-Gems', 'deprecated': False},
|
||||||
|
'gsoap-1.3b': {'id': 'gSOAP-1.3b', 'deprecated': False},
|
||||||
|
'gtkbook': {'id': 'gtkbook', 'deprecated': False},
|
||||||
|
'gutmann': {'id': 'Gutmann', 'deprecated': False},
|
||||||
|
'haskellreport': {'id': 'HaskellReport', 'deprecated': False},
|
||||||
|
'hdparm': {'id': 'hdparm', 'deprecated': False},
|
||||||
|
'hidapi': {'id': 'HIDAPI', 'deprecated': False},
|
||||||
|
'hippocratic-2.1': {'id': 'Hippocratic-2.1', 'deprecated': False},
|
||||||
|
'hp-1986': {'id': 'HP-1986', 'deprecated': False},
|
||||||
|
'hp-1989': {'id': 'HP-1989', 'deprecated': False},
|
||||||
|
'hpnd': {'id': 'HPND', 'deprecated': False},
|
||||||
|
'hpnd-dec': {'id': 'HPND-DEC', 'deprecated': False},
|
||||||
|
'hpnd-doc': {'id': 'HPND-doc', 'deprecated': False},
|
||||||
|
'hpnd-doc-sell': {'id': 'HPND-doc-sell', 'deprecated': False},
|
||||||
|
'hpnd-export-us': {'id': 'HPND-export-US', 'deprecated': False},
|
||||||
|
'hpnd-export-us-acknowledgement': {'id': 'HPND-export-US-acknowledgement', 'deprecated': False},
|
||||||
|
'hpnd-export-us-modify': {'id': 'HPND-export-US-modify', 'deprecated': False},
|
||||||
|
'hpnd-export2-us': {'id': 'HPND-export2-US', 'deprecated': False},
|
||||||
|
'hpnd-fenneberg-livingston': {'id': 'HPND-Fenneberg-Livingston', 'deprecated': False},
|
||||||
|
'hpnd-inria-imag': {'id': 'HPND-INRIA-IMAG', 'deprecated': False},
|
||||||
|
'hpnd-intel': {'id': 'HPND-Intel', 'deprecated': False},
|
||||||
|
'hpnd-kevlin-henney': {'id': 'HPND-Kevlin-Henney', 'deprecated': False},
|
||||||
|
'hpnd-markus-kuhn': {'id': 'HPND-Markus-Kuhn', 'deprecated': False},
|
||||||
|
'hpnd-merchantability-variant': {'id': 'HPND-merchantability-variant', 'deprecated': False},
|
||||||
|
'hpnd-mit-disclaimer': {'id': 'HPND-MIT-disclaimer', 'deprecated': False},
|
||||||
|
'hpnd-netrek': {'id': 'HPND-Netrek', 'deprecated': False},
|
||||||
|
'hpnd-pbmplus': {'id': 'HPND-Pbmplus', 'deprecated': False},
|
||||||
|
'hpnd-sell-mit-disclaimer-xserver': {'id': 'HPND-sell-MIT-disclaimer-xserver', 'deprecated': False},
|
||||||
|
'hpnd-sell-regexpr': {'id': 'HPND-sell-regexpr', 'deprecated': False},
|
||||||
|
'hpnd-sell-variant': {'id': 'HPND-sell-variant', 'deprecated': False},
|
||||||
|
'hpnd-sell-variant-mit-disclaimer': {'id': 'HPND-sell-variant-MIT-disclaimer', 'deprecated': False},
|
||||||
|
'hpnd-sell-variant-mit-disclaimer-rev': {'id': 'HPND-sell-variant-MIT-disclaimer-rev', 'deprecated': False},
|
||||||
|
'hpnd-uc': {'id': 'HPND-UC', 'deprecated': False},
|
||||||
|
'hpnd-uc-export-us': {'id': 'HPND-UC-export-US', 'deprecated': False},
|
||||||
|
'htmltidy': {'id': 'HTMLTIDY', 'deprecated': False},
|
||||||
|
'ibm-pibs': {'id': 'IBM-pibs', 'deprecated': False},
|
||||||
|
'icu': {'id': 'ICU', 'deprecated': False},
|
||||||
|
'iec-code-components-eula': {'id': 'IEC-Code-Components-EULA', 'deprecated': False},
|
||||||
|
'ijg': {'id': 'IJG', 'deprecated': False},
|
||||||
|
'ijg-short': {'id': 'IJG-short', 'deprecated': False},
|
||||||
|
'imagemagick': {'id': 'ImageMagick', 'deprecated': False},
|
||||||
|
'imatix': {'id': 'iMatix', 'deprecated': False},
|
||||||
|
'imlib2': {'id': 'Imlib2', 'deprecated': False},
|
||||||
|
'info-zip': {'id': 'Info-ZIP', 'deprecated': False},
|
||||||
|
'inner-net-2.0': {'id': 'Inner-Net-2.0', 'deprecated': False},
|
||||||
|
'intel': {'id': 'Intel', 'deprecated': False},
|
||||||
|
'intel-acpi': {'id': 'Intel-ACPI', 'deprecated': False},
|
||||||
|
'interbase-1.0': {'id': 'Interbase-1.0', 'deprecated': False},
|
||||||
|
'ipa': {'id': 'IPA', 'deprecated': False},
|
||||||
|
'ipl-1.0': {'id': 'IPL-1.0', 'deprecated': False},
|
||||||
|
'isc': {'id': 'ISC', 'deprecated': False},
|
||||||
|
'isc-veillard': {'id': 'ISC-Veillard', 'deprecated': False},
|
||||||
|
'jam': {'id': 'Jam', 'deprecated': False},
|
||||||
|
'jasper-2.0': {'id': 'JasPer-2.0', 'deprecated': False},
|
||||||
|
'jpl-image': {'id': 'JPL-image', 'deprecated': False},
|
||||||
|
'jpnic': {'id': 'JPNIC', 'deprecated': False},
|
||||||
|
'json': {'id': 'JSON', 'deprecated': False},
|
||||||
|
'kastrup': {'id': 'Kastrup', 'deprecated': False},
|
||||||
|
'kazlib': {'id': 'Kazlib', 'deprecated': False},
|
||||||
|
'knuth-ctan': {'id': 'Knuth-CTAN', 'deprecated': False},
|
||||||
|
'lal-1.2': {'id': 'LAL-1.2', 'deprecated': False},
|
||||||
|
'lal-1.3': {'id': 'LAL-1.3', 'deprecated': False},
|
||||||
|
'latex2e': {'id': 'Latex2e', 'deprecated': False},
|
||||||
|
'latex2e-translated-notice': {'id': 'Latex2e-translated-notice', 'deprecated': False},
|
||||||
|
'leptonica': {'id': 'Leptonica', 'deprecated': False},
|
||||||
|
'lgpl-2.0': {'id': 'LGPL-2.0', 'deprecated': True},
|
||||||
|
'lgpl-2.0+': {'id': 'LGPL-2.0+', 'deprecated': True},
|
||||||
|
'lgpl-2.0-only': {'id': 'LGPL-2.0-only', 'deprecated': False},
|
||||||
|
'lgpl-2.0-or-later': {'id': 'LGPL-2.0-or-later', 'deprecated': False},
|
||||||
|
'lgpl-2.1': {'id': 'LGPL-2.1', 'deprecated': True},
|
||||||
|
'lgpl-2.1+': {'id': 'LGPL-2.1+', 'deprecated': True},
|
||||||
|
'lgpl-2.1-only': {'id': 'LGPL-2.1-only', 'deprecated': False},
|
||||||
|
'lgpl-2.1-or-later': {'id': 'LGPL-2.1-or-later', 'deprecated': False},
|
||||||
|
'lgpl-3.0': {'id': 'LGPL-3.0', 'deprecated': True},
|
||||||
|
'lgpl-3.0+': {'id': 'LGPL-3.0+', 'deprecated': True},
|
||||||
|
'lgpl-3.0-only': {'id': 'LGPL-3.0-only', 'deprecated': False},
|
||||||
|
'lgpl-3.0-or-later': {'id': 'LGPL-3.0-or-later', 'deprecated': False},
|
||||||
|
'lgpllr': {'id': 'LGPLLR', 'deprecated': False},
|
||||||
|
'libpng': {'id': 'Libpng', 'deprecated': False},
|
||||||
|
'libpng-2.0': {'id': 'libpng-2.0', 'deprecated': False},
|
||||||
|
'libselinux-1.0': {'id': 'libselinux-1.0', 'deprecated': False},
|
||||||
|
'libtiff': {'id': 'libtiff', 'deprecated': False},
|
||||||
|
'libutil-david-nugent': {'id': 'libutil-David-Nugent', 'deprecated': False},
|
||||||
|
'liliq-p-1.1': {'id': 'LiLiQ-P-1.1', 'deprecated': False},
|
||||||
|
'liliq-r-1.1': {'id': 'LiLiQ-R-1.1', 'deprecated': False},
|
||||||
|
'liliq-rplus-1.1': {'id': 'LiLiQ-Rplus-1.1', 'deprecated': False},
|
||||||
|
'linux-man-pages-1-para': {'id': 'Linux-man-pages-1-para', 'deprecated': False},
|
||||||
|
'linux-man-pages-copyleft': {'id': 'Linux-man-pages-copyleft', 'deprecated': False},
|
||||||
|
'linux-man-pages-copyleft-2-para': {'id': 'Linux-man-pages-copyleft-2-para', 'deprecated': False},
|
||||||
|
'linux-man-pages-copyleft-var': {'id': 'Linux-man-pages-copyleft-var', 'deprecated': False},
|
||||||
|
'linux-openib': {'id': 'Linux-OpenIB', 'deprecated': False},
|
||||||
|
'loop': {'id': 'LOOP', 'deprecated': False},
|
||||||
|
'lpd-document': {'id': 'LPD-document', 'deprecated': False},
|
||||||
|
'lpl-1.0': {'id': 'LPL-1.0', 'deprecated': False},
|
||||||
|
'lpl-1.02': {'id': 'LPL-1.02', 'deprecated': False},
|
||||||
|
'lppl-1.0': {'id': 'LPPL-1.0', 'deprecated': False},
|
||||||
|
'lppl-1.1': {'id': 'LPPL-1.1', 'deprecated': False},
|
||||||
|
'lppl-1.2': {'id': 'LPPL-1.2', 'deprecated': False},
|
||||||
|
'lppl-1.3a': {'id': 'LPPL-1.3a', 'deprecated': False},
|
||||||
|
'lppl-1.3c': {'id': 'LPPL-1.3c', 'deprecated': False},
|
||||||
|
'lsof': {'id': 'lsof', 'deprecated': False},
|
||||||
|
'lucida-bitmap-fonts': {'id': 'Lucida-Bitmap-Fonts', 'deprecated': False},
|
||||||
|
'lzma-sdk-9.11-to-9.20': {'id': 'LZMA-SDK-9.11-to-9.20', 'deprecated': False},
|
||||||
|
'lzma-sdk-9.22': {'id': 'LZMA-SDK-9.22', 'deprecated': False},
|
||||||
|
'mackerras-3-clause': {'id': 'Mackerras-3-Clause', 'deprecated': False},
|
||||||
|
'mackerras-3-clause-acknowledgment': {'id': 'Mackerras-3-Clause-acknowledgment', 'deprecated': False},
|
||||||
|
'magaz': {'id': 'magaz', 'deprecated': False},
|
||||||
|
'mailprio': {'id': 'mailprio', 'deprecated': False},
|
||||||
|
'makeindex': {'id': 'MakeIndex', 'deprecated': False},
|
||||||
|
'martin-birgmeier': {'id': 'Martin-Birgmeier', 'deprecated': False},
|
||||||
|
'mcphee-slideshow': {'id': 'McPhee-slideshow', 'deprecated': False},
|
||||||
|
'metamail': {'id': 'metamail', 'deprecated': False},
|
||||||
|
'minpack': {'id': 'Minpack', 'deprecated': False},
|
||||||
|
'miros': {'id': 'MirOS', 'deprecated': False},
|
||||||
|
'mit': {'id': 'MIT', 'deprecated': False},
|
||||||
|
'mit-0': {'id': 'MIT-0', 'deprecated': False},
|
||||||
|
'mit-advertising': {'id': 'MIT-advertising', 'deprecated': False},
|
||||||
|
'mit-cmu': {'id': 'MIT-CMU', 'deprecated': False},
|
||||||
|
'mit-enna': {'id': 'MIT-enna', 'deprecated': False},
|
||||||
|
'mit-feh': {'id': 'MIT-feh', 'deprecated': False},
|
||||||
|
'mit-festival': {'id': 'MIT-Festival', 'deprecated': False},
|
||||||
|
'mit-khronos-old': {'id': 'MIT-Khronos-old', 'deprecated': False},
|
||||||
|
'mit-modern-variant': {'id': 'MIT-Modern-Variant', 'deprecated': False},
|
||||||
|
'mit-open-group': {'id': 'MIT-open-group', 'deprecated': False},
|
||||||
|
'mit-testregex': {'id': 'MIT-testregex', 'deprecated': False},
|
||||||
|
'mit-wu': {'id': 'MIT-Wu', 'deprecated': False},
|
||||||
|
'mitnfa': {'id': 'MITNFA', 'deprecated': False},
|
||||||
|
'mmixware': {'id': 'MMIXware', 'deprecated': False},
|
||||||
|
'motosoto': {'id': 'Motosoto', 'deprecated': False},
|
||||||
|
'mpeg-ssg': {'id': 'MPEG-SSG', 'deprecated': False},
|
||||||
|
'mpi-permissive': {'id': 'mpi-permissive', 'deprecated': False},
|
||||||
|
'mpich2': {'id': 'mpich2', 'deprecated': False},
|
||||||
|
'mpl-1.0': {'id': 'MPL-1.0', 'deprecated': False},
|
||||||
|
'mpl-1.1': {'id': 'MPL-1.1', 'deprecated': False},
|
||||||
|
'mpl-2.0': {'id': 'MPL-2.0', 'deprecated': False},
|
||||||
|
'mpl-2.0-no-copyleft-exception': {'id': 'MPL-2.0-no-copyleft-exception', 'deprecated': False},
|
||||||
|
'mplus': {'id': 'mplus', 'deprecated': False},
|
||||||
|
'ms-lpl': {'id': 'MS-LPL', 'deprecated': False},
|
||||||
|
'ms-pl': {'id': 'MS-PL', 'deprecated': False},
|
||||||
|
'ms-rl': {'id': 'MS-RL', 'deprecated': False},
|
||||||
|
'mtll': {'id': 'MTLL', 'deprecated': False},
|
||||||
|
'mulanpsl-1.0': {'id': 'MulanPSL-1.0', 'deprecated': False},
|
||||||
|
'mulanpsl-2.0': {'id': 'MulanPSL-2.0', 'deprecated': False},
|
||||||
|
'multics': {'id': 'Multics', 'deprecated': False},
|
||||||
|
'mup': {'id': 'Mup', 'deprecated': False},
|
||||||
|
'naist-2003': {'id': 'NAIST-2003', 'deprecated': False},
|
||||||
|
'nasa-1.3': {'id': 'NASA-1.3', 'deprecated': False},
|
||||||
|
'naumen': {'id': 'Naumen', 'deprecated': False},
|
||||||
|
'nbpl-1.0': {'id': 'NBPL-1.0', 'deprecated': False},
|
||||||
|
'ncbi-pd': {'id': 'NCBI-PD', 'deprecated': False},
|
||||||
|
'ncgl-uk-2.0': {'id': 'NCGL-UK-2.0', 'deprecated': False},
|
||||||
|
'ncl': {'id': 'NCL', 'deprecated': False},
|
||||||
|
'ncsa': {'id': 'NCSA', 'deprecated': False},
|
||||||
|
'net-snmp': {'id': 'Net-SNMP', 'deprecated': True},
|
||||||
|
'netcdf': {'id': 'NetCDF', 'deprecated': False},
|
||||||
|
'newsletr': {'id': 'Newsletr', 'deprecated': False},
|
||||||
|
'ngpl': {'id': 'NGPL', 'deprecated': False},
|
||||||
|
'nicta-1.0': {'id': 'NICTA-1.0', 'deprecated': False},
|
||||||
|
'nist-pd': {'id': 'NIST-PD', 'deprecated': False},
|
||||||
|
'nist-pd-fallback': {'id': 'NIST-PD-fallback', 'deprecated': False},
|
||||||
|
'nist-software': {'id': 'NIST-Software', 'deprecated': False},
|
||||||
|
'nlod-1.0': {'id': 'NLOD-1.0', 'deprecated': False},
|
||||||
|
'nlod-2.0': {'id': 'NLOD-2.0', 'deprecated': False},
|
||||||
|
'nlpl': {'id': 'NLPL', 'deprecated': False},
|
||||||
|
'nokia': {'id': 'Nokia', 'deprecated': False},
|
||||||
|
'nosl': {'id': 'NOSL', 'deprecated': False},
|
||||||
|
'noweb': {'id': 'Noweb', 'deprecated': False},
|
||||||
|
'npl-1.0': {'id': 'NPL-1.0', 'deprecated': False},
|
||||||
|
'npl-1.1': {'id': 'NPL-1.1', 'deprecated': False},
|
||||||
|
'nposl-3.0': {'id': 'NPOSL-3.0', 'deprecated': False},
|
||||||
|
'nrl': {'id': 'NRL', 'deprecated': False},
|
||||||
|
'ntp': {'id': 'NTP', 'deprecated': False},
|
||||||
|
'ntp-0': {'id': 'NTP-0', 'deprecated': False},
|
||||||
|
'nunit': {'id': 'Nunit', 'deprecated': True},
|
||||||
|
'o-uda-1.0': {'id': 'O-UDA-1.0', 'deprecated': False},
|
||||||
|
'oar': {'id': 'OAR', 'deprecated': False},
|
||||||
|
'occt-pl': {'id': 'OCCT-PL', 'deprecated': False},
|
||||||
|
'oclc-2.0': {'id': 'OCLC-2.0', 'deprecated': False},
|
||||||
|
'odbl-1.0': {'id': 'ODbL-1.0', 'deprecated': False},
|
||||||
|
'odc-by-1.0': {'id': 'ODC-By-1.0', 'deprecated': False},
|
||||||
|
'offis': {'id': 'OFFIS', 'deprecated': False},
|
||||||
|
'ofl-1.0': {'id': 'OFL-1.0', 'deprecated': False},
|
||||||
|
'ofl-1.0-no-rfn': {'id': 'OFL-1.0-no-RFN', 'deprecated': False},
|
||||||
|
'ofl-1.0-rfn': {'id': 'OFL-1.0-RFN', 'deprecated': False},
|
||||||
|
'ofl-1.1': {'id': 'OFL-1.1', 'deprecated': False},
|
||||||
|
'ofl-1.1-no-rfn': {'id': 'OFL-1.1-no-RFN', 'deprecated': False},
|
||||||
|
'ofl-1.1-rfn': {'id': 'OFL-1.1-RFN', 'deprecated': False},
|
||||||
|
'ogc-1.0': {'id': 'OGC-1.0', 'deprecated': False},
|
||||||
|
'ogdl-taiwan-1.0': {'id': 'OGDL-Taiwan-1.0', 'deprecated': False},
|
||||||
|
'ogl-canada-2.0': {'id': 'OGL-Canada-2.0', 'deprecated': False},
|
||||||
|
'ogl-uk-1.0': {'id': 'OGL-UK-1.0', 'deprecated': False},
|
||||||
|
'ogl-uk-2.0': {'id': 'OGL-UK-2.0', 'deprecated': False},
|
||||||
|
'ogl-uk-3.0': {'id': 'OGL-UK-3.0', 'deprecated': False},
|
||||||
|
'ogtsl': {'id': 'OGTSL', 'deprecated': False},
|
||||||
|
'oldap-1.1': {'id': 'OLDAP-1.1', 'deprecated': False},
|
||||||
|
'oldap-1.2': {'id': 'OLDAP-1.2', 'deprecated': False},
|
||||||
|
'oldap-1.3': {'id': 'OLDAP-1.3', 'deprecated': False},
|
||||||
|
'oldap-1.4': {'id': 'OLDAP-1.4', 'deprecated': False},
|
||||||
|
'oldap-2.0': {'id': 'OLDAP-2.0', 'deprecated': False},
|
||||||
|
'oldap-2.0.1': {'id': 'OLDAP-2.0.1', 'deprecated': False},
|
||||||
|
'oldap-2.1': {'id': 'OLDAP-2.1', 'deprecated': False},
|
||||||
|
'oldap-2.2': {'id': 'OLDAP-2.2', 'deprecated': False},
|
||||||
|
'oldap-2.2.1': {'id': 'OLDAP-2.2.1', 'deprecated': False},
|
||||||
|
'oldap-2.2.2': {'id': 'OLDAP-2.2.2', 'deprecated': False},
|
||||||
|
'oldap-2.3': {'id': 'OLDAP-2.3', 'deprecated': False},
|
||||||
|
'oldap-2.4': {'id': 'OLDAP-2.4', 'deprecated': False},
|
||||||
|
'oldap-2.5': {'id': 'OLDAP-2.5', 'deprecated': False},
|
||||||
|
'oldap-2.6': {'id': 'OLDAP-2.6', 'deprecated': False},
|
||||||
|
'oldap-2.7': {'id': 'OLDAP-2.7', 'deprecated': False},
|
||||||
|
'oldap-2.8': {'id': 'OLDAP-2.8', 'deprecated': False},
|
||||||
|
'olfl-1.3': {'id': 'OLFL-1.3', 'deprecated': False},
|
||||||
|
'oml': {'id': 'OML', 'deprecated': False},
|
||||||
|
'openpbs-2.3': {'id': 'OpenPBS-2.3', 'deprecated': False},
|
||||||
|
'openssl': {'id': 'OpenSSL', 'deprecated': False},
|
||||||
|
'openssl-standalone': {'id': 'OpenSSL-standalone', 'deprecated': False},
|
||||||
|
'openvision': {'id': 'OpenVision', 'deprecated': False},
|
||||||
|
'opl-1.0': {'id': 'OPL-1.0', 'deprecated': False},
|
||||||
|
'opl-uk-3.0': {'id': 'OPL-UK-3.0', 'deprecated': False},
|
||||||
|
'opubl-1.0': {'id': 'OPUBL-1.0', 'deprecated': False},
|
||||||
|
'oset-pl-2.1': {'id': 'OSET-PL-2.1', 'deprecated': False},
|
||||||
|
'osl-1.0': {'id': 'OSL-1.0', 'deprecated': False},
|
||||||
|
'osl-1.1': {'id': 'OSL-1.1', 'deprecated': False},
|
||||||
|
'osl-2.0': {'id': 'OSL-2.0', 'deprecated': False},
|
||||||
|
'osl-2.1': {'id': 'OSL-2.1', 'deprecated': False},
|
||||||
|
'osl-3.0': {'id': 'OSL-3.0', 'deprecated': False},
|
||||||
|
'padl': {'id': 'PADL', 'deprecated': False},
|
||||||
|
'parity-6.0.0': {'id': 'Parity-6.0.0', 'deprecated': False},
|
||||||
|
'parity-7.0.0': {'id': 'Parity-7.0.0', 'deprecated': False},
|
||||||
|
'pddl-1.0': {'id': 'PDDL-1.0', 'deprecated': False},
|
||||||
|
'php-3.0': {'id': 'PHP-3.0', 'deprecated': False},
|
||||||
|
'php-3.01': {'id': 'PHP-3.01', 'deprecated': False},
|
||||||
|
'pixar': {'id': 'Pixar', 'deprecated': False},
|
||||||
|
'pkgconf': {'id': 'pkgconf', 'deprecated': False},
|
||||||
|
'plexus': {'id': 'Plexus', 'deprecated': False},
|
||||||
|
'pnmstitch': {'id': 'pnmstitch', 'deprecated': False},
|
||||||
|
'polyform-noncommercial-1.0.0': {'id': 'PolyForm-Noncommercial-1.0.0', 'deprecated': False},
|
||||||
|
'polyform-small-business-1.0.0': {'id': 'PolyForm-Small-Business-1.0.0', 'deprecated': False},
|
||||||
|
'postgresql': {'id': 'PostgreSQL', 'deprecated': False},
|
||||||
|
'ppl': {'id': 'PPL', 'deprecated': False},
|
||||||
|
'psf-2.0': {'id': 'PSF-2.0', 'deprecated': False},
|
||||||
|
'psfrag': {'id': 'psfrag', 'deprecated': False},
|
||||||
|
'psutils': {'id': 'psutils', 'deprecated': False},
|
||||||
|
'python-2.0': {'id': 'Python-2.0', 'deprecated': False},
|
||||||
|
'python-2.0.1': {'id': 'Python-2.0.1', 'deprecated': False},
|
||||||
|
'python-ldap': {'id': 'python-ldap', 'deprecated': False},
|
||||||
|
'qhull': {'id': 'Qhull', 'deprecated': False},
|
||||||
|
'qpl-1.0': {'id': 'QPL-1.0', 'deprecated': False},
|
||||||
|
'qpl-1.0-inria-2004': {'id': 'QPL-1.0-INRIA-2004', 'deprecated': False},
|
||||||
|
'radvd': {'id': 'radvd', 'deprecated': False},
|
||||||
|
'rdisc': {'id': 'Rdisc', 'deprecated': False},
|
||||||
|
'rhecos-1.1': {'id': 'RHeCos-1.1', 'deprecated': False},
|
||||||
|
'rpl-1.1': {'id': 'RPL-1.1', 'deprecated': False},
|
||||||
|
'rpl-1.5': {'id': 'RPL-1.5', 'deprecated': False},
|
||||||
|
'rpsl-1.0': {'id': 'RPSL-1.0', 'deprecated': False},
|
||||||
|
'rsa-md': {'id': 'RSA-MD', 'deprecated': False},
|
||||||
|
'rscpl': {'id': 'RSCPL', 'deprecated': False},
|
||||||
|
'ruby': {'id': 'Ruby', 'deprecated': False},
|
||||||
|
'ruby-pty': {'id': 'Ruby-pty', 'deprecated': False},
|
||||||
|
'sax-pd': {'id': 'SAX-PD', 'deprecated': False},
|
||||||
|
'sax-pd-2.0': {'id': 'SAX-PD-2.0', 'deprecated': False},
|
||||||
|
'saxpath': {'id': 'Saxpath', 'deprecated': False},
|
||||||
|
'scea': {'id': 'SCEA', 'deprecated': False},
|
||||||
|
'schemereport': {'id': 'SchemeReport', 'deprecated': False},
|
||||||
|
'sendmail': {'id': 'Sendmail', 'deprecated': False},
|
||||||
|
'sendmail-8.23': {'id': 'Sendmail-8.23', 'deprecated': False},
|
||||||
|
'sgi-b-1.0': {'id': 'SGI-B-1.0', 'deprecated': False},
|
||||||
|
'sgi-b-1.1': {'id': 'SGI-B-1.1', 'deprecated': False},
|
||||||
|
'sgi-b-2.0': {'id': 'SGI-B-2.0', 'deprecated': False},
|
||||||
|
'sgi-opengl': {'id': 'SGI-OpenGL', 'deprecated': False},
|
||||||
|
'sgp4': {'id': 'SGP4', 'deprecated': False},
|
||||||
|
'shl-0.5': {'id': 'SHL-0.5', 'deprecated': False},
|
||||||
|
'shl-0.51': {'id': 'SHL-0.51', 'deprecated': False},
|
||||||
|
'simpl-2.0': {'id': 'SimPL-2.0', 'deprecated': False},
|
||||||
|
'sissl': {'id': 'SISSL', 'deprecated': False},
|
||||||
|
'sissl-1.2': {'id': 'SISSL-1.2', 'deprecated': False},
|
||||||
|
'sl': {'id': 'SL', 'deprecated': False},
|
||||||
|
'sleepycat': {'id': 'Sleepycat', 'deprecated': False},
|
||||||
|
'smlnj': {'id': 'SMLNJ', 'deprecated': False},
|
||||||
|
'smppl': {'id': 'SMPPL', 'deprecated': False},
|
||||||
|
'snia': {'id': 'SNIA', 'deprecated': False},
|
||||||
|
'snprintf': {'id': 'snprintf', 'deprecated': False},
|
||||||
|
'softsurfer': {'id': 'softSurfer', 'deprecated': False},
|
||||||
|
'soundex': {'id': 'Soundex', 'deprecated': False},
|
||||||
|
'spencer-86': {'id': 'Spencer-86', 'deprecated': False},
|
||||||
|
'spencer-94': {'id': 'Spencer-94', 'deprecated': False},
|
||||||
|
'spencer-99': {'id': 'Spencer-99', 'deprecated': False},
|
||||||
|
'spl-1.0': {'id': 'SPL-1.0', 'deprecated': False},
|
||||||
|
'ssh-keyscan': {'id': 'ssh-keyscan', 'deprecated': False},
|
||||||
|
'ssh-openssh': {'id': 'SSH-OpenSSH', 'deprecated': False},
|
||||||
|
'ssh-short': {'id': 'SSH-short', 'deprecated': False},
|
||||||
|
'ssleay-standalone': {'id': 'SSLeay-standalone', 'deprecated': False},
|
||||||
|
'sspl-1.0': {'id': 'SSPL-1.0', 'deprecated': False},
|
||||||
|
'standardml-nj': {'id': 'StandardML-NJ', 'deprecated': True},
|
||||||
|
'sugarcrm-1.1.3': {'id': 'SugarCRM-1.1.3', 'deprecated': False},
|
||||||
|
'sun-ppp': {'id': 'Sun-PPP', 'deprecated': False},
|
||||||
|
'sun-ppp-2000': {'id': 'Sun-PPP-2000', 'deprecated': False},
|
||||||
|
'sunpro': {'id': 'SunPro', 'deprecated': False},
|
||||||
|
'swl': {'id': 'SWL', 'deprecated': False},
|
||||||
|
'swrule': {'id': 'swrule', 'deprecated': False},
|
||||||
|
'symlinks': {'id': 'Symlinks', 'deprecated': False},
|
||||||
|
'tapr-ohl-1.0': {'id': 'TAPR-OHL-1.0', 'deprecated': False},
|
||||||
|
'tcl': {'id': 'TCL', 'deprecated': False},
|
||||||
|
'tcp-wrappers': {'id': 'TCP-wrappers', 'deprecated': False},
|
||||||
|
'termreadkey': {'id': 'TermReadKey', 'deprecated': False},
|
||||||
|
'tgppl-1.0': {'id': 'TGPPL-1.0', 'deprecated': False},
|
||||||
|
'threeparttable': {'id': 'threeparttable', 'deprecated': False},
|
||||||
|
'tmate': {'id': 'TMate', 'deprecated': False},
|
||||||
|
'torque-1.1': {'id': 'TORQUE-1.1', 'deprecated': False},
|
||||||
|
'tosl': {'id': 'TOSL', 'deprecated': False},
|
||||||
|
'tpdl': {'id': 'TPDL', 'deprecated': False},
|
||||||
|
'tpl-1.0': {'id': 'TPL-1.0', 'deprecated': False},
|
||||||
|
'ttwl': {'id': 'TTWL', 'deprecated': False},
|
||||||
|
'ttyp0': {'id': 'TTYP0', 'deprecated': False},
|
||||||
|
'tu-berlin-1.0': {'id': 'TU-Berlin-1.0', 'deprecated': False},
|
||||||
|
'tu-berlin-2.0': {'id': 'TU-Berlin-2.0', 'deprecated': False},
|
||||||
|
'ubuntu-font-1.0': {'id': 'Ubuntu-font-1.0', 'deprecated': False},
|
||||||
|
'ucar': {'id': 'UCAR', 'deprecated': False},
|
||||||
|
'ucl-1.0': {'id': 'UCL-1.0', 'deprecated': False},
|
||||||
|
'ulem': {'id': 'ulem', 'deprecated': False},
|
||||||
|
'umich-merit': {'id': 'UMich-Merit', 'deprecated': False},
|
||||||
|
'unicode-3.0': {'id': 'Unicode-3.0', 'deprecated': False},
|
||||||
|
'unicode-dfs-2015': {'id': 'Unicode-DFS-2015', 'deprecated': False},
|
||||||
|
'unicode-dfs-2016': {'id': 'Unicode-DFS-2016', 'deprecated': False},
|
||||||
|
'unicode-tou': {'id': 'Unicode-TOU', 'deprecated': False},
|
||||||
|
'unixcrypt': {'id': 'UnixCrypt', 'deprecated': False},
|
||||||
|
'unlicense': {'id': 'Unlicense', 'deprecated': False},
|
||||||
|
'upl-1.0': {'id': 'UPL-1.0', 'deprecated': False},
|
||||||
|
'urt-rle': {'id': 'URT-RLE', 'deprecated': False},
|
||||||
|
'vim': {'id': 'Vim', 'deprecated': False},
|
||||||
|
'vostrom': {'id': 'VOSTROM', 'deprecated': False},
|
||||||
|
'vsl-1.0': {'id': 'VSL-1.0', 'deprecated': False},
|
||||||
|
'w3c': {'id': 'W3C', 'deprecated': False},
|
||||||
|
'w3c-19980720': {'id': 'W3C-19980720', 'deprecated': False},
|
||||||
|
'w3c-20150513': {'id': 'W3C-20150513', 'deprecated': False},
|
||||||
|
'w3m': {'id': 'w3m', 'deprecated': False},
|
||||||
|
'watcom-1.0': {'id': 'Watcom-1.0', 'deprecated': False},
|
||||||
|
'widget-workshop': {'id': 'Widget-Workshop', 'deprecated': False},
|
||||||
|
'wsuipa': {'id': 'Wsuipa', 'deprecated': False},
|
||||||
|
'wtfpl': {'id': 'WTFPL', 'deprecated': False},
|
||||||
|
'wxwindows': {'id': 'wxWindows', 'deprecated': True},
|
||||||
|
'x11': {'id': 'X11', 'deprecated': False},
|
||||||
|
'x11-distribute-modifications-variant': {'id': 'X11-distribute-modifications-variant', 'deprecated': False},
|
||||||
|
'x11-swapped': {'id': 'X11-swapped', 'deprecated': False},
|
||||||
|
'xdebug-1.03': {'id': 'Xdebug-1.03', 'deprecated': False},
|
||||||
|
'xerox': {'id': 'Xerox', 'deprecated': False},
|
||||||
|
'xfig': {'id': 'Xfig', 'deprecated': False},
|
||||||
|
'xfree86-1.1': {'id': 'XFree86-1.1', 'deprecated': False},
|
||||||
|
'xinetd': {'id': 'xinetd', 'deprecated': False},
|
||||||
|
'xkeyboard-config-zinoviev': {'id': 'xkeyboard-config-Zinoviev', 'deprecated': False},
|
||||||
|
'xlock': {'id': 'xlock', 'deprecated': False},
|
||||||
|
'xnet': {'id': 'Xnet', 'deprecated': False},
|
||||||
|
'xpp': {'id': 'xpp', 'deprecated': False},
|
||||||
|
'xskat': {'id': 'XSkat', 'deprecated': False},
|
||||||
|
'xzoom': {'id': 'xzoom', 'deprecated': False},
|
||||||
|
'ypl-1.0': {'id': 'YPL-1.0', 'deprecated': False},
|
||||||
|
'ypl-1.1': {'id': 'YPL-1.1', 'deprecated': False},
|
||||||
|
'zed': {'id': 'Zed', 'deprecated': False},
|
||||||
|
'zeeff': {'id': 'Zeeff', 'deprecated': False},
|
||||||
|
'zend-2.0': {'id': 'Zend-2.0', 'deprecated': False},
|
||||||
|
'zimbra-1.3': {'id': 'Zimbra-1.3', 'deprecated': False},
|
||||||
|
'zimbra-1.4': {'id': 'Zimbra-1.4', 'deprecated': False},
|
||||||
|
'zlib': {'id': 'Zlib', 'deprecated': False},
|
||||||
|
'zlib-acknowledgement': {'id': 'zlib-acknowledgement', 'deprecated': False},
|
||||||
|
'zpl-1.1': {'id': 'ZPL-1.1', 'deprecated': False},
|
||||||
|
'zpl-2.0': {'id': 'ZPL-2.0', 'deprecated': False},
|
||||||
|
'zpl-2.1': {'id': 'ZPL-2.1', 'deprecated': False},
|
||||||
|
}
|
||||||
|
|
||||||
|
EXCEPTIONS: dict[str, SPDXException] = {
|
||||||
|
'389-exception': {'id': '389-exception', 'deprecated': False},
|
||||||
|
'asterisk-exception': {'id': 'Asterisk-exception', 'deprecated': False},
|
||||||
|
'asterisk-linking-protocols-exception': {'id': 'Asterisk-linking-protocols-exception', 'deprecated': False},
|
||||||
|
'autoconf-exception-2.0': {'id': 'Autoconf-exception-2.0', 'deprecated': False},
|
||||||
|
'autoconf-exception-3.0': {'id': 'Autoconf-exception-3.0', 'deprecated': False},
|
||||||
|
'autoconf-exception-generic': {'id': 'Autoconf-exception-generic', 'deprecated': False},
|
||||||
|
'autoconf-exception-generic-3.0': {'id': 'Autoconf-exception-generic-3.0', 'deprecated': False},
|
||||||
|
'autoconf-exception-macro': {'id': 'Autoconf-exception-macro', 'deprecated': False},
|
||||||
|
'bison-exception-1.24': {'id': 'Bison-exception-1.24', 'deprecated': False},
|
||||||
|
'bison-exception-2.2': {'id': 'Bison-exception-2.2', 'deprecated': False},
|
||||||
|
'bootloader-exception': {'id': 'Bootloader-exception', 'deprecated': False},
|
||||||
|
'classpath-exception-2.0': {'id': 'Classpath-exception-2.0', 'deprecated': False},
|
||||||
|
'clisp-exception-2.0': {'id': 'CLISP-exception-2.0', 'deprecated': False},
|
||||||
|
'cryptsetup-openssl-exception': {'id': 'cryptsetup-OpenSSL-exception', 'deprecated': False},
|
||||||
|
'digirule-foss-exception': {'id': 'DigiRule-FOSS-exception', 'deprecated': False},
|
||||||
|
'ecos-exception-2.0': {'id': 'eCos-exception-2.0', 'deprecated': False},
|
||||||
|
'erlang-otp-linking-exception': {'id': 'erlang-otp-linking-exception', 'deprecated': False},
|
||||||
|
'fawkes-runtime-exception': {'id': 'Fawkes-Runtime-exception', 'deprecated': False},
|
||||||
|
'fltk-exception': {'id': 'FLTK-exception', 'deprecated': False},
|
||||||
|
'fmt-exception': {'id': 'fmt-exception', 'deprecated': False},
|
||||||
|
'font-exception-2.0': {'id': 'Font-exception-2.0', 'deprecated': False},
|
||||||
|
'freertos-exception-2.0': {'id': 'freertos-exception-2.0', 'deprecated': False},
|
||||||
|
'gcc-exception-2.0': {'id': 'GCC-exception-2.0', 'deprecated': False},
|
||||||
|
'gcc-exception-2.0-note': {'id': 'GCC-exception-2.0-note', 'deprecated': False},
|
||||||
|
'gcc-exception-3.1': {'id': 'GCC-exception-3.1', 'deprecated': False},
|
||||||
|
'gmsh-exception': {'id': 'Gmsh-exception', 'deprecated': False},
|
||||||
|
'gnat-exception': {'id': 'GNAT-exception', 'deprecated': False},
|
||||||
|
'gnome-examples-exception': {'id': 'GNOME-examples-exception', 'deprecated': False},
|
||||||
|
'gnu-compiler-exception': {'id': 'GNU-compiler-exception', 'deprecated': False},
|
||||||
|
'gnu-javamail-exception': {'id': 'gnu-javamail-exception', 'deprecated': False},
|
||||||
|
'gpl-3.0-interface-exception': {'id': 'GPL-3.0-interface-exception', 'deprecated': False},
|
||||||
|
'gpl-3.0-linking-exception': {'id': 'GPL-3.0-linking-exception', 'deprecated': False},
|
||||||
|
'gpl-3.0-linking-source-exception': {'id': 'GPL-3.0-linking-source-exception', 'deprecated': False},
|
||||||
|
'gpl-cc-1.0': {'id': 'GPL-CC-1.0', 'deprecated': False},
|
||||||
|
'gstreamer-exception-2005': {'id': 'GStreamer-exception-2005', 'deprecated': False},
|
||||||
|
'gstreamer-exception-2008': {'id': 'GStreamer-exception-2008', 'deprecated': False},
|
||||||
|
'i2p-gpl-java-exception': {'id': 'i2p-gpl-java-exception', 'deprecated': False},
|
||||||
|
'kicad-libraries-exception': {'id': 'KiCad-libraries-exception', 'deprecated': False},
|
||||||
|
'lgpl-3.0-linking-exception': {'id': 'LGPL-3.0-linking-exception', 'deprecated': False},
|
||||||
|
'libpri-openh323-exception': {'id': 'libpri-OpenH323-exception', 'deprecated': False},
|
||||||
|
'libtool-exception': {'id': 'Libtool-exception', 'deprecated': False},
|
||||||
|
'linux-syscall-note': {'id': 'Linux-syscall-note', 'deprecated': False},
|
||||||
|
'llgpl': {'id': 'LLGPL', 'deprecated': False},
|
||||||
|
'llvm-exception': {'id': 'LLVM-exception', 'deprecated': False},
|
||||||
|
'lzma-exception': {'id': 'LZMA-exception', 'deprecated': False},
|
||||||
|
'mif-exception': {'id': 'mif-exception', 'deprecated': False},
|
||||||
|
'nokia-qt-exception-1.1': {'id': 'Nokia-Qt-exception-1.1', 'deprecated': True},
|
||||||
|
'ocaml-lgpl-linking-exception': {'id': 'OCaml-LGPL-linking-exception', 'deprecated': False},
|
||||||
|
'occt-exception-1.0': {'id': 'OCCT-exception-1.0', 'deprecated': False},
|
||||||
|
'openjdk-assembly-exception-1.0': {'id': 'OpenJDK-assembly-exception-1.0', 'deprecated': False},
|
||||||
|
'openvpn-openssl-exception': {'id': 'openvpn-openssl-exception', 'deprecated': False},
|
||||||
|
'pcre2-exception': {'id': 'PCRE2-exception', 'deprecated': False},
|
||||||
|
'ps-or-pdf-font-exception-20170817': {'id': 'PS-or-PDF-font-exception-20170817', 'deprecated': False},
|
||||||
|
'qpl-1.0-inria-2004-exception': {'id': 'QPL-1.0-INRIA-2004-exception', 'deprecated': False},
|
||||||
|
'qt-gpl-exception-1.0': {'id': 'Qt-GPL-exception-1.0', 'deprecated': False},
|
||||||
|
'qt-lgpl-exception-1.1': {'id': 'Qt-LGPL-exception-1.1', 'deprecated': False},
|
||||||
|
'qwt-exception-1.0': {'id': 'Qwt-exception-1.0', 'deprecated': False},
|
||||||
|
'romic-exception': {'id': 'romic-exception', 'deprecated': False},
|
||||||
|
'rrdtool-floss-exception-2.0': {'id': 'RRDtool-FLOSS-exception-2.0', 'deprecated': False},
|
||||||
|
'sane-exception': {'id': 'SANE-exception', 'deprecated': False},
|
||||||
|
'shl-2.0': {'id': 'SHL-2.0', 'deprecated': False},
|
||||||
|
'shl-2.1': {'id': 'SHL-2.1', 'deprecated': False},
|
||||||
|
'stunnel-exception': {'id': 'stunnel-exception', 'deprecated': False},
|
||||||
|
'swi-exception': {'id': 'SWI-exception', 'deprecated': False},
|
||||||
|
'swift-exception': {'id': 'Swift-exception', 'deprecated': False},
|
||||||
|
'texinfo-exception': {'id': 'Texinfo-exception', 'deprecated': False},
|
||||||
|
'u-boot-exception-2.0': {'id': 'u-boot-exception-2.0', 'deprecated': False},
|
||||||
|
'ubdl-exception': {'id': 'UBDL-exception', 'deprecated': False},
|
||||||
|
'universal-foss-exception-1.0': {'id': 'Universal-FOSS-exception-1.0', 'deprecated': False},
|
||||||
|
'vsftpd-openssl-exception': {'id': 'vsftpd-openssl-exception', 'deprecated': False},
|
||||||
|
'wxwindows-exception-3.1': {'id': 'WxWindows-exception-3.1', 'deprecated': False},
|
||||||
|
'x11vnc-openssl-exception': {'id': 'x11vnc-openssl-exception', 'deprecated': False},
|
||||||
|
}
|
|
@ -18,9 +18,9 @@ from .utils import canonicalize_name
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"InvalidMarker",
|
"InvalidMarker",
|
||||||
|
"Marker",
|
||||||
"UndefinedComparison",
|
"UndefinedComparison",
|
||||||
"UndefinedEnvironmentName",
|
"UndefinedEnvironmentName",
|
||||||
"Marker",
|
|
||||||
"default_environment",
|
"default_environment",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ def _evaluate_markers(markers: MarkerList, environment: dict[str, str]) -> bool:
|
||||||
|
|
||||||
|
|
||||||
def format_full_version(info: sys._version_info) -> str:
|
def format_full_version(info: sys._version_info) -> str:
|
||||||
version = "{0.major}.{0.minor}.{0.micro}".format(info)
|
version = f"{info.major}.{info.minor}.{info.micro}"
|
||||||
kind = info.releaselevel
|
kind = info.releaselevel
|
||||||
if kind != "final":
|
if kind != "final":
|
||||||
version += kind[0] + str(info.serial)
|
version += kind[0] + str(info.serial)
|
||||||
|
@ -309,12 +309,6 @@ class Marker:
|
||||||
"""
|
"""
|
||||||
current_environment = cast("dict[str, str]", default_environment())
|
current_environment = cast("dict[str, str]", default_environment())
|
||||||
current_environment["extra"] = ""
|
current_environment["extra"] = ""
|
||||||
# Work around platform.python_version() returning something that is not PEP 440
|
|
||||||
# compliant for non-tagged Python builds. We preserve default_environment()'s
|
|
||||||
# behavior of returning platform.python_version() verbatim, and leave it to the
|
|
||||||
# caller to provide a syntactically valid version if they want to override it.
|
|
||||||
if current_environment["python_full_version"].endswith("+"):
|
|
||||||
current_environment["python_full_version"] += "local"
|
|
||||||
if environment is not None:
|
if environment is not None:
|
||||||
current_environment.update(environment)
|
current_environment.update(environment)
|
||||||
# The API used to allow setting extra to None. We need to handle this
|
# The API used to allow setting extra to None. We need to handle this
|
||||||
|
@ -322,4 +316,16 @@ class Marker:
|
||||||
if current_environment["extra"] is None:
|
if current_environment["extra"] is None:
|
||||||
current_environment["extra"] = ""
|
current_environment["extra"] = ""
|
||||||
|
|
||||||
return _evaluate_markers(self._markers, current_environment)
|
return _evaluate_markers(
|
||||||
|
self._markers, _repair_python_full_version(current_environment)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _repair_python_full_version(env: dict[str, str]) -> dict[str, str]:
|
||||||
|
"""
|
||||||
|
Work around platform.python_version() returning something that is not PEP 440
|
||||||
|
compliant for non-tagged Python builds.
|
||||||
|
"""
|
||||||
|
if env["python_full_version"].endswith("+"):
|
||||||
|
env["python_full_version"] += "local"
|
||||||
|
return env
|
||||||
|
|
|
@ -5,6 +5,8 @@ import email.header
|
||||||
import email.message
|
import email.message
|
||||||
import email.parser
|
import email.parser
|
||||||
import email.policy
|
import email.policy
|
||||||
|
import pathlib
|
||||||
|
import sys
|
||||||
import typing
|
import typing
|
||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
|
@ -15,15 +17,16 @@ from typing import (
|
||||||
cast,
|
cast,
|
||||||
)
|
)
|
||||||
|
|
||||||
from . import requirements, specifiers, utils
|
from . import licenses, requirements, specifiers, utils
|
||||||
from . import version as version_module
|
from . import version as version_module
|
||||||
|
from .licenses import NormalizedLicenseExpression
|
||||||
|
|
||||||
T = typing.TypeVar("T")
|
T = typing.TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
try:
|
if sys.version_info >= (3, 11): # pragma: no cover
|
||||||
ExceptionGroup
|
ExceptionGroup = ExceptionGroup
|
||||||
except NameError: # pragma: no cover
|
else: # pragma: no cover
|
||||||
|
|
||||||
class ExceptionGroup(Exception):
|
class ExceptionGroup(Exception):
|
||||||
"""A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11.
|
"""A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11.
|
||||||
|
@ -42,9 +45,6 @@ except NameError: # pragma: no cover
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})"
|
return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})"
|
||||||
|
|
||||||
else: # pragma: no cover
|
|
||||||
ExceptionGroup = ExceptionGroup
|
|
||||||
|
|
||||||
|
|
||||||
class InvalidMetadata(ValueError):
|
class InvalidMetadata(ValueError):
|
||||||
"""A metadata field contains invalid data."""
|
"""A metadata field contains invalid data."""
|
||||||
|
@ -128,6 +128,10 @@ class RawMetadata(TypedDict, total=False):
|
||||||
# No new fields were added in PEP 685, just some edge case were
|
# No new fields were added in PEP 685, just some edge case were
|
||||||
# tightened up to provide better interoptability.
|
# tightened up to provide better interoptability.
|
||||||
|
|
||||||
|
# Metadata 2.4 - PEP 639
|
||||||
|
license_expression: str
|
||||||
|
license_files: list[str]
|
||||||
|
|
||||||
|
|
||||||
_STRING_FIELDS = {
|
_STRING_FIELDS = {
|
||||||
"author",
|
"author",
|
||||||
|
@ -137,6 +141,7 @@ _STRING_FIELDS = {
|
||||||
"download_url",
|
"download_url",
|
||||||
"home_page",
|
"home_page",
|
||||||
"license",
|
"license",
|
||||||
|
"license_expression",
|
||||||
"maintainer",
|
"maintainer",
|
||||||
"maintainer_email",
|
"maintainer_email",
|
||||||
"metadata_version",
|
"metadata_version",
|
||||||
|
@ -149,6 +154,7 @@ _STRING_FIELDS = {
|
||||||
_LIST_FIELDS = {
|
_LIST_FIELDS = {
|
||||||
"classifiers",
|
"classifiers",
|
||||||
"dynamic",
|
"dynamic",
|
||||||
|
"license_files",
|
||||||
"obsoletes",
|
"obsoletes",
|
||||||
"obsoletes_dist",
|
"obsoletes_dist",
|
||||||
"platforms",
|
"platforms",
|
||||||
|
@ -167,7 +173,7 @@ _DICT_FIELDS = {
|
||||||
|
|
||||||
|
|
||||||
def _parse_keywords(data: str) -> list[str]:
|
def _parse_keywords(data: str) -> list[str]:
|
||||||
"""Split a string of comma-separate keyboards into a list of keywords."""
|
"""Split a string of comma-separated keywords into a list of keywords."""
|
||||||
return [k.strip() for k in data.split(",")]
|
return [k.strip() for k in data.split(",")]
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,16 +222,18 @@ def _get_payload(msg: email.message.Message, source: bytes | str) -> str:
|
||||||
# If our source is a str, then our caller has managed encodings for us,
|
# If our source is a str, then our caller has managed encodings for us,
|
||||||
# and we don't need to deal with it.
|
# and we don't need to deal with it.
|
||||||
if isinstance(source, str):
|
if isinstance(source, str):
|
||||||
payload: str = msg.get_payload()
|
payload = msg.get_payload()
|
||||||
|
assert isinstance(payload, str)
|
||||||
return payload
|
return payload
|
||||||
# If our source is a bytes, then we're managing the encoding and we need
|
# If our source is a bytes, then we're managing the encoding and we need
|
||||||
# to deal with it.
|
# to deal with it.
|
||||||
else:
|
else:
|
||||||
bpayload: bytes = msg.get_payload(decode=True)
|
bpayload = msg.get_payload(decode=True)
|
||||||
|
assert isinstance(bpayload, bytes)
|
||||||
try:
|
try:
|
||||||
return bpayload.decode("utf8", "strict")
|
return bpayload.decode("utf8", "strict")
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError as exc:
|
||||||
raise ValueError("payload in an invalid encoding")
|
raise ValueError("payload in an invalid encoding") from exc
|
||||||
|
|
||||||
|
|
||||||
# The various parse_FORMAT functions here are intended to be as lenient as
|
# The various parse_FORMAT functions here are intended to be as lenient as
|
||||||
|
@ -251,6 +259,8 @@ _EMAIL_TO_RAW_MAPPING = {
|
||||||
"home-page": "home_page",
|
"home-page": "home_page",
|
||||||
"keywords": "keywords",
|
"keywords": "keywords",
|
||||||
"license": "license",
|
"license": "license",
|
||||||
|
"license-expression": "license_expression",
|
||||||
|
"license-file": "license_files",
|
||||||
"maintainer": "maintainer",
|
"maintainer": "maintainer",
|
||||||
"maintainer-email": "maintainer_email",
|
"maintainer-email": "maintainer_email",
|
||||||
"metadata-version": "metadata_version",
|
"metadata-version": "metadata_version",
|
||||||
|
@ -426,7 +436,7 @@ def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]:
|
||||||
payload = _get_payload(parsed, data)
|
payload = _get_payload(parsed, data)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
unparsed.setdefault("description", []).append(
|
unparsed.setdefault("description", []).append(
|
||||||
parsed.get_payload(decode=isinstance(data, bytes))
|
parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload]
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
if payload:
|
if payload:
|
||||||
|
@ -453,8 +463,8 @@ _NOT_FOUND = object()
|
||||||
|
|
||||||
|
|
||||||
# Keep the two values in sync.
|
# Keep the two values in sync.
|
||||||
_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"]
|
_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
|
||||||
_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"]
|
_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
|
||||||
|
|
||||||
_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"])
|
_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"])
|
||||||
|
|
||||||
|
@ -535,7 +545,7 @@ class _Validator(Generic[T]):
|
||||||
except utils.InvalidName as exc:
|
except utils.InvalidName as exc:
|
||||||
raise self._invalid_metadata(
|
raise self._invalid_metadata(
|
||||||
f"{value!r} is invalid for {{field}}", cause=exc
|
f"{value!r} is invalid for {{field}}", cause=exc
|
||||||
)
|
) from exc
|
||||||
else:
|
else:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -547,7 +557,7 @@ class _Validator(Generic[T]):
|
||||||
except version_module.InvalidVersion as exc:
|
except version_module.InvalidVersion as exc:
|
||||||
raise self._invalid_metadata(
|
raise self._invalid_metadata(
|
||||||
f"{value!r} is invalid for {{field}}", cause=exc
|
f"{value!r} is invalid for {{field}}", cause=exc
|
||||||
)
|
) from exc
|
||||||
|
|
||||||
def _process_summary(self, value: str) -> str:
|
def _process_summary(self, value: str) -> str:
|
||||||
"""Check the field contains no newlines."""
|
"""Check the field contains no newlines."""
|
||||||
|
@ -591,10 +601,12 @@ class _Validator(Generic[T]):
|
||||||
for dynamic_field in map(str.lower, value):
|
for dynamic_field in map(str.lower, value):
|
||||||
if dynamic_field in {"name", "version", "metadata-version"}:
|
if dynamic_field in {"name", "version", "metadata-version"}:
|
||||||
raise self._invalid_metadata(
|
raise self._invalid_metadata(
|
||||||
f"{value!r} is not allowed as a dynamic field"
|
f"{dynamic_field!r} is not allowed as a dynamic field"
|
||||||
)
|
)
|
||||||
elif dynamic_field not in _EMAIL_TO_RAW_MAPPING:
|
elif dynamic_field not in _EMAIL_TO_RAW_MAPPING:
|
||||||
raise self._invalid_metadata(f"{value!r} is not a valid dynamic field")
|
raise self._invalid_metadata(
|
||||||
|
f"{dynamic_field!r} is not a valid dynamic field"
|
||||||
|
)
|
||||||
return list(map(str.lower, value))
|
return list(map(str.lower, value))
|
||||||
|
|
||||||
def _process_provides_extra(
|
def _process_provides_extra(
|
||||||
|
@ -608,7 +620,7 @@ class _Validator(Generic[T]):
|
||||||
except utils.InvalidName as exc:
|
except utils.InvalidName as exc:
|
||||||
raise self._invalid_metadata(
|
raise self._invalid_metadata(
|
||||||
f"{name!r} is invalid for {{field}}", cause=exc
|
f"{name!r} is invalid for {{field}}", cause=exc
|
||||||
)
|
) from exc
|
||||||
else:
|
else:
|
||||||
return normalized_names
|
return normalized_names
|
||||||
|
|
||||||
|
@ -618,7 +630,7 @@ class _Validator(Generic[T]):
|
||||||
except specifiers.InvalidSpecifier as exc:
|
except specifiers.InvalidSpecifier as exc:
|
||||||
raise self._invalid_metadata(
|
raise self._invalid_metadata(
|
||||||
f"{value!r} is invalid for {{field}}", cause=exc
|
f"{value!r} is invalid for {{field}}", cause=exc
|
||||||
)
|
) from exc
|
||||||
|
|
||||||
def _process_requires_dist(
|
def _process_requires_dist(
|
||||||
self,
|
self,
|
||||||
|
@ -629,10 +641,49 @@ class _Validator(Generic[T]):
|
||||||
for req in value:
|
for req in value:
|
||||||
reqs.append(requirements.Requirement(req))
|
reqs.append(requirements.Requirement(req))
|
||||||
except requirements.InvalidRequirement as exc:
|
except requirements.InvalidRequirement as exc:
|
||||||
raise self._invalid_metadata(f"{req!r} is invalid for {{field}}", cause=exc)
|
raise self._invalid_metadata(
|
||||||
|
f"{req!r} is invalid for {{field}}", cause=exc
|
||||||
|
) from exc
|
||||||
else:
|
else:
|
||||||
return reqs
|
return reqs
|
||||||
|
|
||||||
|
def _process_license_expression(
|
||||||
|
self, value: str
|
||||||
|
) -> NormalizedLicenseExpression | None:
|
||||||
|
try:
|
||||||
|
return licenses.canonicalize_license_expression(value)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise self._invalid_metadata(
|
||||||
|
f"{value!r} is invalid for {{field}}", cause=exc
|
||||||
|
) from exc
|
||||||
|
|
||||||
|
def _process_license_files(self, value: list[str]) -> list[str]:
|
||||||
|
paths = []
|
||||||
|
for path in value:
|
||||||
|
if ".." in path:
|
||||||
|
raise self._invalid_metadata(
|
||||||
|
f"{path!r} is invalid for {{field}}, "
|
||||||
|
"parent directory indicators are not allowed"
|
||||||
|
)
|
||||||
|
if "*" in path:
|
||||||
|
raise self._invalid_metadata(
|
||||||
|
f"{path!r} is invalid for {{field}}, paths must be resolved"
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
pathlib.PurePosixPath(path).is_absolute()
|
||||||
|
or pathlib.PureWindowsPath(path).is_absolute()
|
||||||
|
):
|
||||||
|
raise self._invalid_metadata(
|
||||||
|
f"{path!r} is invalid for {{field}}, paths must be relative"
|
||||||
|
)
|
||||||
|
if pathlib.PureWindowsPath(path).as_posix() != path:
|
||||||
|
raise self._invalid_metadata(
|
||||||
|
f"{path!r} is invalid for {{field}}, "
|
||||||
|
"paths must use '/' delimiter"
|
||||||
|
)
|
||||||
|
paths.append(path)
|
||||||
|
return paths
|
||||||
|
|
||||||
|
|
||||||
class Metadata:
|
class Metadata:
|
||||||
"""Representation of distribution metadata.
|
"""Representation of distribution metadata.
|
||||||
|
@ -688,8 +739,8 @@ class Metadata:
|
||||||
field = _RAW_TO_EMAIL_MAPPING[key]
|
field = _RAW_TO_EMAIL_MAPPING[key]
|
||||||
exc = InvalidMetadata(
|
exc = InvalidMetadata(
|
||||||
field,
|
field,
|
||||||
"{field} introduced in metadata version "
|
f"{field} introduced in metadata version "
|
||||||
"{field_metadata_version}, not {metadata_version}",
|
f"{field_metadata_version}, not {metadata_version}",
|
||||||
)
|
)
|
||||||
exceptions.append(exc)
|
exceptions.append(exc)
|
||||||
continue
|
continue
|
||||||
|
@ -733,6 +784,8 @@ class Metadata:
|
||||||
metadata_version: _Validator[_MetadataVersion] = _Validator()
|
metadata_version: _Validator[_MetadataVersion] = _Validator()
|
||||||
""":external:ref:`core-metadata-metadata-version`
|
""":external:ref:`core-metadata-metadata-version`
|
||||||
(required; validated to be a valid metadata version)"""
|
(required; validated to be a valid metadata version)"""
|
||||||
|
# `name` is not normalized/typed to NormalizedName so as to provide access to
|
||||||
|
# the original/raw name.
|
||||||
name: _Validator[str] = _Validator()
|
name: _Validator[str] = _Validator()
|
||||||
""":external:ref:`core-metadata-name`
|
""":external:ref:`core-metadata-name`
|
||||||
(required; validated using :func:`~packaging.utils.canonicalize_name` and its
|
(required; validated using :func:`~packaging.utils.canonicalize_name` and its
|
||||||
|
@ -770,6 +823,12 @@ class Metadata:
|
||||||
""":external:ref:`core-metadata-maintainer-email`"""
|
""":external:ref:`core-metadata-maintainer-email`"""
|
||||||
license: _Validator[str | None] = _Validator()
|
license: _Validator[str | None] = _Validator()
|
||||||
""":external:ref:`core-metadata-license`"""
|
""":external:ref:`core-metadata-license`"""
|
||||||
|
license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator(
|
||||||
|
added="2.4"
|
||||||
|
)
|
||||||
|
""":external:ref:`core-metadata-license-expression`"""
|
||||||
|
license_files: _Validator[list[str] | None] = _Validator(added="2.4")
|
||||||
|
""":external:ref:`core-metadata-license-file`"""
|
||||||
classifiers: _Validator[list[str] | None] = _Validator(added="1.1")
|
classifiers: _Validator[list[str] | None] = _Validator(added="1.1")
|
||||||
""":external:ref:`core-metadata-classifier`"""
|
""":external:ref:`core-metadata-classifier`"""
|
||||||
requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator(
|
requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator(
|
||||||
|
|
|
@ -234,7 +234,7 @@ class Specifier(BaseSpecifier):
|
||||||
"""
|
"""
|
||||||
match = self._regex.search(spec)
|
match = self._regex.search(spec)
|
||||||
if not match:
|
if not match:
|
||||||
raise InvalidSpecifier(f"Invalid specifier: '{spec}'")
|
raise InvalidSpecifier(f"Invalid specifier: {spec!r}")
|
||||||
|
|
||||||
self._spec: tuple[str, str] = (
|
self._spec: tuple[str, str] = (
|
||||||
match.group("operator").strip(),
|
match.group("operator").strip(),
|
||||||
|
@ -256,7 +256,7 @@ class Specifier(BaseSpecifier):
|
||||||
# operators, and if they are if they are including an explicit
|
# operators, and if they are if they are including an explicit
|
||||||
# prerelease.
|
# prerelease.
|
||||||
operator, version = self._spec
|
operator, version = self._spec
|
||||||
if operator in ["==", ">=", "<=", "~=", "==="]:
|
if operator in ["==", ">=", "<=", "~=", "===", ">", "<"]:
|
||||||
# The == specifier can include a trailing .*, if it does we
|
# The == specifier can include a trailing .*, if it does we
|
||||||
# want to remove before parsing.
|
# want to remove before parsing.
|
||||||
if operator == "==" and version.endswith(".*"):
|
if operator == "==" and version.endswith(".*"):
|
||||||
|
@ -694,12 +694,18 @@ class SpecifierSet(BaseSpecifier):
|
||||||
specifiers (``>=3.0,!=3.1``), or no specifier at all.
|
specifiers (``>=3.0,!=3.1``), or no specifier at all.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, specifiers: str = "", prereleases: bool | None = None) -> None:
|
def __init__(
|
||||||
|
self,
|
||||||
|
specifiers: str | Iterable[Specifier] = "",
|
||||||
|
prereleases: bool | None = None,
|
||||||
|
) -> None:
|
||||||
"""Initialize a SpecifierSet instance.
|
"""Initialize a SpecifierSet instance.
|
||||||
|
|
||||||
:param specifiers:
|
:param specifiers:
|
||||||
The string representation of a specifier or a comma-separated list of
|
The string representation of a specifier or a comma-separated list of
|
||||||
specifiers which will be parsed and normalized before use.
|
specifiers which will be parsed and normalized before use.
|
||||||
|
May also be an iterable of ``Specifier`` instances, which will be used
|
||||||
|
as is.
|
||||||
:param prereleases:
|
:param prereleases:
|
||||||
This tells the SpecifierSet if it should accept prerelease versions if
|
This tells the SpecifierSet if it should accept prerelease versions if
|
||||||
applicable or not. The default of ``None`` will autodetect it from the
|
applicable or not. The default of ``None`` will autodetect it from the
|
||||||
|
@ -710,12 +716,17 @@ class SpecifierSet(BaseSpecifier):
|
||||||
raised.
|
raised.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Split on `,` to break each individual specifier into it's own item, and
|
if isinstance(specifiers, str):
|
||||||
|
# Split on `,` to break each individual specifier into its own item, and
|
||||||
# strip each item to remove leading/trailing whitespace.
|
# strip each item to remove leading/trailing whitespace.
|
||||||
split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
|
split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
|
||||||
|
|
||||||
# Make each individual specifier a Specifier and save in a frozen set for later.
|
# Make each individual specifier a Specifier and save in a frozen set
|
||||||
|
# for later.
|
||||||
self._specs = frozenset(map(Specifier, split_specifiers))
|
self._specs = frozenset(map(Specifier, split_specifiers))
|
||||||
|
else:
|
||||||
|
# Save the supplied specifiers in a frozen set.
|
||||||
|
self._specs = frozenset(specifiers)
|
||||||
|
|
||||||
# Store our prereleases value so we can use it later to determine if
|
# Store our prereleases value so we can use it later to determine if
|
||||||
# we accept prereleases or not.
|
# we accept prereleases or not.
|
||||||
|
|
|
@ -25,7 +25,7 @@ from . import _manylinux, _musllinux
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
PythonVersion = Sequence[int]
|
PythonVersion = Sequence[int]
|
||||||
MacVersion = Tuple[int, int]
|
AppleVersion = Tuple[int, int]
|
||||||
|
|
||||||
INTERPRETER_SHORT_NAMES: dict[str, str] = {
|
INTERPRETER_SHORT_NAMES: dict[str, str] = {
|
||||||
"python": "py", # Generic.
|
"python": "py", # Generic.
|
||||||
|
@ -47,7 +47,7 @@ class Tag:
|
||||||
is also supported.
|
is also supported.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = ["_interpreter", "_abi", "_platform", "_hash"]
|
__slots__ = ["_abi", "_hash", "_interpreter", "_platform"]
|
||||||
|
|
||||||
def __init__(self, interpreter: str, abi: str, platform: str) -> None:
|
def __init__(self, interpreter: str, abi: str, platform: str) -> None:
|
||||||
self._interpreter = interpreter.lower()
|
self._interpreter = interpreter.lower()
|
||||||
|
@ -235,9 +235,8 @@ def cpython_tags(
|
||||||
if use_abi3:
|
if use_abi3:
|
||||||
for minor_version in range(python_version[1] - 1, 1, -1):
|
for minor_version in range(python_version[1] - 1, 1, -1):
|
||||||
for platform_ in platforms:
|
for platform_ in platforms:
|
||||||
interpreter = "cp{version}".format(
|
version = _version_nodot((python_version[0], minor_version))
|
||||||
version=_version_nodot((python_version[0], minor_version))
|
interpreter = f"cp{version}"
|
||||||
)
|
|
||||||
yield Tag(interpreter, "abi3", platform_)
|
yield Tag(interpreter, "abi3", platform_)
|
||||||
|
|
||||||
|
|
||||||
|
@ -363,7 +362,7 @@ def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str:
|
||||||
return "i386"
|
return "i386"
|
||||||
|
|
||||||
|
|
||||||
def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> list[str]:
|
def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]:
|
||||||
formats = [cpu_arch]
|
formats = [cpu_arch]
|
||||||
if cpu_arch == "x86_64":
|
if cpu_arch == "x86_64":
|
||||||
if version < (10, 4):
|
if version < (10, 4):
|
||||||
|
@ -396,7 +395,7 @@ def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> list[str]:
|
||||||
|
|
||||||
|
|
||||||
def mac_platforms(
|
def mac_platforms(
|
||||||
version: MacVersion | None = None, arch: str | None = None
|
version: AppleVersion | None = None, arch: str | None = None
|
||||||
) -> Iterator[str]:
|
) -> Iterator[str]:
|
||||||
"""
|
"""
|
||||||
Yields the platform tags for a macOS system.
|
Yields the platform tags for a macOS system.
|
||||||
|
@ -408,7 +407,7 @@ def mac_platforms(
|
||||||
"""
|
"""
|
||||||
version_str, _, cpu_arch = platform.mac_ver()
|
version_str, _, cpu_arch = platform.mac_ver()
|
||||||
if version is None:
|
if version is None:
|
||||||
version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2])))
|
version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
|
||||||
if version == (10, 16):
|
if version == (10, 16):
|
||||||
# When built against an older macOS SDK, Python will report macOS 10.16
|
# When built against an older macOS SDK, Python will report macOS 10.16
|
||||||
# instead of the real version.
|
# instead of the real version.
|
||||||
|
@ -424,7 +423,7 @@ def mac_platforms(
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
text=True,
|
text=True,
|
||||||
).stdout
|
).stdout
|
||||||
version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2])))
|
version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
|
||||||
else:
|
else:
|
||||||
version = version
|
version = version
|
||||||
if arch is None:
|
if arch is None:
|
||||||
|
@ -435,24 +434,22 @@ def mac_platforms(
|
||||||
if (10, 0) <= version and version < (11, 0):
|
if (10, 0) <= version and version < (11, 0):
|
||||||
# Prior to Mac OS 11, each yearly release of Mac OS bumped the
|
# Prior to Mac OS 11, each yearly release of Mac OS bumped the
|
||||||
# "minor" version number. The major version was always 10.
|
# "minor" version number. The major version was always 10.
|
||||||
|
major_version = 10
|
||||||
for minor_version in range(version[1], -1, -1):
|
for minor_version in range(version[1], -1, -1):
|
||||||
compat_version = 10, minor_version
|
compat_version = major_version, minor_version
|
||||||
binary_formats = _mac_binary_formats(compat_version, arch)
|
binary_formats = _mac_binary_formats(compat_version, arch)
|
||||||
for binary_format in binary_formats:
|
for binary_format in binary_formats:
|
||||||
yield "macosx_{major}_{minor}_{binary_format}".format(
|
yield f"macosx_{major_version}_{minor_version}_{binary_format}"
|
||||||
major=10, minor=minor_version, binary_format=binary_format
|
|
||||||
)
|
|
||||||
|
|
||||||
if version >= (11, 0):
|
if version >= (11, 0):
|
||||||
# Starting with Mac OS 11, each yearly release bumps the major version
|
# Starting with Mac OS 11, each yearly release bumps the major version
|
||||||
# number. The minor versions are now the midyear updates.
|
# number. The minor versions are now the midyear updates.
|
||||||
|
minor_version = 0
|
||||||
for major_version in range(version[0], 10, -1):
|
for major_version in range(version[0], 10, -1):
|
||||||
compat_version = major_version, 0
|
compat_version = major_version, minor_version
|
||||||
binary_formats = _mac_binary_formats(compat_version, arch)
|
binary_formats = _mac_binary_formats(compat_version, arch)
|
||||||
for binary_format in binary_formats:
|
for binary_format in binary_formats:
|
||||||
yield "macosx_{major}_{minor}_{binary_format}".format(
|
yield f"macosx_{major_version}_{minor_version}_{binary_format}"
|
||||||
major=major_version, minor=0, binary_format=binary_format
|
|
||||||
)
|
|
||||||
|
|
||||||
if version >= (11, 0):
|
if version >= (11, 0):
|
||||||
# Mac OS 11 on x86_64 is compatible with binaries from previous releases.
|
# Mac OS 11 on x86_64 is compatible with binaries from previous releases.
|
||||||
|
@ -462,24 +459,74 @@ def mac_platforms(
|
||||||
# However, the "universal2" binary format can have a
|
# However, the "universal2" binary format can have a
|
||||||
# macOS version earlier than 11.0 when the x86_64 part of the binary supports
|
# macOS version earlier than 11.0 when the x86_64 part of the binary supports
|
||||||
# that version of macOS.
|
# that version of macOS.
|
||||||
|
major_version = 10
|
||||||
if arch == "x86_64":
|
if arch == "x86_64":
|
||||||
for minor_version in range(16, 3, -1):
|
for minor_version in range(16, 3, -1):
|
||||||
compat_version = 10, minor_version
|
compat_version = major_version, minor_version
|
||||||
binary_formats = _mac_binary_formats(compat_version, arch)
|
binary_formats = _mac_binary_formats(compat_version, arch)
|
||||||
for binary_format in binary_formats:
|
for binary_format in binary_formats:
|
||||||
yield "macosx_{major}_{minor}_{binary_format}".format(
|
yield f"macosx_{major_version}_{minor_version}_{binary_format}"
|
||||||
major=compat_version[0],
|
|
||||||
minor=compat_version[1],
|
|
||||||
binary_format=binary_format,
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
for minor_version in range(16, 3, -1):
|
for minor_version in range(16, 3, -1):
|
||||||
compat_version = 10, minor_version
|
compat_version = major_version, minor_version
|
||||||
binary_format = "universal2"
|
binary_format = "universal2"
|
||||||
yield "macosx_{major}_{minor}_{binary_format}".format(
|
yield f"macosx_{major_version}_{minor_version}_{binary_format}"
|
||||||
major=compat_version[0],
|
|
||||||
minor=compat_version[1],
|
|
||||||
binary_format=binary_format,
|
def ios_platforms(
|
||||||
|
version: AppleVersion | None = None, multiarch: str | None = None
|
||||||
|
) -> Iterator[str]:
|
||||||
|
"""
|
||||||
|
Yields the platform tags for an iOS system.
|
||||||
|
|
||||||
|
:param version: A two-item tuple specifying the iOS version to generate
|
||||||
|
platform tags for. Defaults to the current iOS version.
|
||||||
|
:param multiarch: The CPU architecture+ABI to generate platform tags for -
|
||||||
|
(the value used by `sys.implementation._multiarch` e.g.,
|
||||||
|
`arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current
|
||||||
|
multiarch value.
|
||||||
|
"""
|
||||||
|
if version is None:
|
||||||
|
# if iOS is the current platform, ios_ver *must* be defined. However,
|
||||||
|
# it won't exist for CPython versions before 3.13, which causes a mypy
|
||||||
|
# error.
|
||||||
|
_, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore]
|
||||||
|
version = cast("AppleVersion", tuple(map(int, release.split(".")[:2])))
|
||||||
|
|
||||||
|
if multiarch is None:
|
||||||
|
multiarch = sys.implementation._multiarch
|
||||||
|
multiarch = multiarch.replace("-", "_")
|
||||||
|
|
||||||
|
ios_platform_template = "ios_{major}_{minor}_{multiarch}"
|
||||||
|
|
||||||
|
# Consider any iOS major.minor version from the version requested, down to
|
||||||
|
# 12.0. 12.0 is the first iOS version that is known to have enough features
|
||||||
|
# to support CPython. Consider every possible minor release up to X.9. There
|
||||||
|
# highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra
|
||||||
|
# candidates that won't ever match doesn't really hurt, and it saves us from
|
||||||
|
# having to keep an explicit list of known iOS versions in the code. Return
|
||||||
|
# the results descending order of version number.
|
||||||
|
|
||||||
|
# If the requested major version is less than 12, there won't be any matches.
|
||||||
|
if version[0] < 12:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Consider the actual X.Y version that was requested.
|
||||||
|
yield ios_platform_template.format(
|
||||||
|
major=version[0], minor=version[1], multiarch=multiarch
|
||||||
|
)
|
||||||
|
|
||||||
|
# Consider every minor version from X.0 to the minor version prior to the
|
||||||
|
# version requested by the platform.
|
||||||
|
for minor in range(version[1] - 1, -1, -1):
|
||||||
|
yield ios_platform_template.format(
|
||||||
|
major=version[0], minor=minor, multiarch=multiarch
|
||||||
|
)
|
||||||
|
|
||||||
|
for major in range(version[0] - 1, 11, -1):
|
||||||
|
for minor in range(9, -1, -1):
|
||||||
|
yield ios_platform_template.format(
|
||||||
|
major=major, minor=minor, multiarch=multiarch
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -512,6 +559,8 @@ def platform_tags() -> Iterator[str]:
|
||||||
"""
|
"""
|
||||||
if platform.system() == "Darwin":
|
if platform.system() == "Darwin":
|
||||||
return mac_platforms()
|
return mac_platforms()
|
||||||
|
elif platform.system() == "iOS":
|
||||||
|
return ios_platforms()
|
||||||
elif platform.system() == "Linux":
|
elif platform.system() == "Linux":
|
||||||
return _linux_platforms()
|
return _linux_platforms()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -4,11 +4,12 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import functools
|
||||||
import re
|
import re
|
||||||
from typing import NewType, Tuple, Union, cast
|
from typing import NewType, Tuple, Union, cast
|
||||||
|
|
||||||
from .tags import Tag, parse_tag
|
from .tags import Tag, parse_tag
|
||||||
from .version import InvalidVersion, Version
|
from .version import InvalidVersion, Version, _TrimmedRelease
|
||||||
|
|
||||||
BuildTag = Union[Tuple[()], Tuple[int, str]]
|
BuildTag = Union[Tuple[()], Tuple[int, str]]
|
||||||
NormalizedName = NewType("NormalizedName", str)
|
NormalizedName = NewType("NormalizedName", str)
|
||||||
|
@ -54,52 +55,40 @@ def is_normalized_name(name: str) -> bool:
|
||||||
return _normalized_regex.match(name) is not None
|
return _normalized_regex.match(name) is not None
|
||||||
|
|
||||||
|
|
||||||
|
@functools.singledispatch
|
||||||
def canonicalize_version(
|
def canonicalize_version(
|
||||||
version: Version | str, *, strip_trailing_zero: bool = True
|
version: Version | str, *, strip_trailing_zero: bool = True
|
||||||
) -> str:
|
) -> str:
|
||||||
"""
|
"""
|
||||||
This is very similar to Version.__str__, but has one subtle difference
|
Return a canonical form of a version as a string.
|
||||||
with the way it handles the release segment.
|
|
||||||
|
>>> canonicalize_version('1.0.1')
|
||||||
|
'1.0.1'
|
||||||
|
|
||||||
|
Per PEP 625, versions may have multiple canonical forms, differing
|
||||||
|
only by trailing zeros.
|
||||||
|
|
||||||
|
>>> canonicalize_version('1.0.0')
|
||||||
|
'1'
|
||||||
|
>>> canonicalize_version('1.0.0', strip_trailing_zero=False)
|
||||||
|
'1.0.0'
|
||||||
|
|
||||||
|
Invalid versions are returned unaltered.
|
||||||
|
|
||||||
|
>>> canonicalize_version('foo bar baz')
|
||||||
|
'foo bar baz'
|
||||||
"""
|
"""
|
||||||
if isinstance(version, str):
|
return str(_TrimmedRelease(str(version)) if strip_trailing_zero else version)
|
||||||
|
|
||||||
|
|
||||||
|
@canonicalize_version.register
|
||||||
|
def _(version: str, *, strip_trailing_zero: bool = True) -> str:
|
||||||
try:
|
try:
|
||||||
parsed = Version(version)
|
parsed = Version(version)
|
||||||
except InvalidVersion:
|
except InvalidVersion:
|
||||||
# Legacy versions cannot be normalized
|
# Legacy versions cannot be normalized
|
||||||
return version
|
return version
|
||||||
else:
|
return canonicalize_version(parsed, strip_trailing_zero=strip_trailing_zero)
|
||||||
parsed = version
|
|
||||||
|
|
||||||
parts = []
|
|
||||||
|
|
||||||
# Epoch
|
|
||||||
if parsed.epoch != 0:
|
|
||||||
parts.append(f"{parsed.epoch}!")
|
|
||||||
|
|
||||||
# Release segment
|
|
||||||
release_segment = ".".join(str(x) for x in parsed.release)
|
|
||||||
if strip_trailing_zero:
|
|
||||||
# NB: This strips trailing '.0's to normalize
|
|
||||||
release_segment = re.sub(r"(\.0)+$", "", release_segment)
|
|
||||||
parts.append(release_segment)
|
|
||||||
|
|
||||||
# Pre-release
|
|
||||||
if parsed.pre is not None:
|
|
||||||
parts.append("".join(str(x) for x in parsed.pre))
|
|
||||||
|
|
||||||
# Post-release
|
|
||||||
if parsed.post is not None:
|
|
||||||
parts.append(f".post{parsed.post}")
|
|
||||||
|
|
||||||
# Development release
|
|
||||||
if parsed.dev is not None:
|
|
||||||
parts.append(f".dev{parsed.dev}")
|
|
||||||
|
|
||||||
# Local version segment
|
|
||||||
if parsed.local is not None:
|
|
||||||
parts.append(f"+{parsed.local}")
|
|
||||||
|
|
||||||
return "".join(parts)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_wheel_filename(
|
def parse_wheel_filename(
|
||||||
|
@ -107,28 +96,28 @@ def parse_wheel_filename(
|
||||||
) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]:
|
) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]:
|
||||||
if not filename.endswith(".whl"):
|
if not filename.endswith(".whl"):
|
||||||
raise InvalidWheelFilename(
|
raise InvalidWheelFilename(
|
||||||
f"Invalid wheel filename (extension must be '.whl'): {filename}"
|
f"Invalid wheel filename (extension must be '.whl'): {filename!r}"
|
||||||
)
|
)
|
||||||
|
|
||||||
filename = filename[:-4]
|
filename = filename[:-4]
|
||||||
dashes = filename.count("-")
|
dashes = filename.count("-")
|
||||||
if dashes not in (4, 5):
|
if dashes not in (4, 5):
|
||||||
raise InvalidWheelFilename(
|
raise InvalidWheelFilename(
|
||||||
f"Invalid wheel filename (wrong number of parts): {filename}"
|
f"Invalid wheel filename (wrong number of parts): {filename!r}"
|
||||||
)
|
)
|
||||||
|
|
||||||
parts = filename.split("-", dashes - 2)
|
parts = filename.split("-", dashes - 2)
|
||||||
name_part = parts[0]
|
name_part = parts[0]
|
||||||
# See PEP 427 for the rules on escaping the project name.
|
# See PEP 427 for the rules on escaping the project name.
|
||||||
if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
|
if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
|
||||||
raise InvalidWheelFilename(f"Invalid project name: {filename}")
|
raise InvalidWheelFilename(f"Invalid project name: {filename!r}")
|
||||||
name = canonicalize_name(name_part)
|
name = canonicalize_name(name_part)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
version = Version(parts[1])
|
version = Version(parts[1])
|
||||||
except InvalidVersion as e:
|
except InvalidVersion as e:
|
||||||
raise InvalidWheelFilename(
|
raise InvalidWheelFilename(
|
||||||
f"Invalid wheel filename (invalid version): {filename}"
|
f"Invalid wheel filename (invalid version): {filename!r}"
|
||||||
) from e
|
) from e
|
||||||
|
|
||||||
if dashes == 5:
|
if dashes == 5:
|
||||||
|
@ -136,7 +125,7 @@ def parse_wheel_filename(
|
||||||
build_match = _build_tag_regex.match(build_part)
|
build_match = _build_tag_regex.match(build_part)
|
||||||
if build_match is None:
|
if build_match is None:
|
||||||
raise InvalidWheelFilename(
|
raise InvalidWheelFilename(
|
||||||
f"Invalid build number: {build_part} in '{filename}'"
|
f"Invalid build number: {build_part} in {filename!r}"
|
||||||
)
|
)
|
||||||
build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2)))
|
build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2)))
|
||||||
else:
|
else:
|
||||||
|
@ -153,14 +142,14 @@ def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
|
||||||
else:
|
else:
|
||||||
raise InvalidSdistFilename(
|
raise InvalidSdistFilename(
|
||||||
f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):"
|
f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):"
|
||||||
f" {filename}"
|
f" {filename!r}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# We are requiring a PEP 440 version, which cannot contain dashes,
|
# We are requiring a PEP 440 version, which cannot contain dashes,
|
||||||
# so we split on the last dash.
|
# so we split on the last dash.
|
||||||
name_part, sep, version_part = file_stem.rpartition("-")
|
name_part, sep, version_part = file_stem.rpartition("-")
|
||||||
if not sep:
|
if not sep:
|
||||||
raise InvalidSdistFilename(f"Invalid sdist filename: {filename}")
|
raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}")
|
||||||
|
|
||||||
name = canonicalize_name(name_part)
|
name = canonicalize_name(name_part)
|
||||||
|
|
||||||
|
@ -168,7 +157,7 @@ def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
|
||||||
version = Version(version_part)
|
version = Version(version_part)
|
||||||
except InvalidVersion as e:
|
except InvalidVersion as e:
|
||||||
raise InvalidSdistFilename(
|
raise InvalidSdistFilename(
|
||||||
f"Invalid sdist filename (invalid version): {filename}"
|
f"Invalid sdist filename (invalid version): {filename!r}"
|
||||||
) from e
|
) from e
|
||||||
|
|
||||||
return (name, version)
|
return (name, version)
|
||||||
|
|
|
@ -15,7 +15,7 @@ from typing import Any, Callable, NamedTuple, SupportsInt, Tuple, Union
|
||||||
|
|
||||||
from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType
|
from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType
|
||||||
|
|
||||||
__all__ = ["VERSION_PATTERN", "parse", "Version", "InvalidVersion"]
|
__all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"]
|
||||||
|
|
||||||
LocalType = Tuple[Union[int, str], ...]
|
LocalType = Tuple[Union[int, str], ...]
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ class Version(_BaseVersion):
|
||||||
# Validate the version and parse it into pieces
|
# Validate the version and parse it into pieces
|
||||||
match = self._regex.search(version)
|
match = self._regex.search(version)
|
||||||
if not match:
|
if not match:
|
||||||
raise InvalidVersion(f"Invalid version: '{version}'")
|
raise InvalidVersion(f"Invalid version: {version!r}")
|
||||||
|
|
||||||
# Store the parsed out pieces of the version
|
# Store the parsed out pieces of the version
|
||||||
self._version = _Version(
|
self._version = _Version(
|
||||||
|
@ -232,7 +232,7 @@ class Version(_BaseVersion):
|
||||||
return f"<Version('{self}')>"
|
return f"<Version('{self}')>"
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
"""A string representation of the version that can be rounded-tripped.
|
"""A string representation of the version that can be round-tripped.
|
||||||
|
|
||||||
>>> str(Version("1.0a5"))
|
>>> str(Version("1.0a5"))
|
||||||
'1.0a5'
|
'1.0a5'
|
||||||
|
@ -350,8 +350,8 @@ class Version(_BaseVersion):
|
||||||
'1.2.3'
|
'1.2.3'
|
||||||
>>> Version("1.2.3+abc").public
|
>>> Version("1.2.3+abc").public
|
||||||
'1.2.3'
|
'1.2.3'
|
||||||
>>> Version("1.2.3+abc.dev1").public
|
>>> Version("1!1.2.3dev1+abc").public
|
||||||
'1.2.3'
|
'1!1.2.3.dev1'
|
||||||
"""
|
"""
|
||||||
return str(self).split("+", 1)[0]
|
return str(self).split("+", 1)[0]
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ class Version(_BaseVersion):
|
||||||
'1.2.3'
|
'1.2.3'
|
||||||
>>> Version("1.2.3+abc").base_version
|
>>> Version("1.2.3+abc").base_version
|
||||||
'1.2.3'
|
'1.2.3'
|
||||||
>>> Version("1!1.2.3+abc.dev1").base_version
|
>>> Version("1!1.2.3dev1+abc").base_version
|
||||||
'1!1.2.3'
|
'1!1.2.3'
|
||||||
|
|
||||||
The "base version" is the public version of the project without any pre or post
|
The "base version" is the public version of the project without any pre or post
|
||||||
|
@ -451,6 +451,23 @@ class Version(_BaseVersion):
|
||||||
return self.release[2] if len(self.release) >= 3 else 0
|
return self.release[2] if len(self.release) >= 3 else 0
|
||||||
|
|
||||||
|
|
||||||
|
class _TrimmedRelease(Version):
|
||||||
|
@property
|
||||||
|
def release(self) -> tuple[int, ...]:
|
||||||
|
"""
|
||||||
|
Release segment without any trailing zeros.
|
||||||
|
|
||||||
|
>>> _TrimmedRelease('1.0.0').release
|
||||||
|
(1,)
|
||||||
|
>>> _TrimmedRelease('0.0').release
|
||||||
|
(0,)
|
||||||
|
"""
|
||||||
|
rel = super().release
|
||||||
|
nonzeros = (index for index, val in enumerate(rel) if val)
|
||||||
|
last_nonzero = max(nonzeros, default=0)
|
||||||
|
return rel[: last_nonzero + 1]
|
||||||
|
|
||||||
|
|
||||||
def _parse_letter_version(
|
def _parse_letter_version(
|
||||||
letter: str | None, number: str | bytes | SupportsInt | None
|
letter: str | None, number: str | bytes | SupportsInt | None
|
||||||
) -> tuple[str, int] | None:
|
) -> tuple[str, int] | None:
|
||||||
|
@ -476,7 +493,9 @@ def _parse_letter_version(
|
||||||
letter = "post"
|
letter = "post"
|
||||||
|
|
||||||
return letter, int(number)
|
return letter, int(number)
|
||||||
if not letter and number:
|
|
||||||
|
assert not letter
|
||||||
|
if number:
|
||||||
# We assume if we are given a number, but we are not given a letter
|
# We assume if we are given a number, but we are not given a letter
|
||||||
# then this is using the implicit post release syntax (e.g. 1.0-1)
|
# then this is using the implicit post release syntax (e.g. 1.0-1)
|
||||||
letter = "post"
|
letter = "post"
|
||||||
|
|
|
@ -23,7 +23,7 @@ IPy==1.01
|
||||||
Mako==1.3.6
|
Mako==1.3.6
|
||||||
MarkupSafe==2.1.5
|
MarkupSafe==2.1.5
|
||||||
musicbrainzngs==0.7.1
|
musicbrainzngs==0.7.1
|
||||||
packaging==24.1
|
packaging==24.2
|
||||||
paho-mqtt==2.1.0
|
paho-mqtt==2.1.0
|
||||||
platformdirs==4.3.6
|
platformdirs==4.3.6
|
||||||
plexapi==4.15.16
|
plexapi==4.15.16
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue