Shield self.disconnected and log RpcCallFail

This commit is contained in:
Lonami Exo 2018-06-18 14:27:40 +02:00
parent ee7a44d447
commit efc48ee3b0
2 changed files with 11 additions and 4 deletions

View File

@ -177,7 +177,11 @@ class UpdateMethods(UserMethods):
rnd = lambda: random.randrange(-2**63, 2**63)
while self.is_connected():
try:
await asyncio.wait_for(self.disconnected, timeout=60)
await asyncio.wait_for(
asyncio.shield(self.disconnected, loop=self._loop),
timeout=60,
loop=self._loop
)
continue # We actually just want to act upon timeout
except asyncio.TimeoutError:
pass

View File

@ -1,12 +1,13 @@
import asyncio
import itertools
import logging
import time
from .telegrambaseclient import TelegramBaseClient
from .. import errors, utils
from ..tl import TLObject, TLRequest, types, functions
__log__ = logging.getLogger(__name__)
_NOT_A_REQUEST = TypeError('You can only invoke requests, not types!')
@ -28,10 +29,12 @@ class UserMethods(TelegramBaseClient):
return results
else:
return await future
except (errors.ServerError, errors.RpcCallFailError):
pass
except (errors.ServerError, errors.RpcCallFailError) as e:
__log__.warning('Telegram is having internal issues %s: %s',
e.__class__.__name__, e)
except (errors.FloodWaitError, errors.FloodTestPhoneWaitError) as e:
if e.seconds <= self.session.flood_sleep_threshold:
__log__.info('Sleeping for %ds on flood wait', e.seconds)
await asyncio.sleep(e.seconds, loop=self._loop)
else:
raise