Ë 9–/*ñ–’)ã ó—dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZdd lmZerdd l m!Z!m"Z"ed e#«Z$ee$d fZ%gd ¢Z&ejNdk(Z(e(rdndZ)ejTdejVejXz«Z-e dgd¢«Z.ejTdejVejXz«Z/ee%d«Z0de#defd„Z1de#de#fd„Z2de#de.fd„Z3dedede#dee#e4ffd „Z5d0d!„Z6ejnd"ed#e#deefd$„«Z8d%„fd&eee$efd'ee$gee#fdefd(„Z9d)e#deee#e#e#d*ffd+„Z:de4fd,„Z;d-ee#d.fddfd/„Z.+?) -(?P.*?) (?:-(?P\d[^-]*?))? -(?P.+?-.+?-.+?) \.whl $ r)Ú distributionÚversionÚ build_tagÚtagzZ (?P[\w.]+)\s* (:\s*(?P[\w.]+))\s* (?P\[.*\])?\s*$ )ÚpurelibÚplatlibÚheadersÚscriptsÚdataÚcontentsÚreturncód—tt¬«}|j|«|j«S)zìParse :pep:`376` ``PKG-INFO``-style metadata files. ``METADATA`` and ``WHEEL`` files (as per :pep:`427`) use the same syntax and can also be parsed using this function. :param contents: The entire contents of the file )Úpolicy)rrÚfeedÚclose)r*Ú feed_parsers ú4/usr/lib/python3.12/site-packages/installer/utils.pyrrUs+€ô¤HÔ-€KØ×Ñ�XÔØ × Ñ Ó ÐóÚnamecóL—tjdd|«j«S)ziCanonicalize a project name according to PEP-503. :param name: The project name to canonicalize z[-_.]+Ú-)ÚreÚsubÚlower)r3s r1Úcanonicalize_namer9bs €ô �6‰6�)˜S $Ó '× -Ñ -Ó /Ð/r2Úfilenamecóx—tj|«}|std|›�«‚t|j «ŽS)zfParse a wheel filename, into it's various components. :param filename: The filename to parse zNot a valid wheel filename: )Ú_WHEEL_FILENAME_REGEXÚmatchÚ ValueErrorrÚgroups)r:Ú wheel_infos r1rrjs>€ô '×,Ñ,¨XÓ6€JÙ ÜÐ7¸°zÐBÓCÐCÜ ˜*×+Ñ+Ó-Ð .Ð.r2ÚsourceÚdestÚhash_algorithmcóJ—tj|«}d} |jt«}|sn1|j |«|j |«|t |«z }ŒItj|j««jd«jd«|fS)aƒCopy a buffer while computing the content's hash and size. Copies the source buffer into the destination buffer while computing the hash of the contents. Adapted from :any:`shutil.copyfileobj`. :param source: buffer holding the source data :param dest: destination buffer :param hash_algorithm: hashing algorithm :return: size, hash digest of the contents rÚasciiÚ=) ÚhashlibÚnewÚreadÚ _COPY_BUFSIZEÚupdateÚwriteÚlenÚbase64Úurlsafe_b64encodeÚdigestÚdecodeÚrstrip)rArBrCÚhasherÚsizeÚbufs r1rrus�€ô �[‰[˜Ó (€FØ €DØ Ø�k‰kœ-Ó(ˆÙØ Ø� ‰ �cÔØ � ‰ �3ŒØ ”�C“шð ô × #Ñ # F§M¡M£OÓ 4× ;Ñ ;¸GÓ D× KÑ KÈCÓ PÐRVÐ VÐVr2có.—tjdk7rydtjj «vrydtjj «vrydtjj «vrytj d k(ry t d «‚) z.Get the launcher kind for the current machine.r ÚposixÚamd64z win-amd64z(arm64)z win-arm64z(arm)zwin-armÚwin32zwin-ia32z&Unknown launcher kind for this machine)Úosr3Úsysr"r8ÚplatformÚNotImplementedError©r2r1rr’ss€ä ‡w�w�$‚Øà”#—+‘+×#Ñ#Ó%Ñ%ØØ”C—K‘K×%Ñ%Ó'Ñ'ØØ”#—+‘+×#Ñ#Ó%Ñ%ØÜ ‡|�|�wÒØä ÐFÓ GÐGr2ÚstreamÚ interpreterc#óÒK—|jd«|jd«dk(r©tj«}|j d|›d�j ««|jd«|j « |jt«}|sn|j |«Œ*|jd«|–—|j«y|jd«|–—y­w)aReplace ``#!python`` shebang in a stream with the correct interpreter. :param stream: stream to modify :param interpreter: "correct interpreter" to substitute the shebang with :returns: A context manager, that provides an appropriately modified stream. rés#!pythonz#!Ú N) ÚseekrIÚioÚBytesIOrLÚencodeÚreadlinerJr/)r_r`Ú new_streamrUs r1rr£s½èø€ð ‡K�K�„NØ ‡{�{�1ƒ~˜Ò$Ü—Z‘Z“\ˆ à×ј2˜k˜]¨"Ð-×4Ñ4Ó6Ô7à� ‰ �AŒØ�‰ÔØØ—+‘+œmÓ,ˆCÙØØ × Ñ ˜SÔ !ð ð �‰˜ÔØÒØ×ÑÕà� ‰ �AŒØ‹ ùs‚C%C'có—y)Nr^)Ú_s r1ÚrlÃs€ÀTr2ÚrecordsÚprefix_for_schemecó,—tjtj«ddd¬«}tj|ddd¬«}|D]+\}}|j |j ||«««Œ-|jd «|j«S) a?Construct a RECORD file. :param records: ``records`` as passed into :any:`WheelDestination.finalize_installation` :param prefix_for_scheme: function to get a prefix to add for RECORD entries, within a scheme :return: A stream that can be written to file. Must be closed by the caller. zutf-8TÚ)ÚencodingÚ write_throughÚnewlineÚ,Ú"rc)Ú delimiterÚ quotecharÚlineterminatorr) reÚ TextIOWrapperrfÚcsvÚwriterÚwriterowÚto_rowrdÚdetach)rmrnr_r{ÚschemeÚrecords r1rrÁsy€ô× Ñ Ü � ‰ ‹ ˜w°dÀBô€Fô�Z‰Z˜¨#¸ÈTÔ R€FÛ!‰ˆ�Ø�‰˜Ÿ ™ Ñ&7¸Ó&?Ó@ÕAð"à ‡K�K�„NØ �=‰=‹?Ðr2Útextrc #óîK—td¬«}t|_|j|«|j «D]¶}|dvrŒ|j |«D]›\}}t |t«sJ‚tj|«}|sJ‚|jd«}t |t«sJ‚|jd«}|€J‚t |t«sJ‚td|dtd« «}||||f–—Œ�Œ¸y­w) zÀParse ``entry_points.txt``-style files. :param text: entire contents of the file :return: name of the script, module to use, attribute to call, kind of script (cli / gui) rF)Ú delimiters)Úconsole_scriptsÚ gui_scriptsÚmoduleÚattrsNrÚ_scripts) rÚstrÚ optionxformÚ read_stringÚsectionsÚitemsÚ isinstanceÚ_ENTRYPOINT_REGEXr=ÚgrouprrM) r�ÚconfigÚsectionr3Úvaluer=r†r‡Úscript_sections r1rrØsõèø€ô SÔ )€FÜ€FÔØ ×Ñ�tÔà—?‘?Ö$ˆØ Ð<Ñ <Ø à!Ÿ<™<¨Ö0‰KˆD�%ܘd¤CÔ(Ð (Ð(Ü%×+Ñ+¨EÓ2ˆEÙˆL�5à—[‘[ Ó*ˆFܘf¤cÔ*Ð *Ð*à—K‘K Ó(ˆEàÐ$Ð $Ð$ܘe¤SÔ)Ð )Ð)ä! /°7Ð;M¼cÀ*»oÐ=MÐ3NÓOˆNà˜  ~Ð5Ó 5ñ1ñ %ùs‚C3C5cóZ—tjd«}tj|«|S)zBGet the current umask which involves having to set it temporarily.r)rZÚumask)Úmasks r1Ú_current_umaskr˜ús€ä �8‰8�A‹;€D܇H�HˆT„NØ €Kr2Úpathzos.PathLike[str]cóN—tj|dt«zdz«y)z.Make the file at the provided path executable.iÿéIN)rZÚchmodr˜)r™s r1rrs €ä‡H�HˆT�Eœ^Ó-Ð-Ñ-°Ñ5Õ7r2)r+r)=Ú__doc__rNÚ contextlibrzrGrerZr6r[Ú collectionsrÚ configparserrÚ email.messagerÚ email.parserrÚ email.policyrÚtypingrr r r r r rrrrÚinstaller.recordsrÚinstaller.scriptsrrr‰rÚ AllSchemesÚ__all__r3Ú_WINDOWSrJÚcompileÚVERBOSEÚUNICODEr<rr�rrr9rÚintrrÚcontextmanagerrrrr˜rr^r2r1Úr¯s5ðÙCã ÛÛ ÛÛ Û Û Û Ý"Ý%Ý!Ý#Ý!÷ ÷ ÷ õ*áß=á �˜3Ó €Ø �6˜3�;Ñ € ò €ð �7‰7�d‰?€Ù'‘ ¨Y€ ð#˜Ÿ ™ ðð‡J�J�—‘Ñó ÐñØÒDó€ ð �B—J‘Jðð ‡J�J�—‘Ñó Ðñ�JÐ TÓU€ ð  #ð ¨'ó ð0˜Cð0 Có0ð/ 3ð/¨=ó/ðWØ ðWà ðWððWð ˆ3�ˆ8�_ó Wó:Hð" ×Ñð˜ð¨sð°xÀÑ7Iòóðñ>