ó
    Ñ]jk  ã                  óH  • S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJr  \(       a  SSKJr  SSKJr  \R<                  " \5      r  " S S\5      r! " S S\\5      r" " S S\"5      r# " S S\"5      r$/ SQr%g)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)ÚTYPE_CHECKINGÚAny)ÚReentrantFileLock)Úsafe_delete)Úextract)Ú__version__é   )ÚAppDataÚContentStore)Ú	Generator)ÚPathc                  óÊ   • \ rS rSrSrSrSrSS jrSS jrSS jr	SS jr
SS	 jr\SS
 j5       r\SS j5       r\SS j5       rSS jrSS jrSS jr\SS j5       rSS jrSrg)ÚAppDataDiskFolderé2   z>Store the application data on the disk within a folder layout.FTc                ó$   • [        U5      U l        g ©N)r
   Úlock)ÚselfÚfolders     Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/virtualenv/app_data/via_disk_folder.pyÚ__init__ÚAppDataDiskFolder.__init__8   s   € Ü% fÓ-ˆ�	ó    c                ó`   • [        U 5      R                   SU R                  R                   S3$ )NÚ(Ú))ÚtypeÚ__name__r   Úpath©r   s    r   Ú__repr__ÚAppDataDiskFolder.__repr__;   s)   € Ü�t“*×%Ñ%Ð& a¨¯	©	¯©Ð'7°qÐ9Ð9r   c                ó@   • [        U R                  R                  5      $ r   )Ústrr   r$   r%   s    r   Ú__str__ÚAppDataDiskFolder.__str__>   s   € Ü�4—9‘9—>‘>Ó"Ð"r   c                ó–   • [         R                  SU R                  R                  5        [	        U R                  R                  5        g )Nzreset app data folder %s)ÚLOGGERÚdebugr   r$   r   r%   s    r   ÚresetÚAppDataDiskFolder.resetA   s)   € Ü�‰Ð/°·±·±Ô@Ü�D—I‘I—N‘NÕ#r   c                ó   • g)zDo nothing.N© r%   s    r   ÚcloseÚAppDataDiskFolder.closeE   s   � r   c              #  ó~   #   • U R                   U-  nU   UR                  v •  S S S 5        g ! , (       d  f       g = f7fr   ©r   r$   )r   r$   Ú	path_locks      r   ÚlockedÚAppDataDiskFolder.lockedH   s)   é € à—I‘I Ñ$ˆ	ÚØ—.‘.Ò ÷ �YŽYüs   ‚=”,£	=¬
:¶=c              #  óB  #   • Ub  [        U" 5       5      OU R                  S-  [        -  nUR                  UR                  5         UR
                  UR                  -  nUR                  5       (       d  [        X5        Uv •  S S S 5        g ! , (       d  f       g = f7f)NÚunzip)r
   r   r   Úlock_for_keyÚnamer$   Úexistsr   )r   r$   Ú	to_folderÚrootÚdests        r   r   ÚAppDataDiskFolder.extractN   sp   é € à1:Ñ1FÔ ¡£Ô-ÈDÏIÉIÐX_ÑL_ÔbmÑLmˆØ×Ñ˜tŸy™yÕ)Ø—9‘9˜tŸy™yÑ(ˆDØ—;‘;—=‘=Ü˜Ô#ØŠJ÷	 *×)Ö)üs   ‚ABÁ>BÂ	BÂ
BÂBc                ó&   • U R                   S-  S-  $ )NÚpy_infoÚ4©r   r%   s    r   Ú
py_info_atÚAppDataDiskFolder.py_info_atW   s   € à�y‰y˜9Ñ$ sÑ*Ð*r   c                ó.   • [        U R                  U5      $ r   )ÚPyInfoStoreDiskrG   ©r   r$   s     r   rD   ÚAppDataDiskFolder.py_info[   s   € Ü˜tŸ™°Ó5Ð5r   c                óp  • U R                   nU   UR                  R                  5        H^  nUR                  S:X  d  M  UR	                  UR
                  5         UR                  5       (       a  UR                  5         SSS5        M`     SSS5        g! , (       d  f       Mz  = f! , (       d  f       g= f)zclear py info.ú.jsonN)rG   r$   ÚiterdirÚsuffixr<   Ústemr>   Úunlink)r   Úpy_info_folderÚfilenames      r   Úpy_info_clearÚAppDataDiskFolder.py_info_clear^   s~   € àŸ™ˆÚØ*×/Ñ/×7Ñ7Ö9�Ø—?‘? gÕ-Ø'×4Ñ4°X·]±]ÕCØ#Ÿ?™?×,Ñ,Ø$ŸO™OÔ-÷ DÑCñ :÷ ˆ^÷ DÖCú÷ �^ús(   �,B'¿B'Á&BÂ B'Â
B$ÂB'Â'
B5c                óF   • [        U R                  S-  U-  S-  S-  U5      $ )NÚwheelÚembedÚ3)Ú EmbedDistributionUpdateStoreDiskr   )r   ÚdistributionÚfor_py_versions      r   Úembed_update_logÚ"AppDataDiskFolder.embed_update_logh   s*   € Ü/°·	±	¸GÑ0CÀnÑ0TÐW^Ñ0^ÐadÑ0dÐfrÓsÐsr   c                ó^   • U R                   R                  S-  S-  nUR                  SSS9  U$ )NrX   ÚhouseT©ÚparentsÚexist_ok)r   r$   ÚmkdirrK   s     r   ra   ÚAppDataDiskFolder.housek   s.   € à�y‰y�~‰~ Ñ'¨'Ñ1ˆØ�
‰
˜4¨$ˆ
Ñ/Øˆr   c                óL   • U R                   R                  S-  U-  S-  S-  U-  $ )NrX   ÚimageÚ1r6   )r   r]   r=   s      r   Úwheel_imageÚAppDataDiskFolder.wheel_imageq   s)   € Ø�y‰y�~‰~ Ñ'¨.Ñ8¸7ÑBÀSÑHÈ4ÑOÐOr   rF   N)r   r)   ÚreturnÚNone)rl   r)   ©rl   rm   )r$   r   rl   úGenerator[None])r$   r   r?   zPath | Nonerl   zGenerator[Path])rl   r
   )r$   r   rl   rJ   )r\   r)   r]   r)   rl   r[   ©rl   r   )r]   r)   r=   r)   rl   r   )r#   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	transientÚ
can_updater   r&   r*   r/   r3   r   r8   r   ÚpropertyrG   rD   rU   r^   ra   rj   Ú__static_attributes__r2   r   r   r   r   2   sŽ   † ÙHà€IØ€Jô.ô:ô#ô$ôð ó!ó ð!ð
 óó ðð ó+ó ð+ô6ô.ôtð óó ð÷
Pr   r   c                  ón   • \ rS rSrSS jr\SS j5       rSS jrSS jrSS jr	\
SS j5       rSS jrS	rg
)ÚJSONStoreDiskéu   c                óH   • Xl         X l        / UQU R                  P7U l        g r   )Ú	in_folderÚkeyÚfileÚmsg_args)r   r}   r~   r€   s       r   r   ÚJSONStoreDisk.__init__v   s!   € Ø"ŒØŒØ.˜(Ð. D§I¡IÑ.ˆ�r   c                óN   • U R                   R                  U R                   S3-  $ )NrN   )r}   r$   r~   r%   s    r   r   ÚJSONStoreDisk.file{   s"   € à�~‰~×"Ñ"¨¯© z°Ð%7Ñ7Ð7r   c                ó6   • U R                   R                  5       $ r   )r   r>   r%   s    r   r>   ÚJSONStoreDisk.exists   s   € Ø�y‰y×ÑÓ!Ð!r   c                ój  • Su  p [         R                  " U R                  R                  SS95      n[        R
                  " S/U R                  Q76   U$ ! [         a    Sn O[         a     Of = fU(       a:  [        [        5         U R                  5         S S S 5        g ! , (       d  f       g = fg )N)NFúutf-8©Úencodingzgot %s %s from %sT)ÚjsonÚloadsr   Ú	read_textr-   r.   r€   Ú
ValueErrorÚ	Exceptionr   ÚOSErrorÚremove)r   ÚdataÚ
bad_formats      r   ÚreadÚJSONStoreDisk.read‚   s™   € Ø&Ñˆð	Ü—:’:˜dŸi™i×1Ñ1¸7Ð1ÐCÓDˆDô �LŠLÐ,Ð=¨t¯}©}Ó=ØˆKøô ó 	ØŠJÜó 	Ùð	úö
 Üœ'Õ"Ø—‘”÷ #à÷ #Ô"àúˆts#   †-A ÁA0Á$	A0Á/A0Â	B#Â#
B1c                óz   • U R                   R                  5         [        R                  " S/U R                  Q76   g )Nzremoved %s %s at %s)r   rR   r-   r.   r€   r%   s    r   r�   ÚJSONStoreDisk.remove’   s(   € Ø�	‰	×ÑÔÜ�ŠÐ*Ð;¨T¯]©]Ô;r   c              #  ó’   #   • U R                   R                  U R                  5         S v •  S S S 5        g ! , (       d  f       g = f7fr   )r}   r<   r~   r%   s    r   r8   ÚJSONStoreDisk.locked–   s)   é € à�^‰^×(Ñ(¨¯©Õ2Û÷ 3×2Ö2üs   ‚&A¨6­	A¶
AÁ Ac                óî   • U R                   R                  nUR                  SSS9  U R                   R                  [        R
                  " USSS9SS9  [        R                  " S/U R                  Q76   g )NTrb   é   )Ú	sort_keysÚindentr‡   rˆ   zwrote %s %s at %s)	r   Úparentre   Ú
write_textrŠ   Údumpsr-   r.   r€   )r   Úcontentr   s      r   ÚwriteÚJSONStoreDisk.write›   s\   € Ø—‘×!Ñ!ˆØ�‰˜T¨DˆÑ1Ø�	‰	×ÑœTŸZšZ¨¸4ÈÑJÐU\ÐÑ]Ü�ŠÐ(Ð9¨4¯=©=Ô9r   )r}   r~   r€   N)r}   r
   r~   r)   r€   ztuple[str, ...]rl   rm   rp   )rl   Úbool)rl   r	   rn   )rl   ro   )r    r	   rl   rm   )r#   rq   rr   rs   r   rw   r   r>   r“   r�   r   r8   r¡   rx   r2   r   r   rz   rz   u   sC   † ô/ð
 ó8ó ð8ô"ôô <ð óó ð÷:r   rz   c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )rJ   é¢   c                óŒ   >• [        [        U5      R                  S5      5      R                  5       n[        TU ]  XSU45        g )Nr‡   zpython info of)r   r)   ÚencodeÚ	hexdigestÚsuperr   )r   r}   r$   r~   Ú	__class__s       €r   r   ÚPyInfoStoreDisk.__init__£   s:   ø€ Ü”S˜“Y×%Ñ% gÓ.Ó/×9Ñ9Ó;ˆÜ‰Ñ˜Ð*:¸DÐ)AÕBr   r2   )r}   r
   r$   r   rl   rm   ©r#   rq   rr   rs   r   rx   Ú__classcell__©rª   s   @r   rJ   rJ   ¢   s   ø† ÷Cõ Cr   rJ   c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )r[   é¨   c                ó,   >• [         TU ]  UUSU45        g )Nzembed update of distribution)r©   r   )r   r}   r\   rª   s      €r   r   Ú)EmbedDistributionUpdateStoreDisk.__init__©   s   ø€ Ü‰ÑØØØ+¨\Ð:õ	
r   r2   )r}   r
   r\   r)   rl   rm   r¬   r®   s   @r   r[   r[   ¨   s   ø† ÷
õ 
r   r[   )r   rz   rJ   )&rt   Ú
__future__r   rŠ   ÚloggingÚabcr   Ú
contextlibr   r   Úhashlibr   Útypingr   r	   Úvirtualenv.util.lockr
   Úvirtualenv.util.pathr   Úvirtualenv.util.zipappr   Úvirtualenv.versionr   Úbaser   r   Úcollections.abcr   Úpathlibr   Ú	getLoggerr#   r-   r   rz   rJ   r[   Ú__all__r2   r   r   Ú<module>rÂ      sŠ   ðñõ4 #ã Û Ý ß /Ý ß %å 2Ý ,Ý *Ý *ç 'æÝ)Ýà	×	Ò	˜8Ó	$€ô@P˜ô @PôF*:�L #ô *:ôZC�mô Cô
 }ô 
ò�r   