403Webshell
Server IP : 127.0.0.1  /  Your IP : 216.73.216.109
Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10
System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64
User : SERVERWEB ( 0)
PHP Version : 8.1.10
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : OFF |  Perl : OFF |  Python : OFF |  Sudo : OFF |  Pkexec : OFF
Directory :  C:/cygwin64/lib/python3.9/site-packages/pip/_vendor/distlib/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : C:/cygwin64/lib/python3.9/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-39.pyc
a

X��e���@s�ddlmZddlZddlZddlZddlmZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlmZmZmZdd	l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*dd
l+m,Z,m-Z-e	�.e/�Z0da1e2ed��r,dZ3n*ej4�5d
��r@dZ3nej4dk�rRdZ3ndZ3e�6d�Z7e7�sxdej8dd�Z7de7Z9e3e7Z:e*��;dd��;dd�Z<e�6d�Z=e=�r�e=�5d��r�e=�;dd��>d�dZ=ndd�Z?e?�Z=[?e�@dejAejBB�ZCe�@dejAejBB�ZDe�@d�ZEe�@d �ZFd!ZGd"ZHe
jId#k�r<d$d%�ZJnd&d%�ZJej8dd'k�r^ddlKZKndZKddlLZMddlNZMd(d)�ZOd*d+�ZPGd,d-�d-eQ�ZReR�ZSGd.d/�d/eQ�ZTd0d1�ZUd2d3�ZVeV�ZW[Vd6d4d5�ZXdS)7�)�unicode_literalsN)�message_from_file�)�__version__�DistlibException)�	sysconfig�ZipFile�fsdecode�	text_type�filter)�InstalledDistribution)�Metadata�WHEEL_METADATA_FILENAME�LEGACY_METADATA_FILENAME)
�FileOperator�convert_path�	CSVReader�	CSVWriter�Cache�cached_property�get_cache_base�read_exports�tempdir�get_platform)�NormalizedVersion�UnsupportedVersionErrorZpypy_version_info�pp�javaZjyZcliZip�cpZpy_version_nodotz%s%s��py�-�_�.ZSOABIzcpython-cCs�dtg}t�d�r|�d�tdkr�tjdd�}|dkr�t�d�}|durPd}|r^|�d�|d	kr�t�d
�}|dks�|dur�tjdkr�|�d
�d�|�S)NrZPy_DEBUG�dr)��Z
WITH_PYMALLOCT�m)r%r%ZPy_UNICODE_SIZE�i���u�)	�
VER_SUFFIXr�get_config_var�append�
IMP_PREFIX�sys�version_info�
maxunicode�join)�parts�viZwpm�us�r6�=/usr/lib/python3.9/site-packages/pip/_vendor/distlib/wheel.py�_derive_abi;s 





r8zz
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+(\.\w+)*)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s
\s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons	#!pythonw�/cCs|S�Nr6��or6r6r7�<lambda>h�r=cCs|�tjd�S)Nr9)�replace�os�sepr;r6r6r7r=jr>r%cCs"trdd�t��D�StjjSdS)NcSsg|]}|d�qS)rr6��.0�sr6r6r7�
<listcomp>vr>z!_get_suffixes.<locals>.<listcomp>)�impZget_suffixes�	importlib�	machinery�EXTENSION_SUFFIXESr6r6r6r7�
_get_suffixestsrJcCsHtrt�||�Stj�||�}tj�|�}|tj|<|j�	|�|SdSr:)
rFZload_dynamicrG�util�spec_from_file_location�module_from_specr/�modules�loader�exec_module)�name�path�spec�moduler6r6r7�
_load_dynamic{s
rUc@s6eZdZdd�Zdd�Zdd�Zddd	�Zd
d�ZdS)
�MountercCsi|_i|_dSr:)�
impure_wheels�libs��selfr6r6r7�__init__�szMounter.__init__cCs||j|<|j�|�dSr:)rWrX�update)rZ�pathname�
extensionsr6r6r7�add�s
zMounter.addcCs0|j�|�}|D]\}}||jvr|j|=qdSr:)rW�poprX)rZr]r^�k�vr6r6r7�remove�s
zMounter.removeNcCs||jvr|}nd}|Sr:)rX)rZ�fullnamerR�resultr6r6r7�find_module�s
zMounter.find_modulecCsh|tjvrtj|}nN||jvr,td|��t||j|�}||_|�dd�}t|�dkrd|d|_|S)Nzunable to find extension for %sr#rr)	r/rNrX�ImportErrorrU�
__loader__�rsplit�len�__package__)rZrdrer3r6r6r7�load_module�s


zMounter.load_module)N)�__name__�
__module__�__qualname__r[r_rcrfrlr6r6r6r7rV�s

rVc@s�eZdZdZdZdZd4dd�Zedd	��Zed
d��Z	edd
��Z
edd��Zdd�Z
edd��Zdd�Zd5dd�Zdd�Zdd�Zdd�Zd6dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd7d,d-�Zd.d/�Zd0d1�Zd8d2d3�ZdS)9�Wheelz@
    Class to build and install from Wheel files (PEP 427).
    )rrZsha256NFcCs8||_||_d|_tg|_dg|_dg|_t��|_	|durRd|_
d|_|j|_
n�t�|�}|r�|�d�}|d|_
|d�d	d
�|_|d|_|j|_
n�tj�|�\}}t�|�}|s�td|��|r�tj�|�|_	||_
|�d�}|d|_
|d|_|d|_|d
�d�|_|d�d�|_|d�d�|_dS)zB
        Initialise an instance using a (valid) filename.
        r*�none�anyNZdummyz0.1ZnmZvnr"r!ZbnzInvalid name or filename: %rr r#Zbi�ar)�signZ
should_verify�buildver�PYVER�pyver�abi�archr@�getcwd�dirnamerQ�version�filenameZ	_filename�NAME_VERSION_RE�match�	groupdictr?rR�split�FILENAME_REr�abspath)rZr}rt�verifyr'�infor{r6r6r7r[�sD







�



zWheel.__init__cCs^|jrd|j}nd}d�|j�}d�|j�}d�|j�}|j�dd�}d|j|||||fS)zJ
        Build and return a filename from the various components.
        r!r*r#r"z%s-%s%s-%s-%s-%s.whl)rur2rwrxryr|r?rQ)rZrurwrxryr|r6r6r7r}�s�zWheel.filenamecCstj�|j|j�}tj�|�Sr:)r@rRr2r{r}�isfile)rZrRr6r6r7�exists�szWheel.existsccs4|jD](}|jD]}|jD]}|||fVqqqdSr:)rwrxry)rZrwrxryr6r6r7�tags�s


z
Wheel.tagsc
Cstj�|j|j�}d|j|jf}d|}t�d�}t	|d���}|�
|�ttg}d}|D]z}zbt
�||�}	|�|	��8}
||
�}t|d�}|r�Wd�Wq�Wd�n1s�0YWqZty�YqZ0qZ|s�tdd�|���Wd�n1�s0Y|S)N�%s-%s�%s.dist-info�utf-8�r)Zfileobjz8Invalid wheel, because metadata is missing: looked in %sz, )r@rRr2r{r}rQr|�codecs�	getreaderr�get_wheel_metadatarr�	posixpath�openr
�KeyError�
ValueError)rZr]�name_ver�info_dir�wrapper�zfZfnsre�fn�metadata_filename�bf�wfr6r6r7�metadata�s.


4�&zWheel.metadatacCsld|j|jf}d|}t�|d�}|�|��&}t�d�|�}t|�}Wd�n1sZ0Yt|�S)Nr�r��WHEELr�)	rQr|r�r2r�r�r�r�dict)rZr�r�r�r�r�r��messager6r6r7r�s&zWheel.get_wheel_metadatacCsJtj�|j|j�}t|d��}|�|�}Wd�n1s<0Y|S)Nr�)r@rRr2r{r}rr�)rZr]r�rer6r6r7r�&s(z
Wheel.infocCs�t�|�}|r||��}|d|�||d�}}d|��vrBt}nt}t�|�}|rfd|��d}nd}||}||}nT|�d�}|�d�}	|dks�||	kr�d}
n|||d�d	kr�d	}
nd}
t|
|}|S)
Nspythonw� ���r>�
�
rrs
)	�
SHEBANG_REr�end�lower�SHEBANG_PYTHONW�SHEBANG_PYTHON�SHEBANG_DETAIL_RE�groups�find)rZ�datar'r�ZshebangZdata_after_shebangZshebang_python�argsZcrZlfZtermr6r6r7�process_shebang-s,




zWheel.process_shebangcCsf|dur|j}ztt|�}Wnty:td|��Yn0||���}t�|��d��	d�}||fS)NzUnsupported hash algorithm: %r�=�ascii)
�	hash_kind�getattr�hashlib�AttributeErrorr�digest�base64Zurlsafe_b64encode�rstrip�decode)rZr�r�Zhasherrer6r6r7�get_hashKs�zWheel.get_hashcCsXt|�}|�|ddf�t|��$}|D]}|�|�q&Wd�n1sJ0YdS)Nr*)�listr-rZwriterow)rZ�recordsZrecord_pathZarchive_record_path�writer�rowr6r6r7�write_recordWs

zWheel.write_recordc
	Cs�g}|\}}|D]d\}}t|d��}	|	��}
Wd�n1s@0Yd|�|
�}tj�|�}|�|||f�qtj�|d�}ttj�|d��}|�	|||�|�||f�dS)N�rbz%s=%s�RECORD)
r��readr�r@rR�getsizer-r2�to_posixr�)
rZr��libdir�
archive_pathsr��distinfor��ap�p�fr�r��sizer6r6r7�
write_records^s&zWheel.write_recordscCsZt|dtj��8}|D]"\}}t�d||�|�||�qWd�n1sL0YdS)N�wzWrote %s to %s in wheel)r�zipfile�ZIP_DEFLATED�logger�debug�write)rZr]r�r�r�r�r6r6r7�	build_zipnszWheel.build_zipc"s�|duri}tt�fdd�d��d}|dkrFd}tg}tg}tg}nd}tg}d	g}d
g}|�d|�|_|�d|�|_|�d
|�|_	�|}	d|j
|jf}
d|
}d|
}g}
dD�]
}|�vr�q��|}tj
�|�r�t�|�D]�\}}}|D]�}ttj
�||��}tj
�||�}ttj
�|||��}|
�||f�|dkr�|�d�s�t|d��}|��}Wd�n1�st0Y|�|�}t|d��}|�|�Wd�q�1�s�0Yq�q�q�|	}d}t�|�D]�\}}}||k�r:t|�D]8\}}t|�}|�d��r�tj
�||�}||=�q,�q�|�s:Jd��|D]H}t|��d��rV�q>tj
�||�}ttj
�||��}|
�||f��q>�q�t�|�}|D]B}|dv�r�ttj
�||��}ttj
�||��}|
�||f��q�d|�p�|jdtd|g}|jD] \}}}|�d|||f��qtj
�|d�}t|d�� }|�d �|��Wd�n1�sd0Yttj
�|d��}|
�||f�d!d"�} t|
| d#�}
|� ||f|	|
�tj
�|j!|j"�}!|�#|!|
�|!S)$z�
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Ncs|�vSr:r6r;��pathsr6r7r=|r>zWheel.build.<locals>.<lambda>)�purelib�platlibrr�Zfalse�truerqrrrwrxryr��%s.datar�)r�Zheaders�scriptsr��.exer��wb�
.dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r�Z	INSTALLERZSHAREDr�zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz
Tag: %s-%s-%sr�r��
cSs*|d}|�d�}d|vr"|d7}||fS)Nrr9r�i')�count)�tr��nr6r6r7�sorter�s

zWheel.build.<locals>.sorter)�key)$r�r�IMPVER�ABI�ARCHrv�getrwrxryrQr|r@rR�isdir�walkr	r2�relpathr�r-�endswithr�r�r�r��	enumerate�listdir�
wheel_versionrr��sortedr�r{r}r�)"rZr�r�r�ZlibkeyZis_pureZ
default_pyverZdefault_abiZdefault_archr�r��data_dirr�r�r�rR�root�dirs�filesr�r��rpr�r�r�r��i�dnZwheel_metadatarwrxryr�r]r6r�r7�buildts�
(
0



�0zWheel.buildcCs
|�d�S)zl
        Determine whether an archive entry should be skipped when verifying
        or installing.
        )r9z/RECORD.jws)r�)rZ�arcnamer6r6r7�
skip_entry�szWheel.skip_entrycC
Ksx|j}|�d�}|�dd�}|�dd�}tj�|j|j�}d|j|jf}	d|	}
d|	}t	�|t
�}t	�|d�}
t	�|d	�}t�d
�}t
|d����}|�|
�� }||�}t|�}Wd�n1s�0Y|d
�dd�}tdd�|D��}||jk�r|�r||j|�|ddk�r(|d}n|d}i}|�|��X}t|d��,}|D]}|d}|||<�qPWd�n1�s~0YWd�n1�s�0Yt	�|
d�}t	�|d�}t	�|
dd�}t|d�}d|_tj} g}!t��}"|"|_d|_�zF�z|��D�],}#|#j}$t|$t��r,|$}%n
|$�d
�}%|� |%��rF�q||%}|d�rxt!|#j"�|dk�rxt#d|%��|d�r�|d�dd�\}&}'|�|$��}|�$�}(Wd�n1�s�0Y|�%|(|&�\})}*|*|'k�r�t#d|$��|�r|%�&||f��rt'�(d |%��q|%�&|��o,|%�)d!�}+|%�&|��rd|%�d"d�\})},}-tj�||,t*|-��}.n$|%|
|fv�rv�qtj�|t*|%��}.|+�s�|�|$��}|�+||.�Wd�n1�s�0Ytjd#k�r�t�,|.|#j-d$?d%@�|!�.|.�|�s\|d�r\t|.d&��>}|�$�}(|�%|(|&�\})}/|/|*k�r<t#d'|.��Wd�n1�sR0Y| �r:|.�)d(��r:z|j/|.|d)�}0|!�.|0�Wn"t0�y�t'j1d*dd+�Yn0n�tj�2t*|$��}1tj�|"|1�}2|�|$��}|�+||2�Wd�n1�s�0Ytj�|.�\}3}1|3|_|�3|1�}4|�4|4�|!�5|4��q|�rVt'�(d,�d}5�n�d}6|j6d
}|d-k�rPt	�|d.�}7z�|�|7��}t7|�}8Wd�n1�s�0Yi}6d/D]r}9d0|9}:|:|8v�r�i|6d1|9<};|8|:�8�D]<}<d2|<j9|<j:f}=|<j;�r|=d3d4�|<j;�7}=|=|;|<j<�q�q�Wnt0�yLt'�1d5�Yn0nxzX|�|��8}||�}t<�=|��d6�}6|6�r�|6�d7�}6Wd�n1�s�0YWnt0�y�t'�1d8�Yn0|6�r�|6�d9i�}>|6�d:i�}?|>�s�|?�r�|�dd�}@tj�>|@��st?d;��|@|_|>�@�D]*\}:}<d<|:|<f}A|�3|A�}4|�4|4��q"|?�r�d=di}B|?�@�D],\}:}<d<|:|<f}A|�3|A|B�}4|�4|4��qdtj�||�}tA|�}5tB|�}|d=|d=||d><|5�C||�}|�r�|!�.|�|5�D|!|d?|�|5WWtE�F|"�Wd�St0�y8t'�Gd@�|�H��Yn0WtE�F|"�ntE�F|"�0Wd�n1�sj0YdS)Aa~
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written. If kwarg ``bytecode_hashed_invalidation`` is True, written
        bytecode will try to use file-hash based invalidation (PEP-552) on
        supported interpreter versions (CPython 2.7+).

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        �warner�lib_onlyFZbytecode_hashed_invalidationr�r�r�r�r�r�r�Nz
Wheel-Versionr#rcSsg|]}t|��qSr6��int�rCr�r6r6r7rE r>z!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibr�r�r���streamrr*r�)�dry_runTr�size mismatch for %s�=�digest mismatch for %szlib_only: skipping %sr�r9�posix�i�r�zdigest mismatch on write for %sz.py)Zhashed_invalidationzByte-compilation failed)�exc_infozlib_only: returning Nonez1.0zentry_points.txt)Zconsole�guiz
%s_scriptszwrap_%sz%s:%sz [%s]�,zAUnable to read legacy script metadata, so cannot generate scriptsr^zpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZwrap_consoleZwrap_guizValid script path not specifiedz%s = %sr�lib�prefixzinstallation failed.)Irr�r@rRr2r{r}rQr|r�rr�r�rr�rr��tupler�rr�recordr/�dont_write_bytecode�tempfileZmkdtempZ
source_dirZ
target_dir�infolist�
isinstancer
r�r��str�	file_sizerr�r��
startswithr�r�r�rZcopy_stream�chmodZ
external_attrr-Zbyte_compile�	ExceptionZwarning�basenameZmakeZset_executable_mode�extendr�r�valuesr
�suffix�flags�json�loadr�r��itemsrr�Zwrite_shared_locationsZwrite_installed_files�shutil�rmtree�	exceptionZrollback)CrZr�Zmaker�kwargsrr�r�Zbc_hashed_invalidationr]r�r�r�Z
metadata_name�wheel_metadata_name�record_namer�r��bwfr�r�ZwvZfile_versionr�r�r��readerr�r�Zdata_pfxZinfo_pfxZ
script_pfxZfileopZbcZoutfiles�workdir�zinfor��	u_arcname�kind�valuer�r"r�Z	is_script�wherer�ZoutfileZ	newdigestZpycr�Zworknamer��	filenamesZdistZcommandsZepZepdatar�rar$rbrDZconsole_scriptsZgui_scriptsZ
script_dirZscript�optionsr6r6r7�install�sf
�
&
L

�
(
�
�,�

�&��,




(
.

�
�

z
Wheel.installcCs8tdur4tj�t�td�dtjdd��}t|�atS)Nzdylib-cachez%s.%sr)	�cacher@rRr2rrr/r0r)rZ�baser6r6r7�_get_dylib_cache�s�zWheel._get_dylib_cachec	Cs�tj�|j|j�}d|j|jf}d|}t�|d�}t�	d�}g}t
|d���.}�z|�|���}||�}	t�
|	�}
|��}|�|�}tj�|j|�}
tj�|
�s�t�|
�|
��D]�\}}tj�|
t|��}tj�|�s�d}n6t�|�j}tj�|�}|�|�}tj|j�}||k}|�r(|�||
�|�||f�q�Wd�n1�sN0YWnt�ynYn0Wd�n1�s�0Y|S)Nr�r�Z
EXTENSIONSr�r�T)r@rRr2r{r}rQr|r�r�r�rr�rrr1Z
prefix_to_dirr0r��makedirsrrr��stat�st_mtime�datetimeZ
fromtimestampZgetinfoZ	date_time�extractr-r�)rZr]r�r�r�r�rer�r�r�r^r/r
Z
cache_baserQr��destr6Z	file_timer�Z
wheel_timer6r6r7�_get_extensions�sB



�
4&zWheel._get_extensionscCst|�S)zM
        Determine if a wheel is compatible with the running system.
        )�
is_compatiblerYr6r6r7r9szWheel.is_compatiblecCsdS)zP
        Determine if a wheel is asserted as mountable by its metadata.
        Tr6rYr6r6r7�is_mountableszWheel.is_mountablecCs�tj�tj�|j|j��}|��s2d|}t|��|��sJd|}t|��|t	jvrbt
�d|�nN|rtt	j�|�nt	j�
d|�|��}|r�tt	jvr�t	j�t�t�||�dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)r@rRr�r2r{r}r9rr:r/r�r�r-�insertr8�_hook�	meta_pathr_)rZr-r]�msgr^r6r6r7�mount!s"

zWheel.mountcCsrtj�tj�|j|j��}|tjvr2t�d|�n<tj�	|�|t
jvrRt
�	|�t
jsnt
tjvrntj�	t
�dS)Nz%s not in path)
r@rRr�r2r{r}r/r�r�rcr<rWr=)rZr]r6r6r7�unmount6s



z
Wheel.unmountc
Cs8tj�|j|j�}d|j|jf}d|}t�|d�}t�|d�}t�	d�}t
|d����}|�|�� }||�}	t|	�Wd�n1s�0Yi}
|�|��T}t
|d��*}|D]}
|
d}|
|
|<q�Wd�n1s�0YWd�n1s�0Y|��D�]}|j}t|t��r,|}n
|�d�}|�d	�}d
|v�rVtd|��|�|��rf�q|
|}
|
d�r�t|j�|
dk�r�td
|��|
d�r|
d�dd�\}}|�|��}|��}Wd�n1�s�0Y|�||�\}}||k�rtd|���qWd�n1�s*0YdS)Nr�r�r�r�r�r�r�rr9�..�invalid entry in wheel: %rrrrrr)r@rRr2r{r}rQr|r�r�r�rr�rrrrr
r�r�rr�rrr�r�)rZr]r�r�r"r#r�r�r$r�r�r�r%r�r�r'r�r(r)r*r�r"r�r6r6r7r�BsT
&F


��
(
�zWheel.verifyc	Ksdd�}dd�}tj�|j|j�}d|j|jf}d|}t�|d�}	t����}
t	|d���}i}|�
�D]h}
|
j}t|t�r�|}n
|�
d	�}||	kr�qhd
|vr�td|��|�|
|
�tj�|
t|��}|||<qhWd�n1s�0Y|||�\}}||fi|��}|�r�|||�\}}|�r<||k�r<|||�|du�rftjd
d|
d�\}}t�|�n*tj�|��s�td|��tj�||j�}t|���}tj�|
|�}||f}|�||
|�|�||�|du�r�t�||�Wd�n1�s�0Y|S)a�
        Update the contents of a wheel in a generic way. The modifier should
        be a callable which expects a dictionary argument: its keys are
        archive-entry paths, and its values are absolute filesystem paths
        where the contents the corresponding archive entries can be found. The
        modifier is free to change the contents of the files pointed to, add
        new entries and remove entries, before returning. This method will
        extract the entire contents of the wheel to a temporary location, call
        the modifier, and then use the passed (and possibly updated)
        dictionary to write a new wheel. If ``dest_dir`` is specified, the new
        wheel is written there -- otherwise, the original wheel is overwritten.

        The modifier should return True if it updated the wheel, else False.
        This method returns the same value the modifier returns.
        cSsHd}}d|tf}||vr$d|}||vr@||}t|d�j}||fS)Nz%s/%sz%s/PKG-INFO�rR)rr
r|)�path_mapr�r|rRr�r6r6r7�get_version�sz!Wheel.update.<locals>.get_versioncSs�d}z|t|�|�d�}|dkr*d|}nTdd�||dd��d�D�}|dd7<d	|d|�d�d
d�|D��f}Wnty�t�d|�Yn0|r�t|d
�}||_|�	t
�}|j||d�t�d||�dS)Nr!rz%s+1cSsg|]}t|��qSr6r�rBr6r6r7rE�r>z8Wheel.update.<locals>.update_version.<locals>.<listcomp>rr#r�z%s+%scss|]}t|�VqdSr:)rr�r6r6r7�	<genexpr>�sz7Wheel.update.<locals>.update_version.<locals>.<genexpr>z0Cannot update non-compliant (PEP-440) version %rrC)rR�legacyzVersion updated from %r to %r)rr�r�r2rr�r�r
r|r�rr�)r|rR�updatedr�r3ZmdrGr6r6r7�update_version�s,

 ��


z$Wheel.update.<locals>.update_versionr�r�r�r�r�rArBNz.whlz
wheel-update-)rr
�dirzNot a directory: %r)r@rRr2r{r}rQr|r�rrrrr
r�rr6rrZmkstemp�closer�r�rr�r�r�copyfile)rZ�modifierZdest_dirr!rErIr]r�r�r#r&r�rDr'r�r(rRZoriginal_versionr"ZmodifiedZcurrent_version�fd�newpathr�r�r�r6r6r7r\zs`



�(

�
�
,zWheel.update)NFF)N)NN)F)N)rmrnro�__doc__r�r�r[�propertyr}r�r�rr�r�r�r�r�r�r�r�r�r�r.r1r8r9r:r?r@r�r\r6r6r6r7rp�s@
)



	


uq	#
8rpcCsZddl}|��}g}|ddkrV|d�d�D]}|�|��rFt|�nd�q.t|�}|S)NrZglibcrr#)�platformZlibc_verr�r-�isdigitr�r)rR�verrerDr6r6r7�_get_glibc_version�srUc
Cs`tg}td}ttjdddd�D]}|�d�|t|�g��q$g}t�D]$}|�d�rL|�|�	dd�d�qL|�
�tdkr�|�dt�|�d�g}t
g}tjd	k�r�t�d
t
�}|�r�|��\}}}}	t|�}|	g}
|	dvr�|
�d�|	d
v�r|
�d�|	dv�r|
�d�|	dv�r,|
�d�|	dv�r@|
�d�|dk�r�|
D]*}d||||f}|t
k�rN|�|��qN|d8}�q@|D�]}
|D�]}	|�d�t|df�|
|	f�|
dk�r�tj�d��r�|	�dd�}	t�}t|�dk�r�|dk�r|�d�t|df�|
d|	f�|dk�rH|�d�t|df�|
d|	f�|dk�rt|�d�t|df�|
d|	f�|�d�t|df�|
d|d|d|	ff��q��q�t|�D]L\}}|�d�t|f�ddf�|dk�r�|�d�t|df�ddf��q�t|�D]L\}}|�d�d |f�ddf�|dk�r
|�d�d |df�ddf��q
t|�S)!zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    rrr�r*z.abir#rrq�darwinz(\w+)_(\d+)_(\d+)_(\w+)$)�i386�ppcZfat)rWrX�x86_64Zfat3)�ppc64rYZfat64)rWrY�intel)rWrYr[rXrZ�	universalz%s_%s_%s_%sZlinuxZlinux_)r�z
manylinux1_%s)r�zmanylinux2010_%s)r�zmanylinux2014_%szmanylinux_%s_%s_%srrr )r+�ranger/r0r-r2rrJrr��sortr�r;r�rR�rerr�r�r.r?rUrjr��set)Zversions�major�minorZabisrreZarchesr'rQry�matchesrrDrxr3r�r|r6r6r7�compatible_tags�s�
















�
�
���
"
"rgcCs\t|t�st|�}d}|dur"t}|D]0\}}}||jvr&||jvr&||jvr&d}qXq&|S)NFT)rrp�COMPATIBLE_TAGSrwrxry)Zwheelr�rerTrxryr6r6r7r9As
r9)N)YZ
__future__rr�r�r5Zemailrr�rZloggingr@r�rbrr/rr�r*rr�compatrrr	r
rZdatabaserr�r
rrrKrrrrrrrrrrr|rrZ	getLoggerrmr�r/�hasattrr.rRrr,r+r0rvr�r?r�r�r�r8�compile�
IGNORECASE�VERBOSEr�r~r�r�r�r�rAr�rFZimportlib.machineryrG�importlib.utilrJrU�objectrVr<rprUrgrhr9r6r6r6r7�<module>s�0



�
�



%8P

Youez - 2016 - github.com/yon3zu
LinuXploit