o
    y3g^'                     @  s  d dl mZ d dlZd dlZd dlZ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mZ d dlmZmZmZ d dlmZ dd	lmZ ejdd
 dkrUddini Ze	di eG dd dZeeef ZdddZG dd de
Zd ddZd!ddZdS )"    )annotationsN)	dataclass)Path)TarFileTarInfo)Dict	GeneratorIterator)Self   )
walk_paths   )   
   slotsTc                   @  s,   e Zd ZU ded< ded< ed
ddZd	S )Noder   infoz
list[Node]childrenreturnstrc                 C  s   | j jjdddd S )N/r   )maxsplit)r   namersplitself r   D/home/garg/my-data/venv/lib/python3.10/site-packages/kompress/tar.pyr      s   z	Node.nameNr   r   )__name__
__module____qualname____annotations__propertyr   r   r   r   r   r      s
   
 r   tfr   r   r   c                 C  s6   | j }|d us	J t|}t|tr| }t|S N)r   osfspath
isinstancebytesdecoder   )r%   pathr   r   r   _tarpath"   s   

r-   c                      s   e Zd Zejdd dk rejdkrejnej	Z
ddddd6 fddZddddd7 fddZed8ddZd9ddZd9ddZd9ddZd:d d!Zd;d%d&Zd;d'd(Zd<d)d*Zd=d+d,Zd>d?d/d0Zed@d4d5Z  ZS )ATarPathNr   r      nt)_nodes_rpath_nodetarstr | Path | TarPath | TarFiler2   Nodes | Noner3   Path | Noner4   Node | Noner   r
   c          	        s   t |tr|d u sJ ||S t |tr)|d usJ t|| }t | |}|S |d u s1J |t|}| s;|S t|\}}}| |||t dS )N)r5   r2   r4   r3   )	r)   r.   r   r-   super__new__r   exists
_make_args)	clsr5   r2   r3   r4   r,   resnodesroot	__class__r   r   r;   1   s   

zTarPath.__new__Nonec                  s   t | drd S t|tsJ ||d usJ |d usJ tjd d dkr1t|| }t | || _|| _	|| _
|d urC|| _d S |d|j| _d S )Nr5   r   r/   r   )hasattrr)   r   sysversion_infor-   r:   __init__r5   r2   r3   getjoinpartsr4   )r   r5   r2   r3   r4   r,   rB   r   r   rH   Q   s   
*zTarPath.__init__r   c                 C  s"   | j }|d usJ d|  d|S )Nzpath z doesn't existr4   )r   nr   r   r   nodek   s   zTarPath.nodeboolc                 C     | j j S r&   )rN   r   isfiler   r   r   r   is_fileq      zTarPath.is_filec                 C  rP   r&   )rN   r   isdirr   r   r   r   is_dirt   rS   zTarPath.is_dirc                 K  s
   | j d uS r&   rL   )r   kwargsr   r   r   r<   w   s   
zTarPath.existsGenerator[TarPath, None, None]c                 c  sH    | j }|j sJ |jD ]}| j|j }t| j| j||dV  qd S Nr5   r2   r3   r4   )	rN   r   rT   r   r3   r   r.   r5   r2   )r   rN   entryrpathr   r   r   iterdirz   s   
zTarPath.iterdirpatternr   Iterator[TarPath]c           	      k  sz    | j j}t|dkrdnd|d }|| }| j D ]\}}t||s(qt|d }t	| j
| j||dV  qd S )Nr    r   rY   )r3   rK   lenrJ   r2   itemsfnmatchr   splitr.   r5   )	r   r]   rV   rK   prefixfull_patternprN   r[   r   r   r   glob   s   zTarPath.globc                 K  s   |  d| S )N*)rg   )r   r]   rV   r   r   r   rglob   s   zTarPath.rglobc                 C  s   d| j d| jd| jS )Nz	self.tar=z self._rpath=z self._node=)r5   r3   r4   r   r   r   r   __repr__   s   zTarPath.__repr__c                 C  s   | j | }t| j| j|d dS rX   )r3   r.   r5   r2   )r   other	new_rpathr   r   r   __truediv__   s   
zTarPath.__truediv__rmodec                 K  s0   | j | jj}d|v r|S tj||ddS )Nbencoding)rq   )r5   extractfilerN   r   ioTextIOWrapperrI   )r   ro   rV   	extractedr   r   r   open   s   zTarPath.openr,   r   tuple[TarFile, Nodes, Node]c                   s  t | d}d}| }g }i  |D ]-}| }|j}|dkr q|d d dkr.|dd  }||r3|nd }|| | |< qi d fdd}	t||dD ]*\}
}}|
dkr_|
 | nd}|	|
}|| D ]}|	| | }|j| qiqPd }||fS )Nrn   r   .r   z./r_   rf   r   r   r   c                   sN    | }|d u r%| dkrtdd}tj|_n |  }t|g d}|| < |S )Nrx   r_   )r   )r   r   )rI   r   tarfileDIRTYPEtyper   )rf   rN   r   infosr@   r   r   get_node   s   


z$TarPath._make_args.<locals>.get_node)	separator)rf   r   r   r   )ry   rv   
getmembersrT   r   appendr   r   )r,   r%   sepmemberspathsmrU   	norm_namerf   r~   rn   dirsfilespnodexcnode	root_noder   r|   r   r=      s4   


zTarPath._make_args)
r5   r6   r2   r7   r3   r8   r4   r9   r   r
   )
r5   r6   r2   r7   r3   r8   r4   r9   r   rD   )r   r   )r   rO   )r   rW   )r]   r   r   r^   r   )r   r.   )rn   )ro   r   )r,   r   r   rw   )r    r!   r"   rF   rG   r'   r   pathlib_windows_flavour_posix_flavour_flavourr;   rH   r$   rN   rR   rU   r<   r\   rg   ri   rj   rm   rv   staticmethodr=   __classcell__r   r   rB   r   r.   +   s0    $








r.   tmp_pathrD   c                 C  sz  ddl m} || d }| rJ ttjd }|d }| s%J |t|tr,J ||}t|ts7J t|}t|tsBJ t|tsIJ | sOJ t|t|ksYJ |	 \}t|tseJ t|tslJ t
| ||d ksxJ ||ks~J |j}t|tsJ ||ksJ |jdksJ t|t|d ksJ | sJ |d }|jdksJ | rJ |d }	|	 sJ |	jg |jddR ksJ |	|d	 k sJ |	d
 }
|
 sJ |
 sJ |
 }|dksJ |
 }|dksJ |
d}| dksJ W d    n	1 sw   Y  |
 }| dks*J W d    d S 1 s6w   Y  d S )Nr   CPathzdonotexist.tar.gztests/structure_datazgdpr_export.tar.gzgdpr_exportwhatevermessagesprofilez	index.csvs   test message
ztest message
rb)r_   r   r<   r   __file__parentr)   r.   r   r\   hashr   rU   rK   rR   
read_bytes	read_textrv   read)r   r   nonexistentstructure_datatargetr5   subdirr   r   r   indexdatatextfor   r   r   test_tar_dir   s\   

$r   c                  C  s  ddl m}  ttjd }|d }| sJ || |}|d  r%J |tdd  s0J |d  d	ks:J t| |d
 |d |d gksMJ t	|
dg ksXJ t	|
d|d gksfJ t	|d 
dg kssJ t	|d 
d|d d gksJ t	|d|d gksJ t	|d|d gksJ t	|d|d gksJ t	|d d|d d gksJ dS )z
    Test for 'flat' tar file, when it has leading dots in paths
    (can happen if you did smth like tar -czvf ../archive.tar.gz .)
    r   r   r   zwith_leading_dot.tar.gzr   chellozb.txtz	contents
azh*rh   zc/helloN)r_   r   r   r   r   r<   r   sortedr\   listrg   ri   )r   r   r   cpathr   r   r   test_tar_dir_leading_dot  s"   &$(r   r   )r%   r   r   r   )r   r   r   rD   )r   rD   )
__future__r   rb   rs   r'   r   rF   ry   dataclassesr   r   r   r   typingr   r   r	   typing_extensionsr
   utilsr   rG   maybe_slotsr   r   Nodesr-   r.   r   r   r   r   r   r   <module>   s,    	
	 
*I