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 index(self): return SPDX_LICENSES["licenses"]
[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_licenses(self) -> List[LicenseMetadataModel]: return SPDX_LICENSES["licenses"]
[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)