R`idZddlZddlmZddlmZddlmZddlm Z m Z ddl m Z ddl mZd Zej eZd e d ed eeeffd Zde d ed efdZde ded efdZde ded efdZded eedffdZdeedfd ed dfdZy)z0Support functions for working with wheel files. N)Message)Parser)Tuple) BadZipFileZipFile)canonicalize_name)UnsupportedWheel)r wheel_zipnamereturnc  t||}t||}t|}t ||||fS#t$r)}tdj |t |d}~wwxYw)zExtract information from the provided wheel, ensuring it meets basic standards. Returns the name of the .dist-info directory and the parsed WHEEL metadata. z{} has an invalid wheel, {}N)wheel_dist_info_dirwheel_metadata wheel_versionr formatstrcheck_compatibility)r r info_dirmetadataversiones /builddir/build/BUILDROOT/alt-python312-pip-23.3.1-3.el8.x86_64/opt/alt/python312/lib/python3.12/site-packages/pip/_internal/utils/wheel.py parse_wheelrsr S&y$7!)X6)& X  S<CCD#a&QRRSs#5 A'$A""A'sourcec|jDchc]}|jddd}}|Dcgc]}|jds|}}|s tdt |dkDr)tdj dj ||d}t|}t|}|j|stdj |||Scc}wcc}w) zReturns the name of the contained .dist-info directory. Raises AssertionError or UnsupportedWheel if not found, >1 found, or it doesn't match the provided name. /r rz .dist-infoz.dist-info directory not foundz)multiple .dist-info directories found: {}z, z2.dist-info directory {!r} does not start with {!r}) namelistsplitendswithr lenrjoinr startswith) rr psubdirss info_dirsr info_dir_namecanonical_names rrr&s,2??+<=+ >tyy?S T  |H%h/M&t,N  # #N 3 @ G G.   O/>@sCC$ C$pathc |j|S#tttf$r}t d|d|d}~wwxYw)Nzcould not read z file: )readrKeyError RuntimeErrorr )rr*rs rread_wheel_metadata_filer/GsJG{{4   , /GuEFFGs=8= dist_info_dirc|d}t||} |j}t j |S#t$r}td|d|d}~wwxYw)ziReturn the WHEEL metadata of an extracted wheel, if possible. Otherwise, raise UnsupportedWheel. z/WHEELzerror decoding z: N)r/decodeUnicodeDecodeErrorr rparsestr)rr0r*wheel_contents wheel_textrs rrrPsq_F #D-fd;NB#**,  8  Z (( B1%@AABs< AAA wheel_data.c|d}| td|j} ttt|j dS#t $rtd|wxYw)zbGiven WHEEL metadata, return the parsed Wheel-Version. Otherwise, raise UnsupportedWheel. z Wheel-VersionzWHEEL is missing Wheel-Version.zinvalid Wheel-Version: )r striptuplemapintr ValueError)r7 version_textrs rrrcsso.L?@@  "GFSgmmC0122 F!8 DEEFs 'A A$rc  |dtdkDr8tdj|djt t ||tkDr4t jddjt t |yy)aRaises errors or warns if called with an incompatible Wheel-Version. pip should refuse to install a Wheel-Version that's a major series ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when installing a version only minor version ahead (e.g 1.2 > 1.1). version: a 2-tuple representing a Wheel-Version (Major, Minor) name: name of wheel or package to raise exception about :raises UnsupportedWheel: when an incompatible Wheel-Version is given rzB{}'s Wheel-Version ({}) is not compatible with this version of pipr9z*Installing from a newer Wheel-Version (%s)N)VERSION_COMPATIBLEr rr"r<rloggerwarning)rr s rrrssvqz&q)) VD#((3sG+<"=>   % % 8 HHSg& '  &)__doc__logging email.messager email.parserrtypingrzipfilerrpip._vendor.packaging.utilsrpip._internal.exceptionsr rA getLogger__name__rBrrrbytesr/rr=rrrDrrQs!'95   8 $7#%W 2E$ssBGWGCGEG)7)3)7)& Fg F%S/ F  sCx   rD