ballagb19's picture
Upload captcha_solver/engines/base.py with huggingface_hub
0e91bb3 verified
Raw
History Blame Contribute Delete
1.19 kB
"""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}>"