
    wg                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ dddZ	 e j                  d      Z G d	 d
e      Zy)    N)AbstractArchiveFileSystem)compr)infer_compressionfile	directory)   0   5tarc                   N     e Zd ZdZdZdZdZ	 	 	 	 	 d	 fd	Zd Zd Z	d
dZ
 xZS )TarFileSystemzzCompressed Tar archives as a file-system (read-only)

    Supports the following formats:
    tar.gz, tar.bz2, tar.xz
     r
   Fc                    t        	|   d
i | |xs i }t        |t              r7t	        j
                  |fd|i|| _        | j                  j                         }|d }	 t        |d      r|j                  }nQt        |d      r|j                  }n8t        |d      r|j                  }nt        |d      r|j                         d   }|&t        |      }t        j                  d| d|        |t!        |   |      }|| _        || _        t'        j(                  | j$                  	      | _        d | _        || _        d | _        | j3                          y # t        $ r"}t        j                  d|        Y d }~d }~ww xY w)Nprotocoloriginalpathnameinfoz:Unable to determine file name, not inferring compression: zInferred compression z from file name )fileobj )super__init__
isinstancestrfsspecopenofhasattrr   r   r   r   	Exceptionloggerwarningr   r   _fo_reffotarfileTarFiler
   	dir_cacheindex_storeindex_index)
selfr"   r&   target_optionstarget_protocolcompressionkwargsr   ex	__class__s
            _/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/fsspec/implementations/tar.pyr   zTarFileSystem.__init__   su    	"6"'-2b#kk"QQ.QDGB D

 2z*;;D R(77D R(77D R(779V,D /53K=@PQUPVWX" {#B'B??4773&
+  PQSPTU s   #A*E 	F	'FF	c                     i }| j                   D ]a  }|j                         }t        j                  |d   d      |d<   |j                         d   j	                  d      }||j
                  f||<   c || _        y )Ntyper   r   /)r
   get_infotypemapgetrstripoffset_datar'   )r)   outtir   r   s        r0   r(   zTarFileSystem._index[   ss    (( 	/B;;=D";;tF|V<DL;;=(//4Dr~~.CI		/ 
    c                    | j                   y | j                  | j                  j                               D ci c]	  }||ddd c}| _         | j                  j	                         D ]W  }|j                         }|d   j                  d      |d<   t        j                  |d   d      |d<   || j                   |d   <   Y y c c}w )Nr   r   )r   sizer2   r   r3   r2   r   )	r%   _all_dirnamesr
   getnames
getmembersr4   r7   r5   r6   )r)   dirnamememberr   s       r0   	_get_dirszTarFileSystem._get_dirsg   s    >>%
  --dhh.?.?.AB
 gq+FF
 hh))+ 	0F??$D<..s3DL";;tF|V<DL+/DNN4<(		0	
s   Cc                     |dk7  rt        d      | j                  |   \  }}|d   dk7  rt        d      | j                  j                  |      S )Nrbz#Read-only filesystem implementationr2   r   zCan only handle regular files)
ValueErrorr'   r
   extractfile)r)   r   moder-   detailsoffsets         r0   _openzTarFileSystem._openv   sT    4<BCC**T*6?f$<==xx##D))r;   )r   NNNN)rE   )__name__
__module____qualname____doc__root_markerr   cachabler   r(   rC   rK   __classcell__)r/   s   @r0   r   r      s@     KHH @D	0*r;   r   )loggingr#   r   fsspec.archiver   fsspec.compressionr   fsspec.utilsr   r5   	getLoggerr   r   r   r;   r0   <module>rX      sB       4 $ *{
+			5	!n*- n*r;   