
    YPi                        d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZ erddlmZmZ  ede	edeedf   	      Zed
ee   deee   ef   fd       Zed
ededef   fd       Zd
ee   deee   e	edeedf   f   fdZd
edee   fdZd
ee   defdZ	 	 	 	 dde	edf   deed      dee   dedede	edef   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AnyOptionalTypeVarUnioncastoverload)	FileInputFilePathInput)	InputFileTelegramObject_Tr   N)boundobjreturnc                      y N r   s    K/root/twitch_bot/venv/lib/python3.12/site-packages/telegram/_utils/files.py	load_filer   *   s    >A    c                      y r   r   r   s    r   r   r   .   s    +.r   c                     | 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"Union[bytes, InputFile, str, Path])readAttributeErrorr
   guess_file_name)r   contentsfilenames      r   r   r   2   sZ     {E88: s#HX  ET>DDDE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   E   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+   O   s8     {9D||~ s     	,,
file_inputr   tg_typer!   attach
local_modec                 "   ddl m} t        | t              r | j	                  d      r|st        d      | S t        | t        t        f      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=   `   s   R #*c"z'<'<Y'Gabb*sDk*$
#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   r	   r
   r   telegram._utils.typesr   r   r3   r   r   r:   r4   r   tupler   r   boolr+   typer=   r   r   r   <module>rE      sc  &
  S S S :2Tuk3dBCD 
 A2e9 Ax}e';!< A 
 A 
 .2 .%b/ . 
 .	)	
8C=%{Ct CDDE& x} x. 4 & 15">i!112>d+,-> sm> 	>
 > 3S !>r   