o
    /hi                     @   s   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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)	dataclass)datetime)ListOptionalSequenceTuplefinal)	InputFile)
InputMediaInputPaidMedia)InputSticker)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	e
  ed< edee fddZedee 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   r   returnc                 C   s,   t | jtr	| jS | jdu rdS t| 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self r    [/var/www/html/govbot/env/lib/python3.10/site-packages/telegram/request/_requestparameter.py
json_valueB   s
   
zRequestParameter.json_valuec                    s    j sdS  fdd j D S )zA 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>W   s    z3RequestParameter.multipart_data.<locals>.<dictcomp>)r   r   r    r   r!   multipart_dataN   s
   
zRequestParameter.multipart_datac                 C   s6  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rqt | j	trq| 
 }| j	jrD| j	j|d< n|dd |dd}t |trk|jr^|j|d< n|dd || j	|gfS || j	gfS t | trt | 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sticker)r   r   r   r   r   r	   
attach_urir
   r   r)   to_dictpopgetr   r+   r   )r   datar*   r    r    r!   !_value_and_input_files_from_input\   s6   






z2RequestParameter._value_and_input_files_from_inputkeyc                 C   s   t |ttfs7t |tr7g }g }|D ]}| |\}}|dur$|| || qt|||r3|dS ddS | |\}}t|||rG|dS d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   r1   appendextendr   )clsr2   r   param_valuesr   objparam_valuer&   r    r    r!   
from_input   s&   


zRequestParameter.from_inputN)__name__
__module____qualname____doc__	__slots__r   __annotations__objectr   r   r	   propertyr"   r   r(   staticmethodr   r1   classmethodr:   r    r    r    r!   r   "   s$   
 =r   )r>   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   r    r    r    r!   <module>   s   