Coverage for src/somesy/codemeta/exec.py: 100%
18 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-10 14:33 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-10 14:33 +0000
1"""Wrappers around codemetapy and cffconvert Python APIs."""
2import json
3import logging
4from contextlib import redirect_stderr
5from io import StringIO
6from pathlib import Path
7from typing import Dict, List
9from cffconvert.cli.create_citation import create_citation
10from codemeta.codemeta import build
11from codemeta.serializers.jsonld import serialize_to_jsonld
13log = logging.getLogger("somesy")
16def cff_to_codemeta(cff_file: Path) -> Dict:
17 """Get codemeta LD dict from CITATION.cff via cffconvert."""
18 return json.loads(create_citation(cff_file, None).as_codemeta())
21def gen_codemeta(sources: List[str], *, with_entrypoints: bool = True) -> Dict:
22 """Harvest codemeta LD dict via codemetapy."""
23 log.debug(f"Running codemetapy with sources {sources}")
24 with redirect_stderr(StringIO()) as cm_log:
25 g, res, args, _ = build(
26 inputsources=list(map(str, sources)),
27 output="json",
28 with_entrypoints=with_entrypoints,
29 )
30 # add captured codemetapy log into our log
31 log.debug(f"codemetapy log:\n----\n{cm_log.getvalue()}\n----")
33 return serialize_to_jsonld(g, res, args)