11import asyncio
22import time
33from abc import ABC , abstractmethod
4- from typing import Any , Dict , Optional , TypeVar , Generic , Callable , Awaitable , Union
4+ from contextlib import asynccontextmanager , contextmanager
55from enum import Enum
66from threading import Lock , Event
7- from contextlib import asynccontextmanager , contextmanager
7+ from typing import Any , Dict , Optional , TypeVar , Generic , Callable , Awaitable , Union
88
99from loguru import logger
1010
@@ -50,7 +50,7 @@ class BaseContextManager(ABC, Generic[T]):
5050
5151 name : str
5252 _default_timeout : float = 30.0 # 默认超时时间
53- _default_retry_count : int = 3 # 默认重试次数
53+ _default_retry_count : int = 3 # 默认重试次数
5454
5555 def __init__ (self , name : str = None , timeout : float = None , retry_count : int = None ):
5656 self .name = name or getattr (self .__class__ , 'name' , self .__class__ .__name__ .lower ())
@@ -163,7 +163,8 @@ async def _perform_initialization_async(self) -> T:
163163 last_error = e
164164 if attempt < self .retry_count - 1 :
165165 wait_time = 2 ** attempt # 指数退避
166- logger .warning (f"Context '{ self .name } ' init attempt { attempt + 1 } failed: { e } , retrying in { wait_time } s" )
166+ logger .warning (
167+ f"Context '{ self .name } ' init attempt { attempt + 1 } failed: { e } , retrying in { wait_time } s" )
167168 await asyncio .sleep (wait_time )
168169 else :
169170 logger .error (f"Context '{ self .name } ' initialization failed after { self .retry_count } attempts: { e } " )
@@ -226,7 +227,8 @@ def _perform_initialization_sync(self) -> T:
226227 last_error = e
227228 if attempt < self .retry_count - 1 :
228229 wait_time = 2 ** attempt # 指数退避
229- logger .warning (f"Context '{ self .name } ' init attempt { attempt + 1 } failed: { e } , retrying in { wait_time } s" )
230+ logger .warning (
231+ f"Context '{ self .name } ' init attempt { attempt + 1 } failed: { e } , retrying in { wait_time } s" )
230232 time .sleep (wait_time )
231233 else :
232234 logger .error (f"Context '{ self .name } ' initialization failed after { self .retry_count } attempts: { e } " )
@@ -472,7 +474,8 @@ def register(self, context_manager: BaseContextManager) -> None:
472474 """
473475 with self ._lock :
474476 if context_manager .name in self ._contexts :
475- raise ValueError (f"Context '{ context_manager .name } ' already registered" )
477+ logger .warning (f"Context '{ context_manager .name } ' is already registered" )
478+ return
476479 self ._contexts [context_manager .name ] = context_manager
477480 logger .debug (f"Registered context: '{ context_manager .name } '" )
478481
@@ -628,4 +631,4 @@ def __iter__(self):
628631 return iter (self ._contexts .keys ())
629632
630633 def __repr__ (self ) -> str :
631- return f"<ContextRegistry(contexts={ list (self ._contexts .keys ())} )>"
634+ return f"<ContextRegistry(contexts={ list (self ._contexts .keys ())} )>"
0 commit comments