o
    ‡®fm  ã                   @  sD   d dl mZ d dlZd dlmZmZmZmZ G dd„ dee ƒZdS )é    )ÚannotationsN)ÚIOÚAnyStrÚGenericÚLiteralc                   @  s^   e Zd ZdZdd	d
„Zd dd„Zejfd!dd„Zd"dd„Z	d#d$dd„Z
d%dd„Zd&dd„ZdS )'ÚContainerIOzm
    A file object that provides read access to a part of an existing
    file (for example a TAR file).
    Úfileú
IO[AnyStr]ÚoffsetÚintÚlengthÚreturnÚNonec                 C  s(   || _ d| _|| _|| _| j  |¡ dS )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Úposr
   r   Úseek)Úselfr   r
   r   © r   úH/home/ubuntu/webapp/venv/lib/python3.10/site-packages/PIL/ContainerIO.pyÚ__init__   s
   zContainerIO.__init__Úboolc                 C  s   dS )NFr   ©r   r   r   r   Úisatty-   s   zContainerIO.isattyÚmodeúLiteral[0, 1, 2]c                 C  s`   |dkr| j | | _ n|dkr| j| | _ n|| _ tdt| j | jƒƒ| _ | j | j| j  ¡ dS )a  
        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.
        é   é   r   N)r   r   ÚmaxÚminr   r   r
   )r   r
   r   r   r   r   r   0   s   	zContainerIO.seekc                 C  s   | j S )ze
        Get current file pointer.

        :returns: Offset from start of region, in bytes.
        )r   r   r   r   r   ÚtellC   s   zContainerIO.tellr   Únr   c                 C  sT   |rt || j| j ƒ}n| j| j }|sd| jjv rdS dS | j| | _| j |¡S )z¥
        Read data.

        :param n: Number of bytes to read. If omitted or zero,
            read until end of region.
        :returns: An 8-bit string.
        Úbó    Ú )r   r   r   r   r   Úread)r   r    r   r   r   r$   K   s   zContainerIO.readc                 C  sV   d| j jv rdnd}d| j jv rdnd}	 |  d¡}|s	 |S || }||kr*	 |S q)zJ
        Read a line of text.

        :returns: An 8-bit string.
        r!   r"   r#   ó   
Ú
Tr   )r   r   r$   )r   ÚsÚnewline_characterÚcr   r   r   Úreadline\   s   
ýùzContainerIO.readlineúlist[AnyStr]c                 C  s$   g }	 |   ¡ }|s	 |S | |¡ q)zZ
        Read multiple lines of text.

        :returns: A list of 8-bit strings.
        )r*   Úappend)r   Úlinesr'   r   r   r   Ú	readlinesm   s   
ÿüzContainerIO.readlinesN)r   r	   r
   r   r   r   r   r   )r   r   )r
   r   r   r   r   r   )r   r   )r   )r    r   r   r   )r   r   )r   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚioÚSEEK_SETr   r   r$   r*   r.   r   r   r   r   r      s    



r   )	Ú
__future__r   r3   Útypingr   r   r   r   r   r   r   r   r   Ú<module>   s   