
    '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    _/home/obispo/Crisostomo_bridge/mision_env/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88: 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     sFJsxx$=CHH~"""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     {9D||~ 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*cDj)$
#D}}--//% P xOP P *e$hvFFz6"dJ/(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 
 >2e9 >sTz5'8!9 > 
 > 
 .2 .%b/ . 
 .	
3:>>?& sTz }t+  & .2>,>"#d*> Dj> 	>
 > >r   