1010
1111
1212class TelegramBotsClient :
13- def __init__ (self , token : str ):
13+ def __init__ (self , token : str , session : Optional [ aiohttp . ClientSession ] = None ):
1414 if not TelegramBotsClient ._validate_token (token ):
1515 raise ValueError ("Token invalid" )
1616
1717 self ._token = token
1818 self ._base_url = "https://api.telegram.org/bot{}/" .format (token )
19- self ._session : Optional [aiohttp .ClientSession ] = None
19+ self ._session : Optional [aiohttp .ClientSession ] = session
2020
2121 @overload
2222 async def __call__ (
@@ -38,14 +38,20 @@ async def __call__(
3838 return await self ._send (method ) # type: ignore
3939
4040 async def __aenter__ (self ):
41- self ._session = aiohttp .ClientSession ()
42- return self
41+ if self ._session is None :
42+ self ._session = aiohttp .ClientSession ()
43+ return self
4344
4445 async def __aexit__ (self , exc_type : Any , exc_val : Any , exc_tb : Any ):
4546 if self ._session :
4647 await self ._session .close ()
4748 self ._session = None
4849
50+ @property
51+ def session (self ) -> Optional [aiohttp .ClientSession ]:
52+ """Get the session"""
53+ return self ._session
54+
4955 @overload
5056 async def _send (
5157 self , method : TelegramBotsMethod [TelegramBotsApiResult [TResult ]]
@@ -77,31 +83,25 @@ async def _send(
7783 for file in files :
7884 data .add_field (file [0 ], file [2 ], filename = file [1 ])
7985
80- session = self ._session or aiohttp .ClientSession ()
86+ assert self ._session is not None
87+ assert not self ._session .closed
8188
8289 try :
83- resp = await session .post (self ._base_url + method .endpoint , data = data )
90+ resp = await self . _session .post (self ._base_url + method .endpoint , data = data )
8491 json_respone = await resp .json ()
8592
8693 if resp .ok :
8794 if isinstance (method , TelegramBotsMethodNoOutput ):
88- if self ._session is None :
89- await session .close ()
9095 return None
9196 else :
9297 object_response = method .get_request_result (json_respone , self )
9398 if object_response .ok :
94- if self ._session is None :
95- await session .close ()
96-
9799 return cast (TResult , object_response .result )
98100 raise ApiResponseException (- 1 , "Wired error" )
99101 else :
100102 object_response = TelegramBotsApiResult .deserialize (json_respone )
101- await session .close ()
102103 raise ApiResponseException .from_result (object_response ) # type: ignore
103104 except aiohttp .ClientError as e :
104- await session .close ()
105105 raise e
106106
107107 @staticmethod
0 commit comments