Ë
     ²‘i`  ã                   óP  — 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¬	«      Zed
ee   deedz  ef   fd„«       Zed
ededef   fd„«       Zd
ddeedz  df   fd„Zd
e
dedz  fd„Zd
edz  defd„Z	 	 	 	 dddded   dz  dedz  dededdfd„Zy)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                  ó   — y ©N© ©r   s    úL/var/www/telegram/venv/lib/python3.12/site-packages/telegram/_utils/files.pyÚ	load_filer   ,   s   € Ø;>ó    c                  ó   — y r   r   r   s    r   r   r   0   s   € Ø+.r   zFileInput | Nonec                 ó‚   — | €y	 | j                  «       }t        | «      }||fS # t        $ r dt        d| «      fcY S w xY w)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Úfilenames      r   r   r   4   sZ   € ð €{ØðAØ—8‘8“:ˆô ˜sÓ#€Hà�XÐÐøô ò AØ”TÐ:¸CÓ@Ð@Ò@ðAús   …$ ¤>½>c                 óŽ   — t        | d«      r9t        | j                  t        «      st	        | j                  «      j                  S y)zgIf the input is a file handle, read name and return it. Otherwise, return
    the input unchanged.
    ÚnameN)ÚhasattrÚ
isinstancer!   Úintr   r   s    r   r   r   G   s2   € ô ˆs�FÔ¤J¨s¯x©x¼Ô$=Ü�C—H‘H‹~×"Ñ"Ð"àr   c                 ó^   — | €yt        | «      }	 |j                  «       S # t        $ r Y yw xY w)zw
    Checks if a given string is a file on local system.

    Args:
        obj (:obj:`str`): The string to check.
    F)r   Úis_fileÚ	Exception)r   Úpaths     r   Úis_local_filer)   Q   s8   € ð €{Øä�‹9€DðØ�|‰|‹~ÐøÜò Ùðús   �   	,«,Ú
file_inputzFileInput | TelegramObjectÚtg_typer   r   ÚattachÚ
local_modezstr | InputFile | Anyc                 ó$  — ddl m} t        | t        «      r | j	                  d«      r|st        d«      ‚| S t        | t        t        z  «      r_t        | «      rRt        | «      }|r|j                  «       j                  «       S |j                  d¬«      5 } ||||¬«      cddd«       S | S t        | t        «      r || ||¬«      S t        | d	«      r |t        d
| «      ||¬«      S |rt        | |«      r| j                  S | S # 1 sw Y   | S xY w)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_handles           r   Úparse_file_inputr;   b   s  € õR #ä�*œcÔ" z×'<Ñ'<¸YÔ'GÙÜÐaÓbÐbØÐÜ�*œc¤D™jÔ)Ü˜Ô$Ü˜
Ó#ˆDÙØ—}‘}“×-Ñ-Ó/Ð/Ø—‘ �Ó%ð P¨Ù  °xÈÔO÷Pñ Pð ÐÜ�*œeÔ$Ù˜¨h¸vÔFÐFÜˆz˜6Ô"Ùœ˜d JÓ/¸(È6ÔRÐRÙ”:˜j¨'Ô2Ø×!Ñ!Ð!ØÐ÷Pð Ðús   ÂDÄD)NNFF)Ú__doc__Úpathlibr   Útypingr   r   r   r   r   Útelegram._utils.typesr	   r
   r   r1   r   r   r   r8   Útupler2   r   r   Úboolr)   Útyper;   r   r   r   ú<module>rC      s)  ðñ&
õ ß =Õ =ç :áÝç2áˆTÐ@ÔA€ð 
Ø >�2�e‘9Ð >  s¨T¡z°5Ð'8Ñ!9Ò >ó 
Ø >ð 
Ø .�2Ð .˜%  b ™/Ò .ó 
Ø .ðØ	ðà
ˆ3�‰:Ð>Ð>Ñ?óð&˜ð  s¨T¡zó ð�} tÑ+ð °ó ð& .2ØØØñ>Ø,ð>àÐ"Ñ# dÑ*ð>ð �D‰jð>ð ð	>ð
 ð>ð ô>r   