
    ՟fL                        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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TupleTypeTypeVarUnioncastoverload)	FileInputFilePathInput)	InputFileTelegramObject_Tr   N)boundobjreturnc                      y N r   s    P/var/www/cvtools/html/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        t        t        dt
        t        f   |       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)NNr   )readAttributeErrorr   r   bytesstrr   guess_file_name)r   contentsfilenames      r   r   r   2   sg     {E88: s#HX  ET%{C =>DDDEs   $ .AA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      rSt        |       rFt        |       }|r|j                         j                         S  ||j                  d      ||      S | S t        | t              r || ||      S t        | d      r |t        t        |       ||      S |rt        | |      r| 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%   r2   r   )telegramr   r)   r"   
startswith
ValueErrorr   r/   absoluteas_uriopenr!   r(   r   r   file_id)r0   r1   r%   r2   r3   r   r.   s          r   parse_file_inputr>   `   s    R #*c"z'<'<Y'Gabb*sDk*$
#D}}--//TYYDY1HVTT*e$hvFFz6"b*-PP:j'2!!!r   )NNFF)__doc__pathlibr   typingr   r   r   r   r   r	   r
   r   r   r   telegram._utils.typesr   r   r7   r   r   r!   r"   r   r   r#   boolr/   r>   r   r   r   <module>rD      sc  &
  ` ` ` :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   