a XC?h��@s:dZddlZejZGdd�dej�ZGdd�dej�ZdS)z7Internal classes used by the gzip, lzma and bz2 modules�Nc@s0eZdZdZdd�Zdd�Zdd�Zdd �Zd S) � BaseStreamzMode-checking helper functions.cCs|jrtd��dS)NzI/O operation on closed file)�closed� ValueError��self�r�1/opt/alt/python39/lib64/python3.9/_compression.py�_check_not_closed szBaseStream._check_not_closedcCs|��st�d��dS)NzFile not open for reading)�readable�io�UnsupportedOperationrrrr�_check_can_readszBaseStream._check_can_readcCs|��st�d��dS)NzFile not open for writing)�writabler r rrrr�_check_can_writeszBaseStream._check_can_writecCs(|��st�d��|��s$t�d��dS)Nz3Seeking is only supported on files open for readingz3The underlying file object does not support seeking)r r r �seekablerrrr�_check_can_seeks zBaseStream._check_can_seekN)�__name__� __module__� __qualname__�__doc__r r rrrrrrr s rcsjeZdZdZdd�Zddd�Z�fdd�Zd d �Zd d �Zddd�Z dd�Z e j fdd�Z dd�Z�ZS)�DecompressReaderz5Adapts the decompressor API to a RawIOBase reader APIcCsdS)NTrrrrrr $szDecompressReader.readablercKsB||_d|_d|_d|_||_||_|jfi|j��|_||_dS)NFr�����)�_fp�_eof�_pos�_size�_decomp_factory� _decomp_args� _decompressor�_trailing_error)r�fpZdecomp_factoryZtrailing_errorZ decomp_argsrrr�__init__'szDecompressReader.__init__csd|_t���S�N)r�super�closer�� __class__rrr$;szDecompressReader.closecCs |j��Sr")rrrrrrr?szDecompressReader.seekablec Csxt|��X}|�d��.}|�t|��}||dt|��<Wd�n1sH0YWd�n1sf0Yt|�S)N�B)� memoryview�cast�read�len)r�bZviewZ byte_view�datarrr�readintoBsLzDecompressReader.readintorcCs�|dkr|��S|r|jrdSd}|jjr�|jjp<|j�t�}|sDq�|jfi|j ��|_z|j� ||�}Wq�|j y�Yq�Yq�0n4|jj r�|j�t�}|s�t d��nd}|j� ||�}|r"q�q"|s�d|_|j|_dS|jt|�7_|S)Nr�zACompressed file ended before the end-of-stream marker was reachedT)�readallrr�eofZ unused_datarr*� BUFFER_SIZErr� decompressrZ needs_input�EOFErrorrrr+)r�sizer-Zrawblockrrrr*Hs@  ��   zDecompressReader.readcCs0|j�d�d|_d|_|jfi|j��|_dS)NrF)r�seekrrrrrrrrr�_rewindrs zDecompressReader._rewindcCs�|tjkr nR|tjkr"|j|}n<|tjkrP|jdkrD|�tj�rDq6|j|}ntd� |���||jkrr|� �n ||j8}|dkr�|�t tj|��}|s�q�|t |�8}q||jS)NrzInvalid value for whence: {}) r �SEEK_SET�SEEK_CURr�SEEK_ENDrr*�DEFAULT_BUFFER_SIZEr�formatr7�minr+)r�offset�whencer-rrrr6xs&          zDecompressReader.seekcCs|jS)z!Return the current file position.)rrrrr�tell�szDecompressReader.tell)r)r)rrrrr r!r$rr.r*r7r r8r6r@� __classcell__rrr%rr!s   *r)rr r;r2�BufferedIOBaser� RawIOBaserrrrr�s