"""Base engine class.""" from __future__ import annotations import abc from typing import Any class BaseEngine(abc.ABC): """Lifecycle: lazy -> load() -> ready -> unload().""" name: str = "base" def __init__(self) -> None: self._loaded = False self._lock_count = 0 self.last_error: str | None = None @property def loaded(self) -> bool: return self._loaded @property def status(self) -> str: if self._loaded: return "loaded" if self.last_error: return f"error: {self.last_error}" return "not_loaded" def load(self) -> None: if self._loaded: return try: self._do_load() self._loaded = True self.last_error = None except Exception as exc: self.last_error = str(exc) raise def unload(self) -> None: self._do_unload() self._loaded = False @abc.abstractmethod def _do_load(self) -> None: ... @abc.abstractmethod def _do_unload(self) -> None: ... def __repr__(self) -> str: return f"<{self.__class__.__name__} loaded={self._loaded}>"