22
33from ..backends import backends , DriverBase
44
5- from typing import Any , Callable , Generic , TypeVar , Union
6-
75
86def _create_driver () -> DriverBase :
97 active_drivers = [x .driver for x in backends .values () if x .driver .is_active ()]
@@ -12,52 +10,29 @@ def _create_driver() -> DriverBase:
1210 return active_drivers [0 ]()
1311
1412
15- T = TypeVar ("T" )
16-
17-
18- class LazyProxy (Generic [T ]):
19-
20- def __init__ (self , init_fn : Callable [[], T ]) -> None :
21- self ._init_fn = init_fn
22- self ._obj : Union [T , None ] = None
23-
24- def _initialize_obj (self ) -> T :
25- if self ._obj is None :
26- self ._obj = self ._init_fn ()
27- return self ._obj
28-
29- def __getattr__ (self , name ) -> Any :
30- return getattr (self ._initialize_obj (), name )
31-
32- def __setattr__ (self , name : str , value : Any ) -> None :
33- if name in ["_init_fn" , "_obj" ]:
34- super ().__setattr__ (name , value )
35- else :
36- setattr (self ._initialize_obj (), name , value )
37-
38- def __delattr__ (self , name : str ) -> None :
39- delattr (self ._initialize_obj (), name )
40-
41- def __repr__ (self ) -> str :
42- if self ._obj is None :
43- return f"<{ self .__class__ .__name__ } for { self ._init_fn } not yet initialized>"
44- return repr (self ._obj )
45-
46- def __str__ (self ) -> str :
47- return str (self ._initialize_obj ())
48-
49-
5013class DriverConfig :
5114
5215 def __init__ (self ) -> None :
53- self .default : LazyProxy [DriverBase ] = LazyProxy (_create_driver )
54- self .active : Union [LazyProxy [DriverBase ], DriverBase ] = self .default
16+ self ._default : DriverBase | None = None
17+ self ._active : DriverBase | None = None
18+
19+ @property
20+ def default (self ) -> DriverBase :
21+ if self ._default is None :
22+ self ._default = _create_driver ()
23+ return self ._default
24+
25+ @property
26+ def active (self ) -> DriverBase :
27+ if self ._active is None :
28+ self ._active = self .default
29+ return self ._active
5530
5631 def set_active (self , driver : DriverBase ) -> None :
57- self .active = driver
32+ self ._active = driver
5833
5934 def reset_active (self ) -> None :
60- self .active = self .default
35+ self ._active = self .default
6136
6237
6338driver = DriverConfig ()
0 commit comments