
    zvg                    b    d dl mZ d dlZd dlmZ d dlmZmZmZ  G d dee                   Z	dS )    )annotationsN)Iterable)IOAnyStrNoReturnc                      e Zd ZdZd-d	Zd.dZd.dZej        fd/dZ	d0dZ
d.dZd1d2dZd1d2dZd1d3dZd.dZd4dZd5dZd6d7d"Zd8d$Zd9d'Zd8d(Zd:d)Zd0d*Zd;d+Z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                r    || _         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   s       L/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/ContainerIO.py__init__zContainerIO.__init__   s:     #V    boolc                    dS NF r   s    r   isattyzContainerIO.isatty.       ur   c                    dS NTr   r   s    r   seekablezContainerIO.seekable1       tr   modec                   |dk    r| j         |z   | _         n|dk    r| j        |z   | _         n|| _         t          dt          | 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   r$   s      r   r   zContainerIO.seek4   s     199x&(DHHQYY{V+DHHDHq#dh4455T[48+,,,xr   c                    | j         S )ze
        Get current file pointer.

        :returns: Offset from start of region, in bytes.
        )r   r   s    r   tellzContainerIO.tellI   s     xr   c                    dS r!   r   r   s    r   readablezContainerIO.readableQ   r#   r   nr   c                    |dk    rt          || j        | j        z
            }n| j        | j        z
  }|dk    rd| j        j        v rdndS | j        |z   | _        | 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   r/   s     r   r3   zContainerIO.readT   su     q55At{TX-..AAdh&A66--33258a<w||Ar   c                    d| j         j        v rdnd}d| j         j        v rdnd}	 |                     d          }|sn ||z   }||k    st          |          |k    rn8|S )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.
        r1   r   r2      

Tr&   )r   r$   r3   len)r   r/   snewline_charactercs        r   readlinezContainerIO.readlinee   s     $',..CCB%(DGL%8%8EEd			!A AA%%%Q1	 r   
int | Nonelist[AnyStr]c                    g }	 |                                  }|sn*|                    |           t          |          |k    rnA|S )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.
        )r;   appendr7   )r   r/   linesr8   s       r   	readlineszContainerIO.readlinesx   sS     	A LLOOO5zzQ	 r   c                    dS r   r   r   s    r   writablezContainerIO.writable   r   r   r1   r   c                    t                      NNotImplementedError)r   r1   s     r   writezContainerIO.write       !###r   r@   Iterable[AnyStr]c                    t                      rE   rF   )r   r@   s     r   
writelineszContainerIO.writelines   rI   r   Nsizec                    t                      rE   rF   )r   rM   s     r   truncatezContainerIO.truncate   rI   r   ContainerIO[AnyStr]c                    | S rE   r   r   s    r   	__enter__zContainerIO.__enter__       r   argsobjectc                .    |                                   d S rE   )close)r   rT   s     r   __exit__zContainerIO.__exit__   s    

r   c                    | S rE   r   r   s    r   __iter__zContainerIO.__iter__   rS   r   c                T    |                                  }|sd}t          |          |S )Nzend of region)r;   StopIteration)r   linemsgs      r   __next__zContainerIO.__next__   s/    }} 	%!C$$$r   c                4    | j                                         S rE   )r   filenor   s    r   ra   zContainerIO.fileno   s    w~~r   c                8    | j                                          d S rE   )r   flushr   s    r   rc   zContainerIO.flush       r   c                8    | j                                          d S rE   )r   rW   r   s    r   rW   zContainerIO.close   rd   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   r=   )r1   r   r   r   )r@   rJ   r   r   rE   )rM   r<   r   r   )r   rP   )rT   rU   r   r   )r   r   )r   r   )__name__
__module____qualname____doc__r   r   r"   ioSEEK_SETr   r+   r-   r3   r;   rA   rC   rH   rL   rO   rR   rX   rZ   r_   ra   rc   rW   r   r   r   r	   r	      s        
   "       -/K     *          "    &    $   $ $ $ $$ $ $ $$ $ $ $ $                           r   r	   )

__future__r   rj   collections.abcr   typingr   r   r   r	   r   r   r   <module>ro      s     # " " " " " 				 $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' 'V V V V V"V* V V V V Vr   