Sindbad~EG File Manager
�
&ٜg� � �T � d dl mZ d dlZd dlmZ d dlmZmZmZ G d� dee � Z y)� )�annotationsN)�Iterable)�IO�AnyStr�NoReturnc �� � e Zd ZdZdd�Zdd�Zdd�Zej fdd�Z dd�Z
dd�Zddd�Zddd �Z
ddd
�Zdd�Zdd�Zdd
�Zd d!d�Zd"d�Zd#d�Zd"d�Zd$d�Zdd�Zd%d�Zd%d�Zy)&�ContainerIOzm
A file object that provides read access to a part of an existing
file (for example a TAR file).
c �r � || _ d| _ || _ || _ | j j |� y)z�
Create file object.
:param file: Existing file.
:param offset: Start of region, in bytes.
:param length: Size of region, in bytes.
r N)�fh�pos�offset�length�seek)�self�filer
r s �:/usr/local/lib/python3.12/site-packages/PIL/ContainerIO.py�__init__zContainerIO.__init__ s0 � � #�����������������V�� c � � y�NF� �r s r �isattyzContainerIO.isatty. � � �r c � � y�NTr r s r �seekablezContainerIO.seekable1 � � �r c �R � |dk( r| j |z | _ n!|dk( r| j |z | _ n|| _ t dt | j | j � � | _ | j j | j | j z � | j S )aK
Move file pointer.
:param offset: Offset in bytes.
:param mode: Starting position. Use 0 for beginning of region, 1
for current offset, and 2 for end of region. You cannot move
the pointer outside the defined region.
:returns: Offset from start of region, in bytes.
� � r )r r �max�minr r r
)r r
�modes r r zContainerIO.seek4 s| � � �1�9��x�x�&�(�D�H�
�Q�Y��{�{�V�+�D�H��D�H��q�#�d�h�h����4�5��������T�[�[�4�8�8�+�,��x�x�r c � � | j S )ze
Get current file pointer.
:returns: Offset from start of region, in bytes.
)r r s r �tellzContainerIO.tellI s
� � �x�x�r c � � yr r r s r �readablezContainerIO.readableQ r r c �& � |dkD r$t || j | j z
� }n| j | j z
}|dk rd| j j v rdS dS | j |z | _ | j j |� S )z�
Read data.
:param n: Number of bytes to read. If omitted, zero or negative,
read until end of region.
:returns: An 8-bit string.
r �br � )r# r r r r$ �read)r �ns r r, zContainerIO.readT sx � �
�q�5��A�t�{�{�T�X�X�-�.�A����d�h�h�&�A���6�������-�3�5�2�5��8�8�a�<����w�w�|�|�A��r c �� � d| j j v rdnd}d| j j v rdnd} | j d� }|s |S ||z }||k( st |� |k( r |S �2)z�
Read a line of text.
:param n: Number of bytes to read. If omitted, zero or negative,
read until end of line.
:returns: An 8-bit string.
r* r r+ �
�
r )r r$ r, �len)r r- �s�newline_character�cs r �readlinezContainerIO.readlinee sy � � �$�'�'�,�,�.�C�B��%(�D�G�G�L�L�%8�E�d���� � �!��A��� �� �A��A��%�%��Q��1����� r c �x � g } | j � }|s |S |j |� t |� |k( r |S �8)z�
Read multiple lines of text.
:param n: Number of lines to read. If omitted, zero, negative or None,
read until end of region.
:returns: A list of 8-bit strings.
)r5 �appendr1 )r r- �linesr2 s r � readlineszContainerIO.readlinesx sI � � ����
�
��A��� ��
�L�L��O��5�z�Q����� r c � � yr r r s r �writablezContainerIO.writable� r r c � � t � ��N��NotImplementedError)r r* s r �writezContainerIO.write� � � �!�#�#r c � � t � �r= r>