Source code for swh.indexer.metadata_dictionary
# Copyright (C) 2017-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 collections
from typing import Dict, Type
import click
from . import (
cff,
codemeta,
composer,
dart,
gitea,
github,
maven,
npm,
nuget,
python,
ruby,
)
from .base import BaseExtrinsicMapping, BaseIntrinsicMapping, BaseMapping
INTRINSIC_MAPPINGS: Dict[str, Type[BaseIntrinsicMapping]] = {
"CffMapping": cff.CffMapping,
"CodemetaMapping": codemeta.CodemetaMapping,
"GemspecMapping": ruby.GemspecMapping,
"MavenMapping": maven.MavenMapping,
"NpmMapping": npm.NpmMapping,
"PubMapping": dart.PubspecMapping,
"PythonPkginfoMapping": python.PythonPkginfoMapping,
"ComposerMapping": composer.ComposerMapping,
"NuGetMapping": nuget.NuGetMapping,
}
EXTRINSIC_MAPPINGS: Dict[str, Type[BaseExtrinsicMapping]] = {
"GiteaMapping": gitea.GiteaMapping,
"GitHubMapping": github.GitHubMapping,
"JsonSwordCodemetaMapping": codemeta.JsonSwordCodemetaMapping,
"SwordCodemetaMapping": codemeta.SwordCodemetaMapping,
}
MAPPINGS: Dict[str, Type[BaseMapping]] = {**INTRINSIC_MAPPINGS, **EXTRINSIC_MAPPINGS}
[docs]
def list_terms():
"""Returns a dictionary with all supported CodeMeta terms as keys,
and the mappings that support each of them as values."""
d = collections.defaultdict(set)
for mapping in MAPPINGS.values():
for term in mapping.supported_terms():
d[term].add(mapping)
return d
@click.command()
@click.argument("mapping_name")
@click.argument("file_name")
def main(mapping_name: str, file_name: str):
from pprint import pprint
with open(file_name, "rb") as fd:
file_content = fd.read()
res = MAPPINGS[mapping_name]().translate(file_content)
pprint(res)
if __name__ == "__main__":
main()