L iMpdZddlZddlmZmZmZddlmZddlm Z m Z ddl m Z ddl mZdZGd d Zy) zDThis module contains an object that represents a Telegram InputFile.N)IOOptionalUnion)uuid4)guess_file_name load_file) TextEncoding) FieldTuplezapplication/octet-streamc ~eZdZdZdZ d deeeeefde ede de fdZ e d e fd Ze d e efd Zy) InputFilea This object represents a Telegram InputFile. .. versionchanged:: 20.0 * The former attribute ``attach`` was renamed to :attr:`attach_name`. * Method ``is_image`` was removed. If you pass :obj:`bytes` to :paramref:`obj` and would like to have the mime type automatically guessed, please pass :paramref:`filename` in addition. Args: obj (:term:`file object` | :obj:`bytes` | :obj:`str`): An open file descriptor or the files content as bytes or string. Note: If :paramref:`obj` is a string, it will be encoded as bytes via :external:obj:`obj.encode('utf-8') `. .. versionchanged:: 20.0 Accept string input. filename (:obj:`str`, optional): Filename for this InputFile. 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`. read_file_handle (:obj:`bool`, optional): If :obj:`True` and :paramref:`obj` is a file handle, the data will be read from the file handle on initialization of this object. If :obj:`False`, the file handle will be passed on to the :attr:`networking backend ` which will have to handle the reading. Defaults to :obj:`True`. Tip: If you upload extremely large files, you may want to set this to :obj:`False` to avoid reading the complete file into memory. Additionally, this may be supported better by the networking backend (in particular it is handled better by the default :class:`~telegram.request.HTTPXRequest`). Important: If you set this to :obj:`False`, you have to ensure that the file handle is still open when the request is made. In particular, the following snippet can *not* work as expected. .. code-block:: python with open('file.txt', 'rb') as file: input_file = InputFile(file, read_file_handle=False) # here the file handle is already closed and the upload will fail await bot.send_document(chat_id, input_file) .. versionadded:: 21.5 Attributes: input_file_content (:obj:`bytes` | :class:`IO`): The binary content of the file to send. attach_name (:obj:`str`): Optional. If present, the parameter this file belongs to in the request to Telegram should point to the multipart data via a an URI of the form ``attach://`` URI. filename (:obj:`str`): Filename for the file to be sent. mimetype (:obj:`str`): The mimetype inferred from the file to be sent. ) attach_namefilenameinput_file_contentmimetypeNobjrattachread_file_handlect|tr||_ngt|tr%|j t j |_n2|rt|\}|_|xs|}n||_|xs t|}|rdtjznd|_ |r(tj|ddxst|_n t|_|xs|jj!dd|_y)NattachedF)strictr/.) isinstancebytesrstrencoder UTF_8rrrhexr mimetypes guess_type_DEFAULT_MIME_TYPErreplacer)selfrrrrreported_filenames _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/telegram/_files/inputfile.py__init__zInputFile.__init__`s c5 !?BD # S !&)jj1C1C&DD # 9B3 6 t64#4H&)D #7?3#7HFL*uw{{*BRV $$Xe)>sC)H returncH|j|j|jfS)aField tuple representing the contents of the file for upload to the Telegram servers. .. versionchanged:: 21.5 Content may now be a file handle. Returns: tuple[:obj:`str`, :obj:`bytes` | :class:`IO`, :obj:`str`]: )rrrr#s r% field_tuplezInputFile.field_tuple}s}}d55t}}DDr'c<|jrd|jSdS)zURI to insert into the JSON data for uploading the file. Returns :obj:`None`, if :attr:`attach_name` is :obj:`None`. z attach://N)r r*s r% attach_urizInputFile.attach_uris% 261A1A4++,-KtKr')NFT)__name__ __module__ __qualname____doc__ __slots__rrrrrboolr&propertyr r+r-r'r%r r s;zNI #'!% I 2e9eS( )I3-I I  I: EZ E ELHSMLLr'r )r1rtypingrrruuidrtelegram._utils.filesrrtelegram._utils.stringsr telegram._utils.typesr r!r r5r'r%r;s4&K&&<0,/nLnLr'