a
    ze0                     @   s   g d Z dZddlmZ ddlZddlZddlZddlm	Z	 ddl
mZmZ dZdZdZG d	d
 d
ejZdddZdddZdd ZdS ))BZ2FileBZ2CompressorBZ2Decompressoropencompress
decompressz%Nadeem Vawda <nadeem.vawda@gmail.com>    )r   N)RLock)r   r         c                   @   s   e Zd Zd)ddddZdd Zedd	 Zd
d Zdd Zdd Z	dd Z
d*ddZd+ddZd,ddZdd Zd-ddZd.ddZd d! Zd"d# Zejfd$d%Zd&d' Zd(S )/r   r	   compresslevelc                C   s8  t  | _d | _d| _t| _d|  kr.dks8n td|dv rJd}t}nb|dv rfd}t}t	|| _
nF|d	v rd
}t}t	|| _
n*|dv rd}t}t	|| _
ntd|f t|tttjfrt||| _d| _|| _n*t|dst|dr|| _|| _ntd| jtkr.tj| jttd}t|| _nd| _d S )NFr	   r   z%compresslevel must be between 1 and 9) r   rbr   )wwbr   )xxbr   )aabr   Invalid mode: %rTreadwritez6filename must be a str, bytes, file or PathLike object)trailing_errorr   )r   _lock_fp_closefp_MODE_CLOSED_mode
ValueError
_MODE_READ_MODE_WRITEr   _compressor
isinstancestrbytesosPathLike_builtin_openhasattr	TypeError_compressionDecompressReaderr   OSErrorioBufferedReader_buffer_pos)selffilenamemoder   	mode_coderaw r8   /usr/lib/python3.9/bz2.py__init__&   sH    zBZ2File.__init__c                 C   s  | j  | jtkr"W d    d S z| jtkr:| j  n"| jtkr\| j| j	
  d | _	W z,| jrp| j  W d | _d| _t| _d | _qd | _d| _t| _d | _0 nJz,| jr| j  W d | _d| _t| _d | _nd | _d| _t| _d | _0 0 W d    n1 s0    Y  d S )NF)r   r   r   r!   r1   closer"   r   r   r#   flushr   r3   r8   r8   r9   r;   e   s>    



zBZ2File.closec                 C   s
   | j tkS N)r   r   r=   r8   r8   r9   closed~   s    zBZ2File.closedc                 C   s   |    | j S r>   )_check_not_closedr   filenor=   r8   r8   r9   rA      s    zBZ2File.filenoc                 C   s   |   o| j S r>   )readabler1   seekabler=   r8   r8   r9   rC      s    zBZ2File.seekablec                 C   s   |    | jtkS r>   )r@   r   r!   r=   r8   r8   r9   rB      s    zBZ2File.readablec                 C   s   |    | jtkS r>   )r@   r   r"   r=   r8   r8   r9   writable   s    zBZ2File.writabler   c                 C   s>   | j $ |   | j|W  d    S 1 s00    Y  d S r>   )r   _check_can_readr1   peek)r3   nr8   r8   r9   rF      s    zBZ2File.peekc                 C   s>   | j $ |   | j|W  d    S 1 s00    Y  d S r>   )r   rE   r1   r   r3   sizer8   r8   r9   r      s    zBZ2File.readc                 C   sL   | j 2 |   |dk rtj}| j|W  d    S 1 s>0    Y  d S )Nr   )r   rE   r/   DEFAULT_BUFFER_SIZEr1   read1rI   r8   r8   r9   rL      s
    zBZ2File.read1c                 C   s>   | j $ |   | j|W  d    S 1 s00    Y  d S r>   )r   rE   r1   readinto)r3   br8   r8   r9   rM      s    zBZ2File.readintoc                 C   sb   t |ts$t|dstd| }| j$ |   | j|W  d    S 1 sT0    Y  d S N	__index__zInteger argument expected)	r$   intr*   r+   rP   r   rE   r1   readlinerI   r8   r8   r9   rR      s    

zBZ2File.readlinec                 C   sb   t |ts$t|dstd| }| j$ |   | j|W  d    S 1 sT0    Y  d S rO   )	r$   rQ   r*   r+   rP   r   rE   r1   	readlinesrI   r8   r8   r9   rS      s    

zBZ2File.readlinesc                 C   s   | j h |   t|ttfr(t|}nt|}|j}| j	|}| j
| |  j|7  _|W  d    S 1 st0    Y  d S r>   )r   _check_can_writer$   r&   	bytearraylen
memoryviewnbytesr#   r   r   r   r2   )r3   datalength
compressedr8   r8   r9   r      s    
zBZ2File.writec                 C   s8   | j  tj| |W  d    S 1 s*0    Y  d S r>   )r   r,   
BaseStream
writelines)r3   seqr8   r8   r9   r]      s    zBZ2File.writelinesc                 C   s@   | j & |   | j||W  d    S 1 s20    Y  d S r>   )r   _check_can_seekr1   seek)r3   offsetwhencer8   r8   r9   r`     s    zBZ2File.seekc                 C   sZ   | j @ |   | jtkr2| j W  d    S | jW  d    S 1 sL0    Y  d S r>   )r   r@   r   r!   r1   tellr2   r=   r8   r8   r9   rc     s
    
zBZ2File.tellN)r   )r   )rH   )rH   )rH   )rH   )__name__
__module____qualname__r:   r;   propertyr?   rA   rC   rB   rD   rF   r   rL   rM   rR   rS   r   r]   r/   SEEK_SETr`   rc   r8   r8   r8   r9   r      s$   ?




	

r   r   r   c                 C   s   d|v r d|v rPt d|f n0|d ur0t d|d ur@t d|d urPt d|dd}t| ||d}d|v rt||||S |S d S )	NtrN   r   z0Argument 'encoding' not supported in binary modez.Argument 'errors' not supported in binary modez/Argument 'newline' not supported in binary moder   r   )r    replacer   r/   TextIOWrapper)r4   r5   r   encodingerrorsnewlinebz_modebinary_filer8   r8   r9   r     s    r   c                 C   s   t |}|| |  S r>   )r   r   r<   )rY   r   compr8   r8   r9   r   G  s    r   c                 C   sf   g }| r\t  }z|| }W n ty:   |r4Y q\n Y n0 || |jsTtd|j} qd|S )NzACompressed data ended before the end-of-stream marker was reached    )r   r   r.   appendeofr    unused_datajoin)rY   resultsdecompresr8   r8   r9   r   R  s    
r   )r   r   NNN)r   )__all__
__author__builtinsr   r)   r/   r'   r,   	threadingr   _bz2r   r   r   r!   r"   r\   r   r   r   r8   r8   r8   r9   <module>   s$       
)
