a
    ç´«jü  ã                   @  sL   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„ dee ƒZ	dS )é    )ÚannotationsN)ÚIterable)ÚIOÚAnyStrÚNoReturnc                   @  sN  e Zd ZdZdddddœdd„Zdd	œd
d„Zdd	œdd„Zejfddddœdd„Z	dd	œdd„Z
dd	œdd„Zd?dddœdd„Zd@dddœdd„ZdAdddœdd„Zdd	œd d!„Zdd"d#œd$d%„Zd&d"d'œd(d)„ZdBddd+œd,d-„Zd.d	œd/d0„Zd1dd2œd3d4„Zd.d	œd5d6„Zdd	œd7d8„Zdd	œd9d:„Zdd	œd;d<„Zdd	œd=d>„Zd*S )CÚContainerIOzm
    A file object that provides read access to a part of an existing
    file (for example a TAR file).
    z
IO[AnyStr]ÚintÚNone)ÚfileÚoffsetÚlengthÚreturnc                 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   úN/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/ContainerIO.pyÚ__init__   s
    zContainerIO.__init__Úbool)r   c                 C  s   dS ©NFr   ©r   r   r   r   Úisatty.   s    zContainerIO.isattyc                 C  s   dS ©NTr   r   r   r   r   Úseekable1   s    zContainerIO.seekable)r   Úmoder   c                 C  sb   |dkr| j | | _ n|dkr,| j| | _ n|| _ tdt| j | jƒƒ| _ | j | j| j  ¡ | 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   r   r   r   r   4   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   ÚtellI   s    zContainerIO.tellc                 C  s   dS r   r   r   r   r   r   ÚreadableQ   s    zContainerIO.readableéÿÿÿÿr   )Únr   c                 C  s\   |dkrt || j| j ƒ}n| j| j }|dkrDd| jjv r@dS dS | 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   Úbó    Ú )r   r   r   r   r   Úread)r   r#   r   r   r   r'   T   s    zContainerIO.readc                 C  s\   d| j jv rdnd}d| j jv r$dnd}|  d¡}|s8qX|| }||ksXt|ƒ|kr(qXq(|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.
        r$   r%   r&   ó   
Ú
r   )r   r   r'   Úlen)r   r#   ÚsZnewline_characterÚcr   r   r   Úreadlinee   s    
zContainerIO.readlinez
int | Nonezlist[AnyStr]c                 C  s0   g }|   ¡ }|sq,| |¡ t|ƒ|krq,q|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-   Úappendr*   )r   r#   Úlinesr+   r   r   r   Ú	readlinesx   s    
zContainerIO.readlinesc                 C  s   dS r   r   r   r   r   r   ÚwritableŠ   s    zContainerIO.writabler   )r$   r   c                 C  s
   t ƒ ‚d S ©N©ÚNotImplementedError)r   r$   r   r   r   Úwrite�   s    zContainerIO.writezIterable[AnyStr])r/   r   c                 C  s
   t ƒ ‚d S r2   r3   )r   r/   r   r   r   Ú
writelines�   s    zContainerIO.writelinesN)Úsizer   c                 C  s
   t ƒ ‚d S r2   r3   )r   r7   r   r   r   Útruncate“   s    zContainerIO.truncatezContainerIO[AnyStr]c                 C  s   | S r2   r   r   r   r   r   Ú	__enter__–   s    zContainerIO.__enter__Úobject)Úargsr   c                 G  s   |   ¡  d S r2   )Úclose)r   r;   r   r   r   Ú__exit__™   s    zContainerIO.__exit__c                 C  s   | S r2   r   r   r   r   r   Ú__iter__œ   s    zContainerIO.__iter__c                 C  s   |   ¡ }|sd}t|ƒ‚|S )Nzend of region)r-   ÚStopIteration)r   ÚlineÚmsgr   r   r   Ú__next__Ÿ   s
    zContainerIO.__next__c                 C  s
   | j  ¡ S r2   )r   Úfilenor   r   r   r   rC   ¦   s    zContainerIO.filenoc                 C  s   | j  ¡  d S r2   )r   Úflushr   r   r   r   rD   ©   s    zContainerIO.flushc                 C  s   | j  ¡  d S r2   )r   r<   r   r   r   r   r<   ¬   s    zContainerIO.close)r"   )r"   )r"   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚioÚSEEK_SETr   r    r!   r'   r-   r0   r1   r5   r6   r8   r9   r=   r>   rB   rC   rD   r<   r   r   r   r   r      s*   r   )
Ú
__future__r   rI   Úcollections.abcr   Útypingr   r   r   r   r   r   r   r   Ú<module>   s   