Source code for swh.indexer.metadata_dictionary.composer

# Copyright (C) 2022  The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information

import os.path
from typing import Optional

from rdflib import BNode, Graph, Literal, URIRef

from swh.indexer.codemeta import _DATA_DIR, read_crosstable
from swh.indexer.namespaces import RDF, SCHEMA

from .base import JsonMapping, SingleFileIntrinsicMapping
from .utils import add_map

SPDX = URIRef("https://spdx.org/licenses/")


COMPOSER_TABLE_PATH = os.path.join(_DATA_DIR, "composer.csv")

with open(COMPOSER_TABLE_PATH) as fd:
    (CODEMETA_TERMS, COMPOSER_TABLE) = read_crosstable(fd)


[docs] class ComposerMapping(JsonMapping, SingleFileIntrinsicMapping): """Dedicated class for Packagist(composer.json) mapping and translation""" name = "composer" mapping = COMPOSER_TABLE["Composer"] filename = b"composer.json" string_fields = [ "name", "description", "version", "keywords", "license", "author", "authors", ] uri_fields = ["homepage"]
[docs] def normalize_license(self, s): if isinstance(s, str): return SPDX + s
def _translate_author(self, graph: Graph, author) -> Optional[BNode]: if not isinstance(author, dict): return None node = BNode() graph.add((node, RDF.type, SCHEMA.Person)) if isinstance(author.get("name"), str): graph.add((node, SCHEMA.name, Literal(author["name"]))) if isinstance(author.get("email"), str): graph.add((node, SCHEMA.email, Literal(author["email"]))) return node
[docs] def translate_authors(self, graph: Graph, root: URIRef, authors) -> None: add_map(graph, root, SCHEMA.author, self._translate_author, authors)