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

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 

8 

9from cffconvert.cli.create_citation import create_citation 

10from codemeta.codemeta import build 

11from codemeta.serializers.jsonld import serialize_to_jsonld 

12 

13log = logging.getLogger("somesy") 

14 

15 

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()) 

19 

20 

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----") 

32 

33 return serialize_to_jsonld(g, res, args)