Spaces:
Build error
Build error
from dataclasses import dataclass, field | |
from typing import MutableMapping | |
import httpx | |
from openhands.core.logger import openhands_logger as logger | |
CLIENT = httpx.Client() | |
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 | |
""" | |
_is_closed: bool = False | |
headers: MutableMapping[str, str] = field(default_factory=dict) | |
def request(self, *args, **kwargs): | |
if self._is_closed: | |
logger.error( | |
'Session is being used after close!', stack_info=True, exc_info=True | |
) | |
self._is_closed = False | |
headers = kwargs.get('headers') or {} | |
headers = {**self.headers, **headers} | |
kwargs['headers'] = headers | |
return CLIENT.request(*args, **kwargs) | |
def stream(self, *args, **kwargs): | |
if self._is_closed: | |
logger.error( | |
'Session is being used after close!', stack_info=True, exc_info=True | |
) | |
self._is_closed = False | |
headers = kwargs.get('headers') or {} | |
headers = {**self.headers, **headers} | |
kwargs['headers'] = headers | |
return CLIENT.stream(*args, **kwargs) | |
def get(self, *args, **kwargs): | |
return self.request('GET', *args, **kwargs) | |
def post(self, *args, **kwargs): | |
return self.request('POST', *args, **kwargs) | |
def patch(self, *args, **kwargs): | |
return self.request('PATCH', *args, **kwargs) | |
def put(self, *args, **kwargs): | |
return self.request('PUT', *args, **kwargs) | |
def delete(self, *args, **kwargs): | |
return self.request('DELETE', *args, **kwargs) | |
def options(self, *args, **kwargs): | |
return self.request('OPTIONS', *args, **kwargs) | |
def close(self) -> None: | |
self._is_closed = True | |