
    .Ph]                    (   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ  ej        e          Z G d de          Z G d dee          Z G d de          Z G d de          Zg dZdS )u  
A rough layout of the current storage goes as:

virtualenv-app-data
├── py - <version> <cache information about python interpreters>
│  └── *.json/lock
├── wheel <cache wheels used for seeding>
│   ├── house
│   │   └── *.whl <wheels downloaded go here>
│   └── <python major.minor> -> 3.9
│       ├── img-<version>
│       │   └── image
│       │           └── <install class> -> CopyPipInstall / SymlinkPipInstall
│       │               └── <wheel name> -> pip-20.1.1-py2.py3-none-any
│       └── embed
│           └── 3 -> json format versioning
│               └── *.json -> for every distribution contains data about newer embed versions and releases
└─── unzip <in zip app we cannot refer to some internal files, so first extract them>
     └── <virtualenv version>
         ├── py_info.py
         ├── debug.py
         └── _virtualenv.py
    )annotationsN)ABC)contextmanagersuppress)sha256)ReentrantFileLock)safe_delete)extract)__version__   )AppDataContentStorec                      e Zd ZdZdZdZddZddZdd	Zd
 Z	d Z
ed             Zed             Zed             Zd Zd Zd Zed             Zd ZdS )AppDataDiskFolderz>Store the application data on the disk within a folder layout.FTreturnNonec                .    t          |          | _        d S N)r   lock)selffolders     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/virtualenv/app_data/via_disk_folder.py__init__zAppDataDiskFolder.__init__1   s    %f--			    strc                J    t          |           j         d| j        j         dS )N())type__name__r   pathr   s    r   __repr__zAppDataDiskFolder.__repr__4   s&    t**%99	9999r   c                4    t          | j        j                  S r   )r   r   r!   r"   s    r   __str__zAppDataDiskFolder.__str__7   s    49>"""r   c                    t                               d| j        j                   t	          | j        j                   d S )Nzreset app data folder %s)LOGGERdebugr   r!   r	   r"   s    r   resetzAppDataDiskFolder.reset:   s3    /@@@DIN#####r   c                    dS )zDo nothing.N r"   s    r   closezAppDataDiskFolder.close>   s      r   c              #  f   K   | j         |z  }|5  |j        V  d d d            d S # 1 swxY w Y   d S r   r   r!   )r   r!   	path_locks      r   lockedzAppDataDiskFolder.lockedA   s      I$	 	! 	!.   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   
&**c              #  4  K   |t           |                      n| j        dz  t          z  }|                    |j                  5  |j        |j        z  }|                                st          ||           |V  d d d            d S # 1 swxY w Y   d S )Nunzip)r   r   r   lock_for_keynamer!   existsr
   )r   r!   	to_folderrootdests        r   r
   zAppDataDiskFolder.extractG   s      1:1F ---DIX_L_bmLmty)) 	 	9ty(D;;== $d###JJJ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8BBBc                    | j         dz  dz  S )Npy_info2)r   r"   s    r   
py_info_atzAppDataDiskFolder.py_info_atP   s    y9$s**r   c                ,    t          | j        |          S r   )PyInfoStoreDiskr<   r   r!   s     r   r:   zAppDataDiskFolder.py_infoT   s    t555r   c                N   | j         }|5  |j                                        D ]g}|j        dk    rZ|                    |j                  5  |                                r|                                 ddd           n# 1 swxY w Y   h	 ddd           dS # 1 swxY w Y   dS )zclear py info..jsonN)r<   r!   iterdirsuffixr3   stemr5   unlink)r   py_info_folderfilenames      r   py_info_clearzAppDataDiskFolder.py_info_clearW   s1    	. 	.*/7799 . .?g--'44X]CC . .#??,, .$OO---. . . . . . . . . . . . . . ..	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s6   AB)B 4B BBBBB!Bc                D    t          | j        dz  |z  dz  dz  |          S )Nwheelembed3) EmbedDistributionUpdateStoreDiskr   )r   distributionfor_py_versions      r   embed_update_logz"AppDataDiskFolder.embed_update_loga   s+    /	G0Cn0TW^0^ad0dfrsssr   c                X    | j         j        dz  dz  }|                    dd           |S )NrJ   houseTparentsexist_ok)r   r!   mkdirr?   s     r   rR   zAppDataDiskFolder.housed   s0    y~''1

4$
///r   c                8    | j         j        dz  |z  dz  dz  |z  S )NrJ   image1r.   )r   rO   r4   s      r   wheel_imagezAppDataDiskFolder.wheel_imagej   s%    y~'.87BSH4OOr   Nr   r   )r   r   )r    
__module____qualname____doc__	transient
can_updater   r#   r%   r)   r,   r   r0   r
   propertyr<   r:   rH   rP   rR   rZ   r+   r   r   r   r   +   s.       HHIJ. . . .: : : :# # # #$ $ $   ! ! ^!
   ^ + + X+6 6 6. . .t t t   X
P P P P Pr   r   c                  Z    e Zd ZddZed             Zd Zd Zd Ze	d             Z
d	 Zd
S )JSONStoreDiskr   r   c                D    || _         || _        g || j        R | _        d S r   )	in_folderkeyfilemsg_args)r   re   rf   rh   s       r   r   zJSONStoreDisk.__init__o   s*    ".(.DI..r   c                0    | j         j        | j         dz  S )NrA   )re   r!   rf   r"   s    r   rg   zJSONStoreDisk.filet   s    ~"%7%7%777r   c                4    | j                                         S r   )rg   r5   r"   s    r   r5   zJSONStoreDisk.existsx   s    y!!!r   c                \   d\  }}	 t          j        | j                            d                    }t	          j        dg| j        R   |S # t          $ r d}Y nt          $ r Y nw xY w|r@t          t                    5  |                                  d d d            n# 1 swxY w Y   d S )N)NFutf-8encodingzgot %s %s from %sT)jsonloadsrg   	read_textr'   r(   rh   
ValueError	Exceptionr   OSErrorremove)r   data
bad_formats      r   readzJSONStoreDisk.read{   s   &j	:di1171CCDDD L,=t}====K  	 	 	JJJ 	 	 	D	
  	'""                ts)   -A A'	A'&A' B!!B%(B%c                f    | j                                          t          j        dg| j        R   d S )Nzremoved %s %s at %s)rg   rE   r'   r(   rh   r"   s    r   ru   zJSONStoreDisk.remove   s7    	*;T];;;;;;r   c              #     K   | j                             | j                  5  d V  d d d            d S # 1 swxY w Y   d S r   )re   r3   rf   r"   s    r   r0   zJSONStoreDisk.locked   s      ^((22 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   488c                    | j         j        }|                    dd           | j                             t	          j        |dd          d           t          j        dg| j        R   d S )NTrS      )	sort_keysindentrl   rm   zwrote %s %s at %s)	rg   parentrV   
write_textro   dumpsr'   r(   rh   )r   contentr   s      r   writezJSONStoreDisk.write   sp    !TD111	TZ4JJJU\]]](94=999999r   Nr[   )r    r\   r]   r   ra   rg   r5   rx   ru   r   r0   r   r+   r   r   rc   rc   n   s        / / / /
 8 8 X8" " "   < < <   ^: : : : :r   rc   c                        e Zd Zd fdZ xZS )r>   r   r   c                    t          t          |                              d                                                    }t	                                          ||d|f           d S )Nrl   zpython info of)r   r   encode	hexdigestsuperr   )r   re   r!   rf   	__class__s       r   r   zPyInfoStoreDisk.__init__   sX    SYY%%g..//99;;C*:D)ABBBBBr   r[   r    r\   r]   r   __classcell__r   s   @r   r>   r>      sG        C C C C C C C C C Cr   r>   c                        e Zd Zd fdZ xZS )rM   r   r   c                R    t                                          ||d|f           d S )Nzembed update of distribution)r   r   )r   re   rN   r   s      r   r   z)EmbedDistributionUpdateStoreDisk.__init__   s7    +\:	
 	
 	
 	
 	
r   r[   r   r   s   @r   rM   rM      s=        
 
 
 
 
 
 
 
 
 
r   rM   )r   rc   r>   )r^   
__future__r   ro   loggingabcr   
contextlibr   r   hashlibr   virtualenv.util.lockr   virtualenv.util.pathr	   virtualenv.util.zipappr
   virtualenv.versionr   baser   r   	getLoggerr    r'   r   rc   r>   rM   __all__r+   r   r   <module>r      s   0 # " " " " "         / / / / / / / /       2 2 2 2 2 2 , , , , , , * * * * * * * * * * * * ' ' ' ' ' ' ' '		8	$	$@P @P @P @P @P @P @P @PF*: *: *: *: *:L# *: *: *:ZC C C C Cm C C C
 
 
 
 
} 
 
 
  r   