diff --git a/stellar_sdk/client/aiohttp_client.py b/stellar_sdk/client/aiohttp_client.py index 0e71addb..6a53d3f5 100644 --- a/stellar_sdk/client/aiohttp_client.py +++ b/stellar_sdk/client/aiohttp_client.py @@ -96,11 +96,7 @@ def __init__( self.backoff_factor: Optional[float] = backoff_factor self.request_timeout: float = request_timeout self.post_timeout: float = post_timeout - # init session - if pool_size is None: - connector = aiohttp.TCPConnector() - else: - connector = aiohttp.TCPConnector(limit=pool_size) + self.__kwargs = kwargs self.user_agent: Optional[str] = USER_AGENT if user_agent: @@ -114,14 +110,7 @@ def __init__( if custom_headers: self.headers = {**self.headers, **custom_headers} - session = aiohttp.ClientSession( - headers=self.headers.copy(), - connector=connector, - timeout=aiohttp.ClientTimeout(total=request_timeout), - **kwargs, - ) - - self._session: aiohttp.ClientSession = session + self._session: Optional[aiohttp.ClientSession] = None self._sse_session: Optional[aiohttp.ClientSession] = None async def get(self, url: str, params: Dict[str, str] = None) -> Response: @@ -132,6 +121,8 @@ async def get(self, url: str, params: Dict[str, str] = None) -> Response: :return: the response from server :raise: :exc:`ConnectionError ` """ + await self.__init_session() + assert self._session is not None try: response = await self._session.get(url, params=params) return Response( @@ -154,6 +145,8 @@ async def post( :return: the response from server :raise: :exc:`ConnectionError ` """ + await self.__init_session() + assert self._session is not None try: response = await self._session.post( url, @@ -235,6 +228,21 @@ async def stream( ) await asyncio.sleep(retry) + async def __init_session(self): + # init session + if self._session is None: + if self.pool_size is None: + connector = aiohttp.TCPConnector() + else: + connector = aiohttp.TCPConnector(limit=self.pool_size) + + self._session = aiohttp.ClientSession( + headers=self.headers.copy(), + connector=connector, + timeout=aiohttp.ClientTimeout(total=self.request_timeout), + **self.__kwargs, + ) + async def __aenter__(self) -> "AiohttpClient": return self @@ -246,7 +254,8 @@ async def close(self) -> None: Release all acquired resources. """ - await self._session.__aexit__(None, None, None) + if self._session is not None: + await self._session.__aexit__(None, None, None) if self._sse_session is not None: await self._sse_session.__aexit__(None, None, None)