o
    Zzj#  ã                   @   sÒ   d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ e	eddddd�G dd„ dƒƒƒZdS )z[This module contains a class that describes a single parameter of a request to the Bot API.é    N)ÚSequence)Ú	dataclass)Úfinal)Ú	InputFile)Ú
InputMediaÚInputPaidMedia)ÚInputProfilePhotoÚInputProfilePhotoStatic)ÚInputSticker)ÚInputStoryContent)ÚTelegramObject)Úto_timestamp)Ú
StringEnum)ÚUploadFileDictTF)ÚreprÚeqÚorderÚfrozenc                   @   sž   e Zd ZU dZdZeed< eed< ee	 dB ed< e
dedB fdd	„ƒZe
dedB fd
d„ƒZededeeee	 f fdd„ƒZedededd fdd„ƒZdS )ÚRequestParameteraÀ  Instances of this class represent a single parameter to be sent along with a request to
    the Bot API.

    .. versionadded:: 20.0

    Warning:
        This class intended is to be used internally by the library and *not* by the user. Changes
        to this class are not considered breaking changes and may not be documented in the
        changelog.

    Args:
        name (:obj:`str`): The name of the parameter.
        value (:obj:`object` | :obj:`None`): The value of the parameter. Must be JSON-dumpable.
        input_files (list[:class:`telegram.InputFile`], optional): A list of files that should be
            uploaded along with this parameter.

    Attributes:
        name (:obj:`str`): The name of the parameter.
        value (:obj:`object` | :obj:`None`): The value of the parameter.
        input_files (list[:class:`telegram.InputFile` | :obj:`None`): A list of files that should
            be uploaded along with this parameter.
    )Úinput_filesÚnameÚvaluer   r   Nr   Úreturnc                 C   s,   t | jtƒr	| jS | jdu rdS t | j¡S )zêThe JSON dumped :attr:`value` or :obj:`None` if :attr:`value` is :obj:`None`.
        The latter can currently only happen if :attr:`input_files` has exactly one element that
        must not be uploaded via an attach:// URI.
        N)Ú
isinstancer   ÚstrÚjsonÚdumps©Úself© r   ú]/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/request/_requestparameter.pyÚ
json_valueF   s
   
zRequestParameter.json_valuec                    s   ˆ j sdS ‡ fdd„ˆ j D ƒS )z…A dict with the file data to upload, if any.

        .. versionchanged:: 21.5
            Content may now be a file handle.
        Nc                    s   i | ]
}|j p	ˆ j|j“qS r   )Úattach_namer   Úfield_tuple)Ú.0Ú
input_filer   r   r    Ú
<dictcomp>[   s    ÿÿz3RequestParameter.multipart_data.<locals>.<dictcomp>)r   r   r   r   r    Úmultipart_dataR   s
   
þzRequestParameter.multipart_datac                 C   s  t | tjƒrt| ƒg fS t | tjƒr$|  ¡ }| ¡ r t|ƒg fS |g fS t | tƒr.| j	g fS t | t
ƒrA| jr<| j| gfS d| gfS t | ttB ƒrŠt | jt
ƒrŠ|  ¡ }| jjr]| jj|d< n| dd¡ | dd¡}t |t
ƒr„|jrw|j|d< n| dd¡ || j|gfS || jgfS t | tƒr¶t | tƒr–dnd}t t| |ƒ }t
ƒs¨|  ¡ g fS |  ¡ }|j||< ||gfS t | tƒrÜ| j}t t| |ƒ }t
ƒsÎ|  ¡ g fS |  ¡ }|j||< ||gfS t | tƒr÷t | jt
ƒr÷|  ¡ }| jj|d< || jgfS t | tƒ�r|  ¡ g fS | g fS )aX  Converts `value` into something that we can json-dump. Returns two values:
        1. the JSON-dumpable value. May be `None` in case the value is an InputFile which must
           not be uploaded via an attach:// URI
        2. A list of InputFiles that should be uploaded for this value

        Note that we handle files differently depending on whether attaching them via an URI of the
        form attach://<name> is documented to be allowed or not.
        There was some confusion whether this worked for all files, so that we stick to the
        documented ways for now.
        See https://github.com/tdlib/telegram-bot-api/issues/167 and
        https://github.com/tdlib/telegram-bot-api/issues/259

        This method only does some special casing for our own helper class StringEnum, but not
        for general enums. This is because:
        * tg.constants currently only uses IntEnum as second enum type and json dumping that
          is no problem
        * if a user passes a custom enum, it's unlikely that we can actually properly handle it
          even with some special casing.
        NÚmediaÚ	thumbnailÚphotoÚ	animationÚsticker)r   ÚdtmÚdatetimer   Ú	timedeltaÚtotal_secondsÚ
is_integerÚintr   r   r   Ú
attach_urir   r   r(   Úto_dictÚpopÚgetr   r	   Úgetattrr   Útyper
   r,   r   )r   ÚsecondsÚdatar)   Úattrr(   r   r   r    Ú!_value_and_input_files_from_input`   s\   










z2RequestParameter._value_and_input_files_from_inputÚkeyc                 C   s†   t |ttB ƒs3t |tƒr3g }g }|D ]}|  |¡\}}|dur$| |¡ | |¡ qt|||p0dd�S |  |¡\}}t|||p@dd�S )z¢Builds an instance of this class for a given key-value pair that represents the raw
        input as passed along from a method of :class:`telegram.Bot`.
        N)r   r   r   )r   r   Úbytesr   r<   ÚappendÚextendr   )Úclsr=   r   Úparam_valuesr   ÚobjÚparam_valuer%   r   r   r    Ú
from_input¿   s   
zRequestParameter.from_input)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   Ú__annotations__ÚobjectÚlistr   Úpropertyr!   r   r'   ÚstaticmethodÚtupler<   ÚclassmethodrE   r   r   r   r    r   &   s$   
 ÿþ^r   )rI   r.   r-   r   Úcollections.abcr   Údataclassesr   Útypingr   Útelegram._files.inputfiler   Útelegram._files.inputmediar   r   Ú!telegram._files.inputprofilephotor   r	   Útelegram._files.inputstickerr
   Ú!telegram._files.inputstorycontentr   Útelegram._telegramobjectr   Útelegram._utils.datetimer   Útelegram._utils.enumr   Útelegram._utils.typesr   r   r   r   r   r    Ú<module>   s$   