Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.managers.licenses
import json
import logging
from typing import List
from pydantic import (
BaseModel,
Field,
HttpUrl,
)
from galaxy import exceptions
from galaxy.util.resources import resource_string
log = logging.getLogger(__name__)
# https://github.com/spdx/license-list-data/blob/master/accessingLicenses.md#license-list-table-of-contents
[docs]class LicenseMetadataModel(BaseModel):
licenseId: str = Field(title="Identifier", description="SPDX Identifier", examples=["Apache-2.0"])
name: str = Field(title="Name", description="Full name of the license", examples=["Apache License 2.0"])
reference: str = Field(
title="Reference",
description="Reference to the HTML format for the license file",
examples=["./Apache-2.0.html"],
)
referenceNumber: int = Field(
title="Reference number", description="*Deprecated* - this field is generated and is no longer in use"
)
isDeprecatedLicenseId: bool = Field(
title="Deprecated License", description="True if the entire license is deprecated", examples=[False]
)
isOsiApproved: bool = Field(
title="OSI approved",
description="Indicates if the [OSI](https://opensource.org/) has approved the license",
examples=[True],
)
seeAlso: List[HttpUrl] = Field(
title="Reference URLs", description="Cross reference URL pointing to additional copies of the license"
)
detailsUrl: HttpUrl = Field(
title="Details URL",
description="URL to the SPDX json details for this license",
examples=["http://spdx.org/licenses/Apache-2.0.json"],
)
recommended: bool = Field(title="Recommended", description="True if this license is recommended to be used")
url: HttpUrl = Field(
title="URL", description="License URL", examples=["http://www.apache.org/licenses/LICENSE-2.0"]
)
spdxUrl: HttpUrl = Field(title="SPDX URL", examples=["https://spdx.org/licenses/Apache-2.0.html"])
# https://docs.google.com/document/d/16vnRtDjrx5eHSl4jXs2vMaDTI6luyyLzU6xMvRHsnbI/edit#heading=h.1pihjj16olz2
RECOMMENDED_LICENSES = [
"Apache-2.0",
"Artistic-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"CC-BY-4.0",
"CC-BY-SA-4.0",
"CC0-1.0",
"EPL-2.0",
"AGPL-3.0-or-later",
"GPL-3.0-or-later",
"MIT",
"MPL-2.0",
"PDDL-1.0",
]
SPDX_LICENSES_STRING = resource_string(__name__, "licenses.json")
SPDX_LICENSES = json.loads(SPDX_LICENSES_STRING)
for license in SPDX_LICENSES["licenses"]:
license["recommended"] = license["licenseId"] in RECOMMENDED_LICENSES
license["spdxUrl"] = f"https://spdx.org/licenses/{license['reference'][len('./'):]}"
seeAlso = license.get("seeAlso", [])
if len(seeAlso) > 0:
url = seeAlso[0]
else:
url = license["spdxUrl"]
license["url"] = url
[docs]class LicensesManager:
[docs] def __init__(self):
by_index = {}
for spdx_license in self.index():
by_index[spdx_license["licenseId"]] = spdx_license
by_index[spdx_license["detailsUrl"]] = spdx_license
for seeAlso in spdx_license.get("seeAlso", []):
by_index[seeAlso] = spdx_license
self._by_index = by_index
[docs] def get(self, uri):
if uri in self._by_index:
return self._by_index[uri]
else:
log.warning(f"Unknown license URI encountered [{uri}]")
return {"url": uri}
[docs] def get_license_by_id(self, id: str) -> LicenseMetadataModel:
license = self.get(id)
if license.get("licenseId", None) is None:
raise exceptions.ObjectNotFound(f"License '{id}' not found")
return LicenseMetadataModel(**license)