
    Qit                         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	m
Z
 ddl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 e
 edddd       G d d                    Zy)z[This module contains a class that describes a single parameter of a request to the Bot API.    N)Sequence)	dataclass)Optionalfinal)	InputFile)
InputMediaInputPaidMedia)InputSticker)TelegramObject)to_timestamp)
StringEnum)UploadFileDictTF)repreqorderfrozenc                       e Zd ZU dZdZeed<   eed<   ee	e
      ed<   edee   fd       Zedee   fd       Zededeee	e
   f   fd	       Zed
ededd fd       Zy)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   r   returnc                     t        | j                  t              r| j                  S | j                  yt        j                  | j                        S )zThe 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)selfs    M/app/.venv/lib/python3.12/site-packages/telegram/request/_requestparameter.py
json_valuezRequestParameter.json_valueC   s<     djj#&::::zz$**%%    c                     | j                   sy| j                   D ci c]'  }|j                  xs | j                  |j                  ) c}S c c}w )zA dict with the file data to upload, if any.

        .. versionchanged:: 21.5
            Content may now be a file handle.
        N)r   attach_namer   field_tuple)r   
input_files     r   multipart_datazRequestParameter.multipart_dataO   sW      #..
.
 ##0tyy:3I3II.
 	
 
s   ,Ac                    t        | t        j                        rt        |       g fS t        | t              r| j
                  g fS t        | t              r | j                  r| j                  | gfS d| gfS t        | t        t        f      rt        | j                  t              r| j                         }| j                  j                  r| j                  j                  |d<   n|j                  dd       |j                  dd      }t        |t              r>|j                  r|j                  |d<   n|j                  dd       || j                  |gfS || j                  gfS t        | t              rRt        | j                  t              r8| j                         }| j                  j                  |d<   || j                  gfS t        | t               r| j                         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sticker)r   dtmdatetimer   r   r   r   
attach_urir   r	   r(   to_dictpopgetr
   r*   r   )r   datar)   s      r   !_value_and_input_files_from_inputz2RequestParameter._value_and_input_files_from_input]   s   . eS\\*&**eZ(;;?"eY'''%00%= ej.9:z%++W`?a ==?D{{%% % 6 6W$'d3I)Y/''(1(<(<D%HH[$/ekk9555%++&&e\*z%--/S ==?D#mm66DO%--((e^,==?B&&byr!   keyc                 X   t        |t        t        f      sjt        |t              rZg }g }|D ]:  }| j	                  |      \  }}||j                  |       |j                  |       < t        |||r|      S d      S | j	                  |      \  }}t        |||r|      S d      S )zBuilds 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   r2   appendextendr   )clsr3   r   param_valuesr   objparam_valuer%   s           r   
from_inputzRequestParameter.from_input   s    
 %#u.:eX3NLK*-*O*OPS*T'Z* ''4"":.	 
 $+ Z^  $'#H#H#O [KK[
 	
UY
 	
r!   N)__name__
__module____qualname____doc__	__slots__r   __annotations__objectr   listr   propertyr    r   r&   staticmethodtupler2   classmethodr<    r!   r   r   r   #   s    . 1I
IM$y/**	&HSM 	& 	& 
 8 
 
 ;;	vtI&	'; ;z 
S 
 
4F 
 
r!   r   )r@   r,   r+   r   collections.abcr   dataclassesr   typingr   r   telegram._files.inputfiler   telegram._files.inputmediar   r	   telegram._files.inputstickerr
   telegram._telegramobjectr   telegram._utils.datetimer   telegram._utils.enumr   telegram._utils.typesr   r   rI   r!   r   <module>rT      s^   & b   $ ! " / A 5 3 1 + 0 
eD9J
 J
 : J
r!   