39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
from ..backends import backends, DriverBase
|
|
|
|
|
|
def _create_driver() -> DriverBase:
|
|
active_drivers = [x.driver for x in backends.values() if x.driver.is_active()]
|
|
if len(active_drivers) != 1:
|
|
raise RuntimeError(f"{len(active_drivers)} active drivers ({active_drivers}). There should only be one.")
|
|
return active_drivers[0]()
|
|
|
|
|
|
class DriverConfig:
|
|
|
|
def __init__(self) -> None:
|
|
self._default: DriverBase | None = None
|
|
self._active: DriverBase | None = None
|
|
|
|
@property
|
|
def default(self) -> DriverBase:
|
|
if self._default is None:
|
|
self._default = _create_driver()
|
|
return self._default
|
|
|
|
@property
|
|
def active(self) -> DriverBase:
|
|
if self._active is None:
|
|
self._active = self.default
|
|
return self._active
|
|
|
|
def set_active(self, driver: DriverBase) -> None:
|
|
self._active = driver
|
|
|
|
def reset_active(self) -> None:
|
|
self._active = self.default
|
|
|
|
|
|
driver = DriverConfig()
|