o
    'j6h                     @  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                   @  s   e Zd ZdZdAd	d
ZdBddZdBddZejfdCddZ	dDddZ
dBddZdEdFddZdEdFddZdEdGd d!ZdBd"d#ZdHd&d'ZdId*d+ZdJdKd.d/ZdLd1d2ZdMd5d6ZdLd7d8ZdNd9d:ZdDd;d<ZdOd=d>ZdOd?d@Zd,S )P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   ^/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/PIL/ContainerIO.py__init__   s
   zContainerIO.__init__boolc                 C     dS NFr   r   r   r   r   isatty.      zContainerIO.isattyc                 C  r   NTr   r   r   r   r   seekable1   r   zContainerIO.seekablemodec                 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  r   r   r   r   r   r   r   readableQ   r   zContainerIO.readablenr   c                 C  s\   |dkrt || j| j }n| j| j }|dkr"d| 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  sb   d| j jv rdnd}d| j jv rdnd}	 | d}|s	 |S || }||ks-t||kr0	 |S q)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)      

Tr   )r   r   r*   len)r   r&   snewline_charactercr   r   r   readlinee   s   
zContainerIO.readline
int | Nonelist[AnyStr]c                 C  s6   g }	 |   }|s	 |S || t||kr	 |S q)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.
        )r1   appendr-   )r   r&   linesr.   r   r   r   	readlinesx   s   
zContainerIO.readlinesc                 C  r   r   r   r   r   r   r   writable   r   zContainerIO.writabler'   r   c                 C     t  NNotImplementedError)r   r'   r   r   r   write      zContainerIO.writer5   Iterable[AnyStr]c                 C  r8   r9   r:   )r   r5   r   r   r   
writelines   r=   zContainerIO.writelinesNsizec                 C  r8   r9   r:   )r   r@   r   r   r   truncate   r=   zContainerIO.truncateContainerIO[AnyStr]c                 C     | S r9   r   r   r   r   r   	__enter__   r   zContainerIO.__enter__argsobjectc                 G  s   |    d S r9   )close)r   rE   r   r   r   __exit__   s   zContainerIO.__exit__c                 C  rC   r9   r   r   r   r   r   __iter__   r   zContainerIO.__iter__c                 C  s   |   }|sd}t||S )Nzend of region)r1   StopIteration)r   linemsgr   r   r   __next__   s
   zContainerIO.__next__c                 C  s
   | j  S r9   )r   filenor   r   r   r   rN      s   
zContainerIO.filenoc                 C     | j   d S r9   )r   flushr   r   r   r   rP         zContainerIO.flushc                 C  rO   r9   )r   rG   r   r   r   r   rG      rQ   zContainerIO.close)r   r	   r
   r   r   r   r   r   )r   r   )r
   r   r   r   r   r   )r   r   )r%   )r&   r   r   r   )r&   r2   r   r3   )r'   r   r   r   )r5   r>   r   r   r9   )r@   r2   r   r   )r   rB   )rE   rF   r   r   )r   r   )r   r   )__name__
__module____qualname____doc__r   r   r   ioSEEK_SETr   r#   r$   r*   r1   r6   r7   r<   r?   rA   rD   rH   rI   rM   rN   rP   rG   r   r   r   r   r      s,    













r   )

__future__r   rV   collections.abcr   typingr   r   r   r   r   r   r   r   <module>   s
   