|
import logging |
|
from pathlib import Path |
|
from typing import Any |
|
|
|
import yaml |
|
from yaml import YAMLError |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def load_yaml_file(file_path: str, ignore_error: bool = True, default_value: Any = {}) -> Any: |
|
""" |
|
Safe loading a YAML file |
|
:param file_path: the path of the YAML file |
|
:param ignore_error: |
|
if True, return default_value if error occurs and the error will be logged in debug level |
|
if False, raise error if error occurs |
|
:param default_value: the value returned when errors ignored |
|
:return: an object of the YAML content |
|
""" |
|
if not file_path or not Path(file_path).exists(): |
|
if ignore_error: |
|
return default_value |
|
else: |
|
raise FileNotFoundError(f"File not found: {file_path}") |
|
|
|
with open(file_path, encoding="utf-8") as yaml_file: |
|
try: |
|
yaml_content = yaml.safe_load(yaml_file) |
|
return yaml_content or default_value |
|
except Exception as e: |
|
if ignore_error: |
|
return default_value |
|
else: |
|
raise YAMLError(f"Failed to load YAML file {file_path}: {e}") from e |
|
|