o
    Zzj`  ã                   @   s2  d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZ er.ddlmZ ddlmZmZ eddd	�Zed
ee deedB ef fdd„ƒZed
ededef fdd„ƒZd
ddeedB df fdd„Zd
e
dedB fdd„Zd
edB defdd„Z				d!ddded dB dedB dededdfdd „ZdS )"a¾  This module contains helper functions related to handling of files.

.. versionchanged:: 20.0
   Previously, the contents of this module were available through the (no longer existing)
   module ``telegram._utils.helpers``.

Warning:
    Contents of this module are intended to be used internally by the library and *not* by the
    user. Changes to this module are not considered breaking changes and may not be documented in
    the changelog.
é    )ÚPath)ÚIOÚTYPE_CHECKINGÚTypeVarÚcastÚoverload)Ú	FileInputÚFilePathInput)ÚAny)Ú	InputFileÚTelegramObjectÚ_Tz%bytes | InputFile | str | Path | None)ÚboundÚobjÚreturnNc                 C   ó   d S ©N© ©r   r   r   úP/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/_utils/files.pyÚ	load_file,   ó   r   c                 C   r   r   r   r   r   r   r   r   0   r   zFileInput | Nonec                 C   sJ   | du rdS z|   ¡ }W n ty   dtd| ƒf Y S w t| ƒ}||fS )ztIf the input is a file handle, read the data and name and return it. Otherwise, return
    the input unchanged.
    N)NNzbytes | InputFile | str | Path)ÚreadÚAttributeErrorr   Úguess_file_name)r   ÚcontentsÚfilenamer   r   r   r   4   s   ÿc                 C   s&   t | dƒrt| jtƒst| jƒjS dS )zgIf the input is a file handle, read name and return it. Otherwise, return
    the input unchanged.
    ÚnameN)ÚhasattrÚ
isinstancer   Úintr   r   r   r   r   r   G   s   r   c                 C   s4   | du rdS t | ƒ}z| ¡ W S  ty   Y dS w )zw
    Checks if a given string is a file on local system.

    Args:
        obj (:obj:`str`): The string to check.
    NF)r   Úis_fileÚ	Exception)r   Úpathr   r   r   Úis_local_fileQ   s   
ÿr$   FÚ
file_inputzFileInput | TelegramObjectÚtg_typer   r   ÚattachÚ
local_modezstr | InputFile | Anyc                 C   sê   ddl m} t| tƒr|  d¡r|stdƒ‚| S t| ttB ƒrNt| ƒrLt| ƒ}|r/| ¡  	¡ S |j
dd��}||||d�W  d  ƒ S 1 sGw   Y  | S t| tƒrZ|| ||d�S t| d	ƒri|td
| ƒ||d�S |rst| |ƒrs| jS | S )aÙ  
    Parses input for sending files:

    * For string input, if the input is an absolute path of a local file:

        * if ``local_mode`` is ``True``, adds the ``file://`` prefix. If the input is a relative
        path of a local file, computes the absolute path and adds the ``file://`` prefix.
        * if ``local_mode`` is ``False``, loads the file as binary data and builds an
          :class:`InputFile` from that

      Returns the input unchanged, otherwise.
    * :class:`pathlib.Path` objects are treated the same way as strings.
    * For IO and bytes input, returns an :class:`telegram.InputFile`.
    * If :attr:`tg_type` is specified and the input is of that type, returns the ``file_id``
      attribute.

    Args:
        file_input (:obj:`str` | :obj:`bytes` | :term:`file object` | :class:`~telegram.InputFile`            | Telegram media object): The input to parse.
        tg_type (:obj:`type`, optional): The Telegram media type the input can be. E.g.
            :class:`telegram.Animation`.
        filename (:obj:`str`, optional): The filename. Only relevant in case an
            :class:`telegram.InputFile` is returned.
        attach (:obj:`bool`, optional): Pass :obj:`True` if the parameter this file belongs to in
            the request to Telegram should point to the multipart data via an ``attach://`` URI.
            Defaults to `False`. Only relevant if an :class:`telegram.InputFile` is returned.
        local_mode (:obj:`bool`, optional): Pass :obj:`True` if the bot is running an api server
            in ``--local`` mode.

    Returns:
        :obj:`str` | :class:`telegram.InputFile` | :obj:`object`: The parsed input or the untouched
        :attr:`file_input`, in case it's no valid file input.
    r   )r   zfile://zBSpecified file input is a file URI, but local mode is not enabled.Úrb)Úmode)r   r'   Nr   r   )Útelegramr   r   ÚstrÚ
startswithÚ
ValueErrorr   r$   ÚabsoluteÚas_uriÚopenÚbytesr   r   Úfile_id)r%   r&   r   r'   r(   r   r#   Úfile_handler   r   r   Úparse_file_inputb   s*   ) ÿ

r5   )NNFF)Ú__doc__Úpathlibr   Útypingr   r   r   r   r   Útelegram._utils.typesr   r	   r
   r+   r   r   r   r2   Útupler,   r   r   Úboolr$   Útyper5   r   r   r   r   Ú<module>   sH   $ÿ
þ
ûÿ
þýüûú