driver.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from __future__ import annotations
  2. from ..backends import backends, DriverBase
  3. def _create_driver() -> DriverBase:
  4. active_drivers = [x.driver for x in backends.values() if x.driver.is_active()]
  5. if len(active_drivers) != 1:
  6. raise RuntimeError(f"{len(active_drivers)} active drivers ({active_drivers}). There should only be one.")
  7. return active_drivers[0]()
  8. class DriverConfig:
  9. def __init__(self) -> None:
  10. self._default: DriverBase | None = None
  11. self._active: DriverBase | None = None
  12. @property
  13. def default(self) -> DriverBase:
  14. if self._default is None:
  15. self._default = _create_driver()
  16. return self._default
  17. @property
  18. def active(self) -> DriverBase:
  19. if self._active is None:
  20. self._active = self.default
  21. return self._active
  22. def set_active(self, driver: DriverBase) -> None:
  23. self._active = driver
  24. def reset_active(self) -> None:
  25. self._active = self.default
  26. driver = DriverConfig()