Skip to content

Commit 85d7fa5

Browse files
committed
Fixes on client session
1 parent a4c1125 commit 85d7fa5

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = telegrambots
3-
version = 0.0.11-preview
3+
version = 0.0.12-preview
44
author = immmdreza
55
author_email = ir310022@gmail.com
66
description = A pure and modern python package for telegram bots.

src/telegrambots/wrapper/client.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010

1111

1212
class 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

Comments
 (0)