From 6253d28143a18d25257ab97921f2e8b50a23465c Mon Sep 17 00:00:00 2001 From: Jahongir Qurbonov <109198731+Jahongir-Qurbonov@users.noreply.github.com> Date: Wed, 21 Aug 2024 22:28:16 +0500 Subject: [PATCH] Fix type annotation for keyboard buttons (#4438) --- .../telethon/_impl/client/types/keyboard.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/client/src/telethon/_impl/client/types/keyboard.py b/client/src/telethon/_impl/client/types/keyboard.py index a9e51e15..016fdacb 100644 --- a/client/src/telethon/_impl/client/types/keyboard.py +++ b/client/src/telethon/_impl/client/types/keyboard.py @@ -1,11 +1,14 @@ -from typing import Optional, TypeAlias +from typing import Generic, Optional, TypeAlias, TypeVar from ...tl import abcs, types -from .buttons.button import Button +from .buttons import Button, InlineButton + +AnyButton = TypeVar("AnyButton", bound=Button) +AnyInlineButton = TypeVar("AnyInlineButton", bound=InlineButton) def _build_keyboard_rows( - btns: list[Button] | list[list[Button]], + btns: list[AnyButton] | list[list[AnyButton]], ) -> list[abcs.KeyboardButtonRow]: # list[button] -> list[list[button]] # This does allow for "invalid" inputs (mixing lists and non-lists), but that's acceptable. @@ -21,12 +24,12 @@ def _build_keyboard_rows( ] -class Keyboard: +class Keyboard(Generic[AnyButton]): __slots__ = ("_raw",) def __init__( self, - buttons: list[Button] | list[list[Button]], + buttons: list[AnyButton] | list[list[AnyButton]], resize: bool, single_use: bool, selective: bool, @@ -43,10 +46,12 @@ class Keyboard: ) -class InlineKeyboard: +class InlineKeyboard(Generic[AnyInlineButton]): __slots__ = ("_raw",) - def __init__(self, buttons: list[Button] | list[list[Button]]) -> None: + def __init__( + self, buttons: list[AnyInlineButton] | list[list[AnyInlineButton]] + ) -> None: self._raw = types.ReplyInlineMarkup(rows=_build_keyboard_rows(buttons))