55import uuid
66from asyncio import Lock as LocalLock
77from asyncio import sleep
8- from typing import TYPE_CHECKING , Optional , Union
8+ from typing import TYPE_CHECKING
99
1010import redis .asyncio as redis
1111from prometheus_client import Histogram
4747class InfrahubMultiLock :
4848 """Context manager to allow multiple locks to be reserved together"""
4949
50- def __init__ (self , lock_registry : InfrahubLockRegistry , locks : Optional [ list [str ]] = None ) -> None :
50+ def __init__ (self , lock_registry : InfrahubLockRegistry , locks : list [str ] | None = None ) -> None :
5151 self .registry = lock_registry
5252 self .locks = locks or []
5353
@@ -56,9 +56,9 @@ async def __aenter__(self):
5656
5757 async def __aexit__ (
5858 self ,
59- exc_type : Optional [ type [BaseException ]] ,
60- exc_value : Optional [ BaseException ] ,
61- traceback : Optional [ TracebackType ] ,
59+ exc_type : type [BaseException ] | None ,
60+ exc_value : BaseException | None ,
61+ traceback : TracebackType | None ,
6262 ):
6363 await self .release ()
6464
@@ -84,9 +84,9 @@ async def __aenter__(self):
8484
8585 async def __aexit__ (
8686 self ,
87- exc_type : Optional [ type [BaseException ]] ,
88- exc_value : Optional [ BaseException ] ,
89- traceback : Optional [ TracebackType ] ,
87+ exc_type : type [BaseException ] | None ,
88+ exc_value : BaseException | None ,
89+ traceback : TracebackType | None ,
9090 ):
9191 await self .release ()
9292
@@ -117,18 +117,18 @@ class InfrahubLock:
117117 def __init__ (
118118 self ,
119119 name : str ,
120- connection : Optional [ Union [ redis .Redis , InfrahubServices ]] = None ,
121- local : Optional [ bool ] = None ,
120+ connection : redis .Redis | InfrahubServices | None = None ,
121+ local : bool | None = None ,
122122 in_multi : bool = False ,
123123 ) -> None :
124124 self .use_local : bool = local
125125 self .local : LocalLock = None
126126 self .remote : GlobalLock = None
127127 self .name : str = name
128- self .connection : Optional [ redis .Redis ] = connection
128+ self .connection : redis .Redis | None = connection
129129 self .in_multi : bool = in_multi
130130 self .lock_type : str = "multi" if self .in_multi else "individual"
131- self .acquire_time : Optional [ int ] = None
131+ self .acquire_time : int | None = None
132132 self .event = asyncio .Event ()
133133
134134 if not self .connection or (self .use_local is None and name .startswith ("local." )):
@@ -146,9 +146,9 @@ async def __aenter__(self):
146146
147147 async def __aexit__ (
148148 self ,
149- exc_type : Optional [ type [BaseException ]] ,
150- exc_value : Optional [ BaseException ] ,
151- traceback : Optional [ TracebackType ] ,
149+ exc_type : type [BaseException ] | None ,
150+ exc_value : BaseException | None ,
151+ traceback : TracebackType | None ,
152152 ):
153153 await self .release ()
154154
@@ -179,7 +179,7 @@ async def locked(self) -> bool:
179179
180180class InfrahubLockRegistry :
181181 def __init__ (
182- self , token : Optional [ str ] = None , local_only : bool = False , service : Optional [ InfrahubServices ] = None
182+ self , token : str | None = None , local_only : bool = False , service : InfrahubServices | None = None
183183 ) -> None :
184184 if config .SETTINGS .cache .enable and not local_only :
185185 if config .SETTINGS .cache .driver == config .CacheDriver .Redis :
@@ -201,7 +201,7 @@ def __init__(
201201 self .locks : dict [str , InfrahubLock ] = {}
202202
203203 @classmethod
204- def _generate_name (cls , name : str , namespace : Optional [ str ] = None , local : Optional [ bool ] = None ) -> str :
204+ def _generate_name (cls , name : str , namespace : str | None = None , local : bool | None = None ) -> str :
205205 if namespace is None and local is None :
206206 return name
207207
@@ -221,15 +221,15 @@ def get_existing(
221221 self ,
222222 name : str ,
223223 namespace : str | None ,
224- local : Optional [ bool ] = None ,
224+ local : bool | None = None ,
225225 ) -> InfrahubLock | None :
226226 lock_name = self ._generate_name (name = name , namespace = namespace , local = local )
227227 if lock_name not in self .locks :
228228 return None
229229 return self .locks [lock_name ]
230230
231231 def get (
232- self , name : str , namespace : Optional [ str ] = None , local : Optional [ bool ] = None , in_multi : bool = False
232+ self , name : str , namespace : str | None = None , local : bool | None = None , in_multi : bool = False
233233 ) -> InfrahubLock :
234234 lock_name = self ._generate_name (name = name , namespace = namespace , local = local )
235235 if lock_name not in self .locks :
@@ -252,7 +252,7 @@ def global_graph_lock(self) -> InfrahubMultiLock:
252252 return InfrahubMultiLock (lock_registry = self , locks = [LOCAL_SCHEMA_LOCK , GLOBAL_GRAPH_LOCK , GLOBAL_SCHEMA_LOCK ])
253253
254254
255- def initialize_lock (local_only : bool = False , service : Optional [ InfrahubServices ] = None ) -> None :
255+ def initialize_lock (local_only : bool = False , service : InfrahubServices | None = None ) -> None :
256256 global registry
257257 registry = InfrahubLockRegistry (local_only = local_only , service = service )
258258
0 commit comments