File size: 729 Bytes
246d201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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