29 lines
990 B
Python
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)
|