§
    òyIf}  ã                  ó  — 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  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     úW/var/www/piapp/venv/lib/python3.11/site-packages/virtualenv/app_data/via_disk_folder.pyÚ__init__zAppDataDiskFolder.__init__/   s   € Ý% fÑ-Ô-ˆŒ	ˆ	ˆ	ó    Ústrc                óJ   — t          | ¦  «        j        › d| j        j        › d�S )Nú(ú))ÚtypeÚ__name__r   Úpath©r   s    r   Ú__repr__zAppDataDiskFolder.__repr__2   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__5   s   € Ý�4”9”>Ñ"Ô"Ð"r   c                óv   — t          j        d| j        j        ¦  «         t	          | j        j        ¦  «         d S )Nzreset app data folder %s)ÚloggingÚdebugr   r!   r	   r"   s    r   ÚresetzAppDataDiskFolder.reset8   s1   € ÝŒÐ0°$´)´.ÑAÔAÐAÝ�D”I”NÑ#Ô#Ð#Ð#Ð#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.locked?   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.extractE   sã   è è € à1:Ð1FÕ   ¡¤Ñ-Ô-Ð-ÈDÌIÐX_ÑL_ÕbmÑLmˆØ×Ò˜tœyÑ)Ô)ð 	ð 	Ø”9˜tœyÑ(ˆDØ—;’;‘=”=ð $Ý˜˜dÑ#Ô#Ð#ØˆJˆJˆJð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á8BÂBÂBc                ó   — | j         dz  dz  S )NÚpy_infoÚ1)r   r"   s    r   Ú
py_info_atzAppDataDiskFolder.py_info_atN   s   € àŒy˜9Ñ$ sÑ*Ð*r   c                ó,   — t          | j        |¦  «        S r   )ÚPyInfoStoreDiskr<   ©r   r!   s     r   r:   zAppDataDiskFolder.py_infoR   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_clearU   s1  € àœˆØð 	.ð 	.Ø*Ô/×7Ò7Ñ9Ô9ð .ð .�Ø”? gÒ-Ð-Ø'×4Ò4°X´]ÑCÔCð .ð .Ø#Ÿ?š?Ñ,Ô,ð .Ø$ŸOšOÑ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .øð.ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.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_log_   s+   € Ý/°´	¸GÑ0CÀnÑ0TÐW^Ñ0^ÐadÑ0dÐfrÑ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.houseb   s0   € àŒyŒ~ Ñ'¨'Ñ1ˆØ�
Š
˜4¨$ˆ
Ñ/Ô/Ð/Øˆr   c                ó8   — | j         j        dz  |z  dz  dz  |z  S )NrJ   Úimager;   r.   )r   rO   r4   s      r   Úwheel_imagezAppDataDiskFolder.wheel_imageh   s%   € ØŒyŒ~ Ñ'¨.Ñ8¸7ÑBÀSÑHÈ4Ñ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   rY   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                óR   — || _         || _        || _        g |¢| j        ‘R | _        d S r   )Ú	in_folderÚkeyÚmsgÚfileÚmsg_args)r   rd   re   rf   rh   s        r   r   zJSONStoreDisk.__init__m   s1   € Ø"ˆŒØˆŒØˆŒØ.˜(Ð. D¤IÐ.Ð.ˆŒˆˆr   c                ó0   — | j         j        | j        › d�z  S )NrA   )rd   r!   re   r"   s    r   rg   zJSONStoreDisk.files   s   € àŒ~Ô"¨¬Ð%7Ð%7Ð%7Ñ7Ð7r   c                ó4   — | j                              ¦   «         S r   )rg   r5   r"   s    r   r5   zJSONStoreDisk.existsw   s   € ØŒy×ÒÑ!Ô!Ð!r   c                ón  — d\  }}	 t          j        | j                             d¬¦  «        ¦  «        }t	          j        d| j        | j        ¦  «         |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 from %sT)ÚjsonÚloadsrg   Ú	read_textr'   r(   rf   rh   Ú
ValueErrorÚ	Exceptionr   ÚOSErrorÚremove)r   ÚdataÚ
bad_formats      r   ÚreadzJSONStoreDisk.readz   s  € Ø&Ñˆˆjð	Ý”:˜dœi×1Ò1¸7Ð1ÑCÔCÑDÔDˆDõ ŒMÐ*¨D¬H°d´mÑDÔDÐDØˆKøõ ð 	ð 	ð 	ØˆJˆJˆJÝð 	ð 	ð 	ØˆDð	øøøð
 ð 	Ý�'Ñ"Ô"ð ð Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àˆts)   ‡-A ÁA0Á$	A0Á/A0Â	B*Â*B.Â1B.c                óx   — | j                              ¦   «          t          j        d| j        | j        ¦  «         d S )Nzremoved %s at %s)rg   rE   r'   r(   rf   rh   r"   s    r   ru   zJSONStoreDisk.removeŠ   s5   € ØŒ	×ÒÑÔÐÝŒÐ(¨$¬(°D´MÑBÔBÐBÐBÐBr   c              #  ó‚   K  — | j                              | j        ¦  «        5  d V — d d d ¦  «         d S # 1 swxY w Y   d S r   )rd   r3   re   r"   s    r   r0   zJSONStoreDisk.lockedŽ   s‹   è è € àŒ^×(Ò(¨¬Ñ2Ô2ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¢4´8»8c                óî   — | j         j        }|                     dd¬¦  «         | j                              t	          j        |dd¬¦  «        d¬¦  «         t          j        d| j        | j	        ¦  «         d S )NTrS   é   )Ú	sort_keysÚindentrl   rm   zwrote %s at %s)
rg   ÚparentrV   Ú
write_textro   Údumpsr'   r(   rf   rh   )r   Úcontentr   s      r   ÚwritezJSONStoreDisk.write“   sn   € Ø”Ô!ˆØ�Š˜T¨DˆÑ1Ô1Ð1ØŒ	×Ò�TœZ¨¸4ÈÐJÑJÔJÐU\ÐÑ]Ô]Ð]ÝŒÐ&¨¬°$´-Ñ@Ô@Ð@Ð@Ð@r   NrZ   )r    r[   r\   r   r`   rg   r5   rx   ru   r   r0   rƒ   r+   r   r   rb   rb   l   s¢   € € € € € ð/ð /ð /ð /ð ð8ð 8ñ „Xð8ð"ð "ð "ðð ð ð Cð Cð Cð ðð ñ „^ððAð Að Að Að Ar   rb   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 %s)r   r   ÚencodeÚ	hexdigestÚsuperr   )r   rd   r!   re   Ú	__class__s       €r   r   zPyInfoStoreDisk.__init__›   sW   ø€ Ý•S˜‘Y”Y×%Ò% gÑ.Ô.Ñ/Ô/×9Ò9Ñ;Ô;ˆÝ‰Œ×Ò˜ CÐ)<¸t¸gÑFÔFÐFÐFÐFr   rZ   ©r    r[   r\   r   Ú__classcell__©r‰   s   @r   r>   r>   š   sG   ø€ € € € € ðGð Gð Gð Gð Gð Gð Gð Gð Gð G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 %s)rˆ   r   )r   rd   rN   r‰   s      €r   r   z)EmbedDistributionUpdateStoreDisk.__init__¡   s7   ø€ Ý‰Œ×ÒØØØ-ØˆOñ		
ô 	
ð 	
ð 	
ð 	
r   rZ   rŠ   rŒ   s   @r   rM   rM       s=   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rM   )r   rb   r>   )r]   Ú
__future__r   ro   r'   Úabcr   Ú
contextlibr   r   Úhashlibr   Úvirtualenv.util.lockr   Úvirtualenv.util.pathr	   Úvirtualenv.util.zipappr
   Úvirtualenv.versionr   Úbaser   r   r   rb   r>   rM   Ú__all__r+   r   r   ú<module>r™      s²  ððð ð0 #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *Ø *Ð *Ð *Ð *Ð *Ð *à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð@Pð @Pð @Pð @Pð @P˜ñ @Pô @Pð @PðF+Að +Að +Að +Að +A�L #ñ +Aô +Að +Að\Gð Gð Gð Gð G�mñ Gô Gð Gð
ð 
ð 
ð 
ð 
 }ñ 
ô 
ð 
ðð ð €€€r   