spdx_tools.spdx.parser.json.json_parser
1# SPDX-FileCopyrightText: 2022 spdx contributors 2# 3# SPDX-License-Identifier: Apache-2.0 4import json 5 6from beartype.typing import Any, Dict 7 8from spdx_tools.spdx.model import Document 9from spdx_tools.spdx.parser.jsonlikedict.json_like_dict_parser import JsonLikeDictParser 10 11# chars we don't want to see in SBOMs 12CONTROL_CHARS_MAP = { 13 8: None, # ASCII/UTF-8: backspace 14 12: None, # ASCII/UTF-8: formfeed 15} 16 17 18def remove_control_chars_from_value(value: Any) -> Any: 19 if isinstance(value, str): 20 return value.translate(CONTROL_CHARS_MAP) 21 elif isinstance(value, list): 22 for i in range(len(value)): 23 value[i] = remove_control_chars_from_value(value[i]) 24 return value 25 26 27def remove_json_control_chars_hook(pairs: list) -> dict: 28 return {k: remove_control_chars_from_value(v) for k, v in pairs} 29 30 31def parse_from_file(file_name: str, encoding: str = "utf-8") -> Document: 32 with open(file_name, encoding=encoding) as file: 33 input_doc_as_dict: Dict = json.load(file, object_pairs_hook=remove_json_control_chars_hook) 34 35 return JsonLikeDictParser().parse(input_doc_as_dict)
CONTROL_CHARS_MAP =
{8: None, 12: None}
def
remove_control_chars_from_value(value: Any) -> Any:
def
remove_json_control_chars_hook(pairs: list) -> dict:
def
parse_from_file( file_name: str, encoding: str = 'utf-8') -> spdx_tools.spdx.model.document.Document: