Source code for fable_pyculator.workbook

"""Workbook loading helpers for FABLE Calculator workbooks."""

from __future__ import annotations

from collections.abc import Iterator
from contextlib import contextmanager
from pathlib import Path
import warnings
from typing import Any

from openpyxl import load_workbook
from openpyxl.workbook.workbook import Workbook


BENIGN_OPENPYXL_WARNING_PATTERNS = (
    r"wmf image format is not supported so the image is being dropped",
    r"Data Validation extension is not supported and will be removed",
)


[docs] def load_fable_workbook(path: str | Path, **kwargs: Any) -> Workbook: """Load a FABLE workbook while suppressing known irrelevant OpenPyXL warnings. The public FABLE-C workbooks include workbook features that FABLE Pyculator does not use for scenario control discovery, output-table discovery, notebook rendering, or generated-model rebuild preparation. OpenPyXL warns when it drops unsupported WMF images or data-validation extension metadata; those warnings are benign for this package's workbook surfaces. """ with suppress_benign_openpyxl_warnings(): return load_workbook(path, **kwargs)
[docs] @contextmanager def suppress_benign_openpyxl_warnings() -> Iterator[None]: """Suppress only the known benign OpenPyXL warnings seen in FABLE workbooks.""" with warnings.catch_warnings(): for pattern in BENIGN_OPENPYXL_WARNING_PATTERNS: warnings.filterwarnings( "ignore", message=pattern, category=UserWarning, module=r"openpyxl\..*", ) yield