@@ -171,6 +171,7 @@ def __init__(self, server_url: str) -> None:
171171
172172 self ._anisette_data : dict [str , str ] | None = None
173173 self ._anisette_data_expires_at : float = 0
174+ self ._closed = False
174175
175176 @override
176177 def serialize (self ) -> dict :
@@ -217,6 +218,10 @@ async def get_headers(
217218 with_client_info : bool = False ,
218219 ) -> dict [str , str ]:
219220 """See `BaseAnisetteProvider.get_headers`_."""
221+ if self ._closed :
222+ msg = "RemoteAnisetteProvider has been closed and cannot be used"
223+ raise RuntimeError (msg )
224+
220225 if self ._anisette_data is None or time .time () >= self ._anisette_data_expires_at :
221226 logger .info ("Fetching anisette data from %s" , self ._server_url )
222227
@@ -229,7 +234,15 @@ async def get_headers(
229234 @override
230235 async def close (self ) -> None :
231236 """See `AnisetteProvider.close`."""
232- await self ._http .close ()
237+ if self ._closed :
238+ return # Already closed, make it idempotent
239+
240+ self ._closed = True
241+
242+ try :
243+ await self ._http .close ()
244+ except (RuntimeError , OSError , ConnectionError ) as e :
245+ logger .warning ("Error closing anisette HTTP session: %s" , e )
233246
234247
235248class LocalAnisetteProvider (BaseAnisetteProvider ):
0 commit comments