bgEdZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZdd lmZd d lmZmZGd d eZGddeeZGddeZGddeZgdZdS)u A rough layout of the current storage goes as: virtualenv-app-data ├── py - │ └── *.json/lock ├── wheel │ ├── house │ │ └── *.whl │ └── -> 3.9 │ ├── img- │ │ └── image │ │ └── -> CopyPipInstall / SymlinkPipInstall │ │ └── -> 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 └── ├── py_info.py ├── debug.py └── _virtualenv.py N)ABCMeta)contextmanager)sha256)ReentrantFileLock) safe_delete)extract) __version__)AppData ContentStoreceZdZdZdZdZdZdZdZdZ dZ e d Z e d Z ed Zd Zd ZdZedZdZdS)AppDataDiskFolderzH Store the application data on the disk within a folder layout. FTc.t||_dSN)rlock)selffolders t/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/virtualenv/app_data/via_disk_folder.py__init__zAppDataDiskFolder.__init__/s%f-- cJt|jd|jjdS)N())type__name__rpathrs r__repr__zAppDataDiskFolder.__repr__2s&t**%99 9999rc4t|jjSr)strrrrs r__str__zAppDataDiskFolder.__str__5s49>"""rcvtjd|jjt |jjdS)Nzreset app data folder %s)loggingdebugrrrrs rresetzAppDataDiskFolder.reset8s1 0$).AAADIN#####rcdS)z do nothingNrs rclosezAppDataDiskFolder.close<src#fK|j|z }|5|jVddddS#1swxYwYdSrrr)rr path_locks rlockedzAppDataDiskFolder.locked?sI$  ! !.  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s &**c#6K|t|}n|jdz tz }||j5|j|jz }|st|||VddddS#1swxYwYdS)Nunzip)rrr lock_for_keynamerexistsr)rr to_folderrootdests rrzAppDataDiskFolder.extractEs  $YY[[11DD9w&4D   ty ) )  9ty(D;;== $d###JJJ                   s 8BBBc|jdz dz S)Npy_info1)rrs r py_info_atzAppDataDiskFolder.py_info_atQsy9$s**rc,t|j|Sr)PyInfoStoreDiskr8rrs rr6zAppDataDiskFolder.py_infoUst555rcN|j}|5|jD]g}|jdkrZ||j5|r|dddn #1swxYwYh ddddS#1swxYwYdS) .jsonN)r8riterdirsuffixr/stemr1unlink)rpy_info_folderfilenames r py_info_clearzAppDataDiskFolder.py_info_clearXs1  . .*/7799 . .?g--'44X]CC..#??,,.$OO---............... . . . . . . . . . . . . . . . . . . .s6AB )B4 BB BB BB!BcDt|jdz |z dz dz |S)Nwheelembed3) EmbedDistributionUpdateStoreDiskr)r distributionfor_py_versions rembed_update_logz"AppDataDiskFolder.embed_update_logbs+/ G0Cn0TW^0^ad0dfrsssrcX|jjdz dz }|dd|S)NrGhouseTparentsexist_ok)rrmkdirr;s rrOzAppDataDiskFolder.housees0y~''1 4$ /// rc8|jjdz |z dz dz |z S)NrGimager7r*)rrLr0s r wheel_imagezAppDataDiskFolder.wheel_imageks%y~'.87BSH4OOrN)r __module__ __qualname____doc__ transient can_updaterrr!r%r(rr,rpropertyr8r6rErMrOrVr'rrrr's%IJ...:::###$$$!!^!   ^ ++X+666...tttX PPPPPrrcXeZdZdZedZdZdZdZe dZ dZ dS) JSONStoreDiskcP||_||_||_||jfz|_dSr) in_folderkeymsgfilemsg_args)rr`rarbrds rrzJSONStoreDisk.__init__ps+" DI</ rc0|jj|jdz S)Nr>)r`rrars rrczJSONStoreDisk.filevs~"%7%7%777rc4|jSr)rcr1rs rr1zJSONStoreDisk.existszsy!!!rc:d\}} tj|jd}t jd|jdg|jR|S#t$rd}Ynt$rYnwxYw|r& | n#t$rYnwxYwdS)N)NFutf-8encodingzgot z from %sT) jsonloadsrc read_textr#r$rbrd ValueError ExceptionremoveOSError)rdata bad_formats rreadzJSONStoreDisk.read}s&j :di1171CCDDD M3333 Ddm D D D DK   JJJ    D         ts*AA A0$ A0/A06B BBcx|jtjd|jdg|jRdS)Nzremoved  at %s)rcrBr#r$rbrdrs rrpzJSONStoreDisk.removesD  1111BDMBBBBBBrc#K|j|j5dVddddS#1swxYwYdSr)r`r/rars rr,zJSONStoreDisk.lockeds ^ ( ( 2 2   EEE                  s 488c|jj}|dd|jt j|dddt jd|jdg|j RdS) NTrP) sort_keysindentrhrizwrote rv) rcparentrS write_textrkdumpsr#r$rbrd)rcontentrs rwritezJSONStoreDisk.writes}! TD 111 TZ4JJJU\]]] /tx///@$-@@@@@@rN) rrWrXrr\rcr1rtrprr,rr'rrr^r^os000 88X8""""CCC^AAAAArr^) metaclassceZdZfdZxZS)r:ctt|d}t ||d|fdS)Nrhzpython info of %s)rr encode hexdigestsuperr)rr`rra __class__s rrzPyInfoStoreDisk.__init__sWSYY%%g..//99;; C)rs0 %%%%%%222222,,,,,,************''''''''EPEPEPEPEPEPEPEPP,A,A,A,A,ALG,A,A,A,A^GGGGGmGGG      }      r