
    YPi#                         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 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 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)InputStoryContent)	InputFile)
InputMediaInputPaidMedia)InputProfilePhotoInputProfilePhotoStatic)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    X/root/twitch_bot/venv/lib/python3.12/site-packages/telegram/request/_requestparameter.py
json_valuezRequestParameter.json_valueF   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_dataR   sR      #..
 ##0tyy:3I3II
 	
 
s   ,Ac                 <   t        | t        j                        rt        |       g fS t        | t        j                        r1| j                         }|j                         rt        |      g fS |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$              rft        | t&              rdnd}t        t)        | |      x}t              s| j                         g fS | j                         }|j                  ||<   ||gfS t        | t*              r^| j,                  }t        t)        | |      x}t              s| j                         g fS | j                         }|j                  ||<   ||gfS t        | t.              rRt        | j0                  t              r8| j                         }| j0                  j                  |d<   || j0                  gfS t        | t2              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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+   s         r"   !_value_and_input_files_from_inputz2RequestParameter._value_and_input_files_from_input`   s   . eS\\*&**eS]]+))+G!!#7|R'' B;eZ(;;?"eY'''%00%= ej.9:z%++W`?a ==?D{{%% % 6 6W$'d3I)Y/''(1(<(<D%HH[$/ekk9555%++&&e./(0GH7kDwud';;eYG}}** ==?D))DJ%= e./::Dwud';;eYG}}** ==?D))DJ%= 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   r?   appendextendr   )clsr@   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tupler?   classmethodrI    r$   r"   r   r   &   s    . 1I
IM$y/**	&HSM 	& 	& 
 8 
 
 \\	vtI&	'\ \| 
S 
 
4F 
 
r$   r   ) rM   r1   r0   r   collections.abcr   dataclassesr   typingr   r   "telegram._files._inputstorycontentr   telegram._files.inputfiler   telegram._files.inputmediar	   r
   !telegram._files.inputprofilephotor   r   telegram._files.inputstickerr   telegram._telegramobjectr   telegram._utils.datetimer   telegram._utils.enumr   telegram._utils.typesr   r   rV   r$   r"   <module>rc      sd   & b   $ ! " @ / A X 5 3 1 + 0 
eD9k
 k
 : k
r$   