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 .. automodule:: telethon.types
Errors
------
.. autoclass:: telethon.RpcError .. 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 import tl as _tl
from ._impl.client import Client, Config from ._impl.client import Client, Config
from ._impl.errors import errors
from ._impl.mtproto import RpcError from ._impl.mtproto import RpcError
from ._impl.session import Session from ._impl.session import Session
from .version import __version__ 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. 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. The library will never construct instances of this error by itself.
This is the parent class of all :data:`telethon.errors` subtypes.
.. seealso:: .. seealso::
:doc:`/concepts/errors` :doc:`/concepts/errors`