Skip to content

Commit 69d1432

Browse files
committed
Allow user-defined values for retries and timeout
1 parent 50ab50e commit 69d1432

3 files changed

Lines changed: 15 additions & 8 deletions

File tree

pyrogram/client/client.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ def updates_worker(self):
817817

818818
log.debug("{} stopped".format(name))
819819

820-
def send(self, data: Object):
820+
def send(self, data: Object, retries: int = Session.MAX_RETRIES, timeout: float = Session.WAIT_TIMEOUT):
821821
"""Use this method to send Raw Function queries.
822822
823823
This method makes possible to manually call every single Telegram API method in a low-level manner.
@@ -828,13 +828,19 @@ def send(self, data: Object):
828828
data (``Object``):
829829
The API Scheme function filled with proper arguments.
830830
831+
retries (``int``):
832+
Number of retries.
833+
834+
timeout (``float``):
835+
Timeout in seconds.
836+
831837
Raises:
832838
:class:`Error <pyrogram.Error>`
833839
"""
834840
if not self.is_started:
835841
raise ConnectionError("Client has not been started")
836842

837-
r = self.session.send(data)
843+
r = self.session.send(data, retries, timeout)
838844

839845
self.fetch_peers(getattr(r, "users", []))
840846
self.fetch_peers(getattr(r, "chats", []))

pyrogram/client/ext/base_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from ..style import Markdown, HTML
2424
from ...api.core import Object
2525
from ...session.internals import MsgId
26+
from ...session import Session
2627

2728

2829
class BaseClient:
@@ -77,7 +78,7 @@ def __init__(self):
7778

7879
self.disconnect_handler = None
7980

80-
def send(self, data: Object):
81+
def send(self, data: Object, retries: int = Session.MAX_RETRIES, timeout: float = Session.WAIT_TIMEOUT):
8182
pass
8283

8384
def resolve_peer(self, peer_id: int or str):

pyrogram/session/session.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ def recv(self):
391391

392392
log.debug("RecvThread stopped")
393393

394-
def _send(self, data: Object, wait_response: bool = True):
394+
def _send(self, data: Object, wait_response: bool = True, timeout: float = WAIT_TIMEOUT):
395395
message = self.msg_factory(data)
396396
msg_id = message.msg_id
397397

@@ -407,7 +407,7 @@ def _send(self, data: Object, wait_response: bool = True):
407407
raise e
408408

409409
if wait_response:
410-
self.results[msg_id].event.wait(self.WAIT_TIMEOUT)
410+
self.results[msg_id].event.wait(timeout)
411411
result = self.results.pop(msg_id).value
412412

413413
if result is None:
@@ -422,11 +422,11 @@ def _send(self, data: Object, wait_response: bool = True):
422422
else:
423423
return result
424424

425-
def send(self, data: Object, retries: int = MAX_RETRIES):
425+
def send(self, data: Object, retries: int = MAX_RETRIES, timeout: float = WAIT_TIMEOUT):
426426
self.is_connected.wait(self.WAIT_TIMEOUT)
427427

428428
try:
429-
return self._send(data)
429+
return self._send(data, timeout=timeout)
430430
except (OSError, TimeoutError, InternalServerError) as e:
431431
if retries == 0:
432432
raise e from None
@@ -437,4 +437,4 @@ def send(self, data: Object, retries: int = MAX_RETRIES):
437437
datetime.now(), type(data)))
438438

439439
time.sleep(0.5)
440-
return self.send(data, retries - 1)
440+
return self.send(data, retries - 1, timeout)

0 commit comments

Comments
 (0)