
    ՟fi                         d Z ddlZddlmZ ddlmZ ddlmZmZmZ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)	dataclass)datetime)ListOptionalSequenceTuple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    ]/var/www/cvtools/html/venv/lib/python3.12/site-packages/telegram/request/_requestparameter.py
json_valuezRequestParameter.json_valueB   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_dataN   sR      #..
 ##0tyy:3I3II
 	
 
s   ,Ac                    t        | t              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   r   r   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   . eX&&**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   r3   appendextendr   )clsr4   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   r   r
   propertyr#   r   r)   staticmethodr   r3   classmethodr=    r$   r"   r   r   "   s    . 1I
IM$y/**	&HSM 	& 	& 
 8 
 
 ;;	vtI&	'; ;z 
S 
 
4F 
 
r$   r   )rA   r   dataclassesr   r   typingr   r   r   r   r	   telegram._files.inputfiler
   telegram._files.inputmediar   r   telegram._files.inputstickerr   telegram._telegramobjectr   telegram._utils.datetimer   telegram._utils.enumr   telegram._utils.typesr   r   rH   r$   r"   <module>rR      s^   & b  !  9 9 / A 5 3 1 + 0 
eD9J
 J
 : J
r$   