Add errors factory skeleton

This commit is contained in:
Lonami Exo 2023-09-16 19:12:41 +02:00
parent 0e586abefe
commit 22f15303a5
4 changed files with 75 additions and 1 deletions

View File

@ -3,4 +3,67 @@ Types
.. automodule:: telethon.types
Errors
------
.. autoclass:: telethon.RpcError
.. currentmodule:: telethon
.. data:: errors
Factory-object returning subclasses of :class:`RpcError`.
You can think of it as a module with an infinite amount of error types in it.
When accessing any attribute in this object, a subclass of :class:`RpcError` will be returned.
The returned type will catch :class:`RpcError` if the :attr:`RpcError.name` matches the attribute converted to ``SCREAMING_CASE``.
For example:
.. code-block:: python
from telethon import errors
try:
await client.send_message(chat, text)
except errors.FloodWait as e:
await asyncio.sleep(e.value)
The code above is equivalent to the following:
.. code-block:: python
from telethon import RpcError
try:
await client.send_message(chat, text)
except RpcError as e:
if e.name == 'FLOOD_WAIT':
await asyncio.sleep(e.value)
else:
raise
This factory object is merely a convenience.
There is one exception, and that is when the attribute name starts with ``'Code'`` and ends with a number:
.. code-block:: python
try:
await client.send_message(chat, text)
except errors.Code420:
await asyncio.sleep(e.value)
The above snippet is equivalent to checking :attr:`RpcError.code` instead:
.. code-block:: python
try:
await client.send_message(chat, text)
except RpcError as e:
if e.code == 420:
await asyncio.sleep(e.value)
else:
raise

View File

@ -1,7 +1,8 @@
from ._impl import tl as _tl
from ._impl.client import Client, Config
from ._impl.errors import errors
from ._impl.mtproto import RpcError
from ._impl.session import Session
from .version import __version__
__all__ = ["_tl", "Client", "Config", "RpcError", "Session"]
__all__ = ["_tl", "Client", "Config", "errors", "RpcError", "Session"]

View File

@ -0,0 +1,8 @@
class ErrorFactory:
__slots__ = ()
def __getattribute__(self, name: str) -> ValueError:
raise NotImplementedError
errors = ErrorFactory()

View File

@ -15,6 +15,8 @@ class RpcError(ValueError):
Only occurs when the answer to a request sent to Telegram is not the expected result.
The library will never construct instances of this error by itself.
This is the parent class of all :data:`telethon.errors` subtypes.
.. seealso::
:doc:`/concepts/errors`