Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/metadata_dictionary/cff.py
from typing import Dict, List, Optional, Union | from typing import Dict, List, Optional, Union | ||||
import yaml | import yaml | ||||
from swh.indexer.codemeta import CODEMETA_CONTEXT_URL, CROSSWALK_TABLE, SCHEMA_URI | from swh.indexer.codemeta import CROSSWALK_TABLE, SCHEMA_URI | ||||
from .base import DictMapping, SingleFileMapping | from .base import DictMapping, SingleFileMapping | ||||
class SafeLoader(yaml.SafeLoader): | class SafeLoader(yaml.SafeLoader): | ||||
yaml_implicit_resolvers = { | yaml_implicit_resolvers = { | ||||
k: [r for r in v if r[0] != "tag:yaml.org,2002:timestamp"] | k: [r for r in v if r[0] != "tag:yaml.org,2002:timestamp"] | ||||
for k, v in yaml.SafeLoader.yaml_implicit_resolvers.items() | for k, v in yaml.SafeLoader.yaml_implicit_resolvers.items() | ||||
Show All 11 Lines | class CffMapping(DictMapping, SingleFileMapping): | ||||
def translate(self, raw_content: bytes) -> Optional[Dict[str, str]]: | def translate(self, raw_content: bytes) -> Optional[Dict[str, str]]: | ||||
raw_content_string: str = raw_content.decode() | raw_content_string: str = raw_content.decode() | ||||
try: | try: | ||||
content_dict = yaml.load(raw_content_string, Loader=SafeLoader) | content_dict = yaml.load(raw_content_string, Loader=SafeLoader) | ||||
except yaml.scanner.ScannerError: | except yaml.scanner.ScannerError: | ||||
return None | return None | ||||
if isinstance(content_dict, dict): | if isinstance(content_dict, dict): | ||||
metadata = self._translate_dict(content_dict) | return self._translate_dict(content_dict) | ||||
metadata["@context"] = CODEMETA_CONTEXT_URL | |||||
return metadata | |||||
return None | return None | ||||
def normalize_authors(self, d: List[dict]) -> Dict[str, list]: | def normalize_authors(self, d: List[dict]) -> Dict[str, list]: | ||||
result = [] | result = [] | ||||
for author in d: | for author in d: | ||||
author_data: Dict[str, Optional[Union[str, Dict]]] = { | author_data: Dict[str, Optional[Union[str, Dict]]] = { | ||||
"@type": SCHEMA_URI + "Person" | "@type": SCHEMA_URI + "Person" | ||||
Show All 33 Lines |