o
    GChw                     @   s   d 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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)Sequence)	dataclass)datetime)Optional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_valueC   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>X   s    z3RequestParameter.multipart_data.<locals>.<dictcomp>)r   r   r   r   r   multipart_dataO   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   r/   appendextendr   )clsr0   r   param_valuesr   objparam_valuer$   r   r   r   
from_input   s&   


zRequestParameter.from_inputN)__name__
__module____qualname____doc__	__slots__r   __annotations__objectr   listr   propertyr    r   r&   staticmethodtupler/   classmethodr8   r   r   r   r   r   #   s$   
 =r   )r<   r   collections.abcr   dataclassesr   r   typingr   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    