
     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
gzipmrcfile
-----------

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

Classes:
    :class:`GzipMrcFile`: An object which represents a gzipped MRC file.

    )absolute_importdivisionprint_functionunicode_literalsN   )MrcFilec                   H     e Zd ZdZd Zd Zd Zd
 fd	Zd Zd Z	d	 Z
 xZS )GzipMrcFilez:class:`~mrcfile.mrcfile.MrcFile` subclass for handling gzipped files.
    
    Usage is the same as for :class:`~mrcfile.mrcfile.MrcFile`.
    
    c                 L    d                     | j        j        | j                  S )NzGzipMrcFile('{0}', mode='{1}'))format_fileobjname_modeselfs    ]/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/mrcfile/gzipmrcfile.py__repr__zGzipMrcFile.__repr__!   s)    /66t}7I7;zC C 	C    c                     t          || j        dz             | _        t          j        | j        d          | _        dS )z9Override _open_file() to open both normal and gzip files.brbfileobjmodeN)openr   r   gzipGzipFile	_iostream)r   r   s     r   
_open_filezGzipMrcFile._open_file%   s6    T4:#344t}4HHHr   c                 j    | j                                          | j                                         dS )z;Override _close_file() to close both normal and gzip files.N)r   closer   r   s    r   _close_filezGzipMrcFile._close_file*   s0    r   Fc                     |                                   t          t          |                               |           dS )z5Override _read() to ensure gzip file is in read mode.N)_ensure_readable_gzip_streamsuperr
   _read)r   header_only	__class__s     r   r&   zGzipMrcFile._read/   s9    ))+++k4  &&{33333r   c                     | j         j        t          j        k    rU| j                                          | j                            d           t          j        | j        d          | _         dS dS )z6Make sure _iostream is a gzip stream that can be read.r   r   r   N)r   r   r   READr!   r   seekr   r   s    r   r$   z(GzipMrcFile._ensure_readable_gzip_stream4   sb    >$)++N  """Mq!!!!]4=tLLLDNNN ,+r   c                     |                                   | j                                        }t          | j                                                  }| j                            |t          j                   ||z   S )z4Override _get_file_size() to avoid seeking from end.)r$   r   telllenreadr+   osSEEK_SET)r   posextras      r   _get_file_sizezGzipMrcFile._get_file_size;   sf    ))+++n!!##DN''))**C---U{r   c                 J   | j         s| j                                         | j                            d           t          j        | j        d          | _        | j                            | j        	                                           | j                            | j
        	                                           | j                            | j        	                                           | j                                         | j                                         dS dS )z|Override :meth:`~mrcfile.mrcinterpreter.MrcInterpreter.flush` since
        GzipFile objects need special handling.
        r   wbr   N)
_read_onlyr   r!   r   r+   r   r   writeheadertobytesextended_headerdataflushtruncater   s    r   r=   zGzipMrcFile.flushC   s      
	%N  """Mq!!!!]4=tLLLDN N  !4!4!6!6777N  !5!=!=!?!?@@@N  !2!2!4!4555N  """M""$$$$$
	% 
	%r   )F)__name__
__module____qualname____doc__r   r   r"   r&   r$   r4   r=   __classcell__)r(   s   @r   r
   r
      s         C C CI I I
  
4 4 4 4 4 4
M M M  % % % % % % %r   r
   )rB   
__future__r   r   r   r   r   r0   mrcfiler   r
    r   r   <module>rG      s   	 	* * * * * * * * * * * *  				      8% 8% 8% 8% 8%' 8% 8% 8% 8% 8%r   