
     i                     Z    d Z ddlmZmZmZmZ ddlZddlZddlm	Z	  G d de	          Z
dS )z
bzip2mrcfile
------------

Module which exports the :class:`Bzip2MrcFile` class.

Classes:
    :class:`Bzip2MrcFile`: An object which represents a bzip2-compressed MRC
    file.

    )absolute_importdivisionprint_functionunicode_literalsN   )MrcFilec                   P     e Zd ZdZd Zd Zd
 fd	Zd Z fdZ fdZ	d	 Z
 xZS )Bzip2MrcFilez:class:`~mrcfile.mrcfile.MrcFile` subclass for handling bzip2-compressed
    files.
    
    Usage is the same as for :class:`~mrcfile.mrcfile.MrcFile`.
    
    c                 B    d                     | j        | j                  S )NzBzip2MrcFile('{0}', mode='{1}'))format_fname_modeselfs    ^/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/mrcfile/bzip2mrcfile.py__repr__zBzip2MrcFile.__repr__#   s&    0778<
D D 	D    c                     || _         d| j        v rBt          j                            |          s#t          |d                                           t          j        |d          | _	        dS )z+Override _open_file() to open a bzip2 file.wmoderN)
r   r   ospathexistsopenclosebz2BZ2File	_iostream)r   names     r   
_open_filezBzip2MrcFile._open_file'   sb    $*RW^^D%9%9C   &&(((T444r   Fc                     |                                   t          t          |                               |           dS )z6Override _read() to ensure bzip2 file is in read mode.N)_ensure_readable_bzip2_streamsuperr
   _read)r   header_only	__class__s     r   r&   zBzip2MrcFile._read.   s9    **,,,lD!!''44444r   c                 
   t          | j        d          r| j                                        }n| j        j        d         dk    }|s;| j                                         t          j        | j        d          | _        dS dS )z7Make sure _iostream is a bzip2 stream that can be read.readabler   r   r   N)hasattrr    r*   r   r   r   r   r   )r   r*   s     r   r$   z*Bzip2MrcFile._ensure_readable_bzip2_stream3   s    4>:.. 	7~..00HH +A.#5H 	@N  """ [3???DNNN	@ 	@r   c                 z    |                                   t          t          |                                           S )z=Override _get_file_size() to ensure stream is readable first.)r$   r%   r
   _get_file_size)r   r(   s    r   r-   zBzip2MrcFile._get_file_size?   s1    **,,,\4((77999r   c                     t          | j        d          r(t          t          |                               |          S | j                            |          }t          |          t          |          fS )zbOverride because BZ2File in Python 2 does not support
        :meth:`~io.BufferedIOBase.readinto`.readinto)r+   r    r%   r
   _read_bytearray_from_streamread	bytearraylen)r   number_of_bytesresult_bytesr(   s      r   r0   z(Bzip2MrcFile._read_bytearray_from_streamD   si     4>:.. 	>t,,HHYYY  >..??L\**C,=,===r   c                    | j         s| j                                         t          j        | j        d          | _        | j                            | j                                                   | j                            | j	                                                   | j                            | j
                                                   dS dS )z{Override :meth:`~mrcfile.mrcinterpreter.MrcInterpreter.flush` since
        BZ2File objects need special handling.
        r   r   N)
_read_onlyr    r   r   r   r   writeheadertobytesextended_headerdatar   s    r   flushzBzip2MrcFile.flushO   s      	6N  """ [3???DN N  !4!4!6!6777N  !5!=!=!?!?@@@N  !2!2!4!455555	6 	6r   )F)__name__
__module____qualname____doc__r   r"   r&   r$   r-   r0   r=   __classcell__)r(   s   @r   r
   r
      s         D D D5 5 55 5 5 5 5 5

@ 
@ 
@: : : : :
	> 	> 	> 	> 	>6 6 6 6 6 6 6r   r
   )rA   
__future__r   r   r   r   r   r   mrcfiler   r
    r   r   <module>rF      s   
 
* * * * * * * * * * * * 


 				      @6 @6 @6 @6 @67 @6 @6 @6 @6 @6r   