|
from dataclasses import dataclass, field
|
|
|
|
import requests
|
|
|
|
|
|
@dataclass
|
|
class HttpSession:
|
|
"""
|
|
request.Session is reusable after it has been closed. This behavior makes it
|
|
likely to leak file descriptors (Especially when combined with tenacity).
|
|
We wrap the session to make it unusable after being closed
|
|
"""
|
|
|
|
session: requests.Session | None = field(default_factory=requests.Session)
|
|
|
|
def __getattr__(self, name):
|
|
if self.session is None:
|
|
raise ValueError('session_was_closed')
|
|
return object.__getattribute__(self.session, name)
|
|
|
|
def close(self):
|
|
if self.session is not None:
|
|
self.session.close()
|
|
self.session = None
|
|
|