Finance-Accounts/ar-aging-app/backend/app/core/readers.py

29 lines
990 B
Python

"""Reader factory: fast calamine engine by default, streaming iterparse as fallback."""
from __future__ import annotations
import os
from .xlsx_reader import TransactionReader
def _calamine_available() -> bool:
if os.environ.get("AR_USE_CALAMINE", "1") == "0":
return False
try:
import python_calamine # noqa: F401
return True
except Exception:
return False
def make_reader(path: str, saved_overrides: dict[str, str] | None = None):
"""
Return a reader with the TransactionReader interface (detect/iter_records/file_meta/close).
Uses python-calamine when available (much faster, higher peak memory); otherwise the
low-memory streaming reader. Set AR_USE_CALAMINE=0 to force the streaming reader.
"""
if _calamine_available():
from .calamine_reader import CalamineReader
return CalamineReader(path, saved_overrides=saved_overrides)
return TransactionReader(path, saved_overrides=saved_overrides)