U
    g                     @   sp   d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ er\ddlmZ G dd	 d	e	Zd
S )zOThis module contains an object that represents a Telegram InlineKeyboardMarkup.    )TYPE_CHECKINGOptionalSequenceTuple)InlineKeyboardButton)TelegramObject)check_keyboard_type)JSONDict)Botc                       s   e Zd ZdZdZddeee  ee d fddZ	e
dee ed ed  d	d
dZe
eed dddZe
ee ed dddZe
ee ed dddZ  ZS )InlineKeyboardMarkupa  
    This object represents an inline keyboard that appears right next to the message it belongs to.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their size of :attr:`inline_keyboard` and all the buttons are equal.

    .. figure:: https://core.telegram.org/file/464001863/110f3/I47qTXAD9Z4.120010/e0        ea04f66357b640ec
        :align: center

        An inline keyboard on a message

    .. seealso::
        Another kind of keyboard would be the :class:`telegram.ReplyKeyboardMarkup`.

    Examples:
        * :any:`Inline Keyboard 1 <examples.inlinekeyboard>`
        * :any:`Inline Keyboard 2 <examples.inlinekeyboard2>`

    Args:
        inline_keyboard (Sequence[Sequence[:class:`telegram.InlineKeyboardButton`]]): Sequence of
            button rows, each represented by a sequence of :class:`~telegram.InlineKeyboardButton`
            objects.

            .. versionchanged:: 20.0
                |sequenceclassargs|

    Attributes:
        inline_keyboard (Tuple[Tuple[:class:`telegram.InlineKeyboardButton`]]): Tuple of
            button rows, each represented by a tuple of :class:`~telegram.InlineKeyboardButton`
            objects.

            .. versionchanged:: 20.0
                |tupleclassattrs|

    )inline_keyboardN
api_kwargs)r   r   c                   sH   t  j|d t|stdtdd |D | _| jf| _|   d S )Nr   zZThe parameter `inline_keyboard` should be a sequence of sequences of InlineKeyboardButtonsc                 s   s   | ]}t |V  qd S )N)tuple).0row r   I/tmp/pip-unpacked-wheel-swnnwir2/telegram/_inline/inlinekeyboardmarkup.py	<genexpr>T   s    z0InlineKeyboardMarkup.__init__.<locals>.<genexpr>)super__init__r   
ValueErrorr   r   Z	_id_attrsZ_freeze)selfr   r   	__class__r   r   r   G   s    

zInlineKeyboardMarkup.__init__r
   )databotreturnc                 C   sT   |sdS g }|d D ]6}g }|D ]}t ||}|r || q || q| |S )z,See :meth:`telegram.TelegramObject.de_json`.Nr   )r   de_jsonappend)clsr   r   Zkeyboardr   tmpcolZbtnr   r   r   r   \   s    zInlineKeyboardMarkup.de_json)buttonkwargsr   c                 K   s   | |ggf|S )a  Shortcut for::

            InlineKeyboardMarkup([[button]], **kwargs)

        Return an InlineKeyboardMarkup from a single InlineKeyboardButton

        Args:
            button (:class:`telegram.InlineKeyboardButton`): The button to use in the markup

        r   )r    r#   r$   r   r   r   from_buttono   s    z InlineKeyboardMarkup.from_button)
button_rowr$   r   c                 K   s   | |gf|S )a|  Shortcut for::

            InlineKeyboardMarkup([button_row], **kwargs)

        Return an InlineKeyboardMarkup from a single row of InlineKeyboardButtons

        Args:
            button_row (Sequence[:class:`telegram.InlineKeyboardButton`]): The button to use
                in the markup

                .. versionchanged:: 20.0
                    |sequenceargs|

        r   )r    r&   r$   r   r   r   from_row}   s    zInlineKeyboardMarkup.from_row)button_columnr$   r   c                 K   s   dd |D }| |f|S )a  Shortcut for::

            InlineKeyboardMarkup([[button] for button in button_column], **kwargs)

        Return an InlineKeyboardMarkup from a single column of InlineKeyboardButtons

        Args:
            button_column (Sequence[:class:`telegram.InlineKeyboardButton`]): The button to use
                in the markup

                 .. versionchanged:: 20.0
                    |sequenceargs|

        c                 S   s   g | ]
}|gqS r   r   )r   r#   r   r   r   
<listcomp>   s     z4InlineKeyboardMarkup.from_column.<locals>.<listcomp>r   )r    r(   r$   Zbutton_gridr   r   r   from_column   s    z InlineKeyboardMarkup.from_column)N)__name__
__module____qualname____doc__	__slots__r   r   r   r	   r   classmethodr   objectr%   r'   r*   __classcell__r   r   r   r   r      s4   %
    r   N)r.   typingr   r   r   r   Z%telegram._inline.inlinekeyboardbuttonr   Ztelegram._telegramobjectr   Ztelegram._utils.markupr   Ztelegram._utils.typesr	   Ztelegramr
   r   r   r   r   r   <module>   s   