HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/setuptools/__pycache__/package_index.cpython-311.pyc
�

�ncT�����dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
ZddlZddlZddlZddlmZddlZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,dd	l-m.Z.ej/d
��Z0ej/dej1��Z2ej/d��Z3ej/d
ej1��j4Z5d�6��Z7gd�Z8dZ9dZ:e:�;dj;ej<�e���Z=d�Z>d�Z?d�Z@d1d�ZAd1d�ZBd1d�ZCdedfd�ZDd�ZEej/dej1��ZFeEd���ZGGd�d��ZHGd �d!eH��ZIGd"�d#e��ZJej/d$��jKZLd%�ZMd&�ZNd2d'�ZOd(�ZPGd)�d*��ZQGd+�d,ejR��ZSejTjUfd-�ZVd.�ZWeOe9��eV��ZVd/�ZXd0�ZYdS)3z#PyPI and direct package downloading�N��wraps)�
CHECKOUT_DIST�Distribution�BINARY_DIST�normalize_path�SOURCE_DIST�Environment�find_distributions�	safe_name�safe_version�to_filename�Requirement�DEVELOP_DIST�EGG_DIST�
parse_version)�log)�DistutilsError)�	translate)�Wheel��unique_everseenz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)z�<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgz)�PackageIndex�distros_for_url�parse_bdist_wininst�interpret_distro_name�z<setuptools/{setuptools.__version__} Python-urllib/{py_major}z{}.{})�py_major�
setuptoolsc�v�	tj|��S#t$r}td|����|�d}~wwxYw)Nz/Not a URL, existing file, or requirement spec: )r�parse�
ValueErrorr)�spec�es  �:D:\Python311\Lib\site-packages\setuptools/package_index.py�parse_requirement_argr&6sV���� ��&�&�&�������n�CG�4�I�
�
��	��������s��
8�3�8c��|���}d\}}}|�d��r�|�d��r
|dd�}d}n{|�dd��r|d	d
�}|dd�}d}nN|�d��r
|dd�}d
}n,|�dd��r|d	d
�}|dd�}d
}|||fS)z=Return (base,pyversion) or (None,None) for possible .exe name)NNN�.exez
.win32.exeNi�����win32z	.win32-pyi�i�������z.win-amd64.exei�z	win-amd64z
.win-amd64-pyi��)�lower�endswith�
startswith)�namer+�base�py_ver�plats     r%rr?s���
�J�J�L�L�E�)��D�&�$��~�~�f�����>�>�,�'�'�
	�����:�D��D�D�
�
�
�k�3�
/�
/�
	��"�R�%�[�F�����:�D��D�D�
�^�^�,�
-�
-�	�����:�D��D�D�
�
�
�o�s�
3�
3�	��"�R�%�[�F�����:�D��D������c��tj�|��}|\}}}}}}tj�|�d��d��}|dkr>|dkr8tj�|�d��d��}d|vr|�dd��\}}||fS)N�/���zsourceforge.net�download����#�)�urllibr!�urlparse�unquote�split)	�url�parts�scheme�server�path�
parameters�query�fragmentr/s	         r%�egg_info_for_urlrFWs����L�!�!�#�&�&�E�8=�5�F�F�D�*�e�X��<����
�
�3���� 3�4�4�D�
�"�"�9�t�z�'9�9��|�#�#�D�J�J�s�O�O�B�$7�8�8��
�d�{�,����C��+�+���h���>�r2c#�K�t|��\}}t|||��D]}|V��|rNt�|��}|r4t	||�d��|t���D]
}|V��dSdSdS)zEYield egg or source distribution objects that might be found at a URLr9)�
precedenceN)rF�distros_for_location�EGG_FRAGMENT�matchr�groupr)r>�metadatar/rE�distrKs      r%rrbs�����%�c�*�*�N�D�(�$�S�$��9�9�����
�
�
�
����"�"�8�,�,���	�-��U�[�[��^�^�X�-����
�
���
�
�
�
�
��	�	�
�
r2c��|�d��r
|dd�}|�d��rd|vrtj|||��gS|�d��rOd|vrKt|��}|���sgSt||j|jtdz���gS|�d	��r.t|��\}}}|�t||||t|��StD]B}|�|��r+|dt|���}t|||��cS�CgS)
z:Yield egg or source distribution objects based on basename�.egg.zipNr*z.egg�-z.whlr9)�location�project_name�versionrHr()
r,r�
from_locationr�
is_compatiblerSrTrrrr�
EXTENSIONS�len)rR�basenamerM�wheel�win_baser0�platform�exts        r%rIrIps�������$�$�!��C�R�C�=������ � �J�S�H�_�J��*�8�X�x�H�H�I�I����� � �
�S�H�_�
��h�����"�"�$�$�	��I����+��M��!�|�
�
�
��	����� � ��%8��%B�%B�"��&�(��	�(��(�H�f�k�8���
�
�G�G�����S�!�!�	G��
�#�c�(�(��
�+�H�(��8�X�F�F�F�F�F�	G��Ir2c�x�tt|��tj�|��|��S)zEYield possible egg or source distribution objects based on a filename)rIr�osrBrY)�filenamerMs  r%�distros_for_filenamera�s3����x� � �"�'�"2�"2�8�"<�"<�h���r2c#�`K�|�d��}|s#td�|dd�D����rdStdt|��dz��D]P}t	||d�|d|���d�||d���|||���V��QdS)z�Generate alternative interpretations of a source distro name

    Note: if `location` is a filesystem filename, you should call
    ``pkg_resources.normalize_path()`` on it before passing it to this
    routine!
    rQc3�@K�|]}tjd|��V��dS)z	py\d\.\d$N)�rerK)�.0�ps  r%�	<genexpr>z(interpret_distro_name.<locals>.<genexpr>�s.����K�K�A�b�h�|�Q�7�7�K�K�K�K�K�Kr2�Nr9)�
py_versionrHr\)r=�any�rangerXr�join)rRrYrMrirHr\r?rfs        r%rr�s�����,
�N�N�3���E���#�K�K��q�r�r��K�K�K�K�K����
�1�c�%�j�j�1�n�
%�
%�
�
����h�����r��r�� 3� 3�S�X�X�e�A�B�B�i�5H�5H�!�j��
�
�
�	
�	
�	
�	
�
�
r2c�<��t����fd���}|S)zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    c�.��t�|i|����S�Nr)�args�kwargs�funcs  �r%�wrapperzunique_values.<locals>.wrapper�s ����t�t�T�4�V�4�4�5�5�5r2r)rrrss` r%�
unique_valuesrt�s5����4�[�[�6�6�6�6��[�6��Nr2z(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>c
#��K�t�|��D]�}|���\}}tt	t
j|����d������}d|vsd|vr_t�|��D]D}tj�|t|�d������V��E��dD]|}|�|��}|dkr_t�||��}|rBtj�|t|�d������V��}dS)zEFind rel="homepage" and rel="download" links in `page`, yielding URLs�,�homepager6r9)z
<th>Home Pagez<th>Download URLr5N)�REL�finditer�groups�set�map�str�stripr+r=�HREFr:r!�urljoin�
htmldecoderL�find�search)r>�pagerK�tag�rel�rels�poss       r%�find_external_linksr��sW�������d�#�#�L�L���<�<�>�>���S��3�s�y�#�)�)�+�+�"3�"3�C�"8�"8�9�9�:�:�����	L��t�!3�	L����s�+�+�
L�
L���l�*�*�3�
�5�;�;�q�>�>�0J�0J�K�K�K�K�K�K��4�L�L���i�i��n�n���"�9�	L��K�K��c�*�*�E��
L��l�*�*�3�
�5�;�;�q�>�>�0J�0J�K�K�K�K�K��L�Lr2c�$�eZdZdZd�Zd�Zd�ZdS)�ContentCheckerzP
    A null content checker that defines the interface for checking content
    c��dS)z3
        Feed a block of data to the hash.
        N���self�blocks  r%�feedzContentChecker.feed�s	��	�r2c��dS)zC
        Check the hash. Return False if validation fails.
        Tr��r�s r%�is_validzContentChecker.is_valid�s	���tr2c��dS)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr�)r��reporter�templates   r%�reportzContentChecker.report�s	��
	�r2N)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r2r%r�r��sK������������������r2r�c�\�eZdZejd��Zd�Zed���Zd�Z	d�Z
d�ZdS)�HashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c�T�||_tj|��|_||_dSro)�	hash_name�hashlib�new�hash�expected)r�r�r�s   r%�__init__zHashChecker.__init__�s%��"����K�	�*�*��	� ��
�
�
r2c���tj�|��d}|st��S|j�|��}|st��S|di|�����S)z5Construct a (possibly null) ContentChecker from a URLr5r�)r:r!r;r��patternr��	groupdict)�clsr>rErKs    r%�from_urlzHashChecker.from_urls{���<�(�(��-�-�b�1���	$�!�#�#�#���"�"�8�,�,���	$�!�#�#�#��s�'�'�U�_�_�&�&�'�'�'r2c�:�|j�|��dSro)r��updater�s  r%r�zHashChecker.feeds���	��������r2c�F�|j���|jkSro)r��	hexdigestr�r�s r%r�zHashChecker.is_valids���y�"�"�$�$��
�5�5r2c�,�||jz}||��Sro)r�)r�r�r��msgs    r%r�zHashChecker.reports�����'���x��}�}�r2N)r�r�r�rd�compiler�r��classmethodr�r�r�r�r�r2r%r�r��s��������b�j�	#���G�
!�!�!�
�(�(��[�(� � � �6�6�6�����r2r�c�&��eZdZdZ		d+�fd�	Z�fd�Zd,d	�Zd,d
�Zd,d�Zd�Z	d
�Z
d�Zd�Zd�Z
d-d�Zd�Zd-�fd�	Zd�Zd�Zd�Zd�Zd�Z		d.d�Zd/d�Zd�ZdZd�Zd�Zd-d�Zd �Zd!�Zd"�Zd#�Z d$�Z!e"d,d%���Z#d&�Z$d'�Z%d(�Z&d)�Z'd*�Z(�xZ)S)0rz;A distribution index that scans web pages for download URLs�https://pypi.org/simple/��*NTc�r��t��j|i|��|dd|�d���z|_i|_i|_i|_tjd�	tt|������j|_
g|_tjj|_dS)Nr4�|)�superr�r,�	index_url�scanned_urls�fetched_urls�
package_pagesrdr�rlr|rrK�allows�to_scanr:�request�urlopen�opener)r�r��hosts�	ca_bundle�
verify_sslrp�kw�	__class__s       �r%r�zPackageIndex.__init__s����	�����$�%�"�%�%�%�"�S�*F�y�/A�/A�#�/F�/F�+F�*F�%G�G�������������j����#�i��*?�*?�!@�!@�A�A�G�������n�,����r2c���	t|j��n#t$rYdSwxYwt���|��Sro)rrT�	Exceptionr��add)r�rNr�s  �r%r�zPackageIndex.add)sS���	��$�,�'�'�'�'���	�	�	��F�F�	�����w�w�{�{�4� � � s��
&�&Fc	��||jvr|sdSd|j|<t|��s|�|��dStt	|����}|r-|�|��sdS|�d|��|s|r	||jvr$tt|j	|����dS|�|��sd|j|<dS|�
d|��d|j|<d}|�|||z��}|�dSt|tjj��r(|jdkr|�
d|jz��d|j|j<d|j�d	d
�����vr|���dS|j}|���}t|t0��sTt|tjj��rd}n|j�d��pd}|�|d
��}|���t6�|��D]W}	tj�|t?|	� d������}
|�!|
���X|�"|j#��r-tI|dd��dkr|�%||��}dSdSdS)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i�zAuthentication error: %s�html�content-type�zlatin-1�charset�ignorer9�code�)&r��
URL_SCHEME�process_filename�listr�url_ok�debugr�r|r��info�open_url�
isinstancer:�error�	HTTPErrorr�r�r>�headers�getr+�close�readr}�	get_param�decoderryr!r�r�rL�process_urlr-r��getattr�
process_index)r�r>�retrieve�dists�tmpl�fr/r�r�rK�links           r%r�zPackageIndex.process_url2s���$�#�#�	�H�	��F�!%���#���#���	2��!�!�#�&�&�&��F����-�-�.�.�E��
2��{�{�3�'�'���F��
�
�+�S�1�1�1��	��	�C�4�+<�$<�	���T�X�u�%�%�&�&�&��F��{�{�3���	�%)�D��c�"��F��	�	�,��$�$�$�!%���#��M���M�M�#�t�c�z�*�*���	��F��a���/�0�0�	:�Q�V�s�]�	:��I�I�0�1�5�8�9�9�9�#'���!�%� ������~�r�:�:�@�@�B�B�B�	�
�G�G�I�I�I��F��u���v�v�x�x���$��$�$�	2��!�V�\�3�4�4�
F�#����)�-�-�i�8�8�E�I���;�;�w��1�1�D�	���	�	�	��]�]�4�(�(�	#�	#�E��<�'�'��j����Q���.H�.H�I�I�D����T�"�"�"�"��>�>�$�.�)�)�	1�g�a���.F�.F�#�.M�	1��%�%�c�4�0�0�D�D�D�	1�	1�	1�	1r2c� �tj�|��s|�d|��dStj�|��rl|sjtj�|��}tj|��D]6}|�tj�||��d���7t|��}|r:|�
d|��tt|j
|����dSdS)Nz
Not found: %sTz	Found: %s)r_rB�exists�warn�isdir�realpath�listdirr�rlrar�r�r|r�)r��fn�nestedrB�itemr�s      r%r�zPackageIndex.process_filenamegs����w�~�~�b�!�!�	��I�I�o�r�*�*�*��F�
�7�=�=����	F�V�	F��7�#�#�B�'�'�D��
�4�(�(�
F�
F���%�%�b�g�l�l�4��&>�&>��E�E�E�E�$�R�(�(���	'��J�J�{�B�'�'�'���T�X�u�%�%�&�&�&�&�&�	'�	'r2c�N�t|��}|o*|�d�����dk}|s8|�tj�|��d��rdSd}|rt||z���|�||��dS)Nr9�fileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	r�rLr+r�r:r!r;rr�)r�r>�fatal�s�is_filer�s      r%r�zPackageIndex.url_okws����s�O�O���4�����
�
�(�(�*�*�f�4���	�d�k�k�&�,�"7�"7��"<�"<�Q�"?�@�@�	��4�
4�	��	 � ��s��+�+�+��I�I�c�3�����r2c��ttjj|��}d�|D��}t	tj|j|����dS)Nc3�vK�|]4}tj|��D]}|�d���||fV���5dS)z	.egg-linkN)r_r�r,)rerB�entrys   r%rgz.PackageIndex.scan_egg_links.<locals>.<genexpr>�sm����
�
����D�)�)�
�
���~�~�k�*�*�	
�
�5�M�
�
�
�
�
�
�
r2)�filterr_rBr�r��	itertools�starmap�
scan_egg_link)r��search_path�dirs�	egg_linkss    r%�scan_egg_linkszPackageIndex.scan_egg_links�sY���b�g�m�[�1�1��
�
��
�
�
�	�	
�Y�
�t�1�9�
=�
=�>�>�>�>�>r2c
��ttj�||����5}t	tdt
tj|������}ddd��n#1swxYwYt|��dkrdS|\}}ttj�||����D]?}tjj|g|�R�|_t|_
|�|���@dS)Nrh)�openr_rBrlr�r�r|r}r~rXrrRr	rHr�)r�rBr��	raw_lines�lines�egg_path�
setup_pathrNs        r%r�zPackageIndex.scan_egg_link�s,��
�"�'�,�,�t�U�+�+�
,�
,�	B�	����c�#�)�Y�&?�&?�@�@�A�A�E�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B��u�:�:��?�	��F�$���*�&�r�w�|�|�D�(�'C�'C�D�D�	�	�D��G�L��6��6�6�6�D�M�)�D�O��H�H�T�N�N�N�N�	�	s�6A0�0A4�7A4c	��d}|�|j��s|Stttjj|t|j��d��d������}t|��dks
d|dvr|St|d��}t|d��}d|j�|�
��i��|<t|��t|��fS)N)NNr4rhr8r9rT)r-r�r�r|r:r!r<rXr=rr
r��
setdefaultr+r)r�r��NO_MATCH_SENTINELr?�pkg�vers      r%�_scanzPackageIndex._scan�s���&�����t�~�.�.�	%�$�$��S��L� �$�s�4�>�':�':�';�';�"<�"B�"B�3�"G�"G�
�
�����u�:�:��?�	%�c�U�1�X�o�	%�$�$���a��!�!���5��8�$�$��?C���%�%�c�i�i�k�k�2�6�6�t�<��3����S�!1�!1�1�1r2c�\�t�|��D]f}	|�tj�|t
|�d���������W#t$rY�cwxYw|�|��\}}|sdSt||��D]c}t|��\}}|�d��r%|s#|r|d|�d|��z
}n|�|��|�
|���dt�d�|��S)z#Process the contents of a PyPI pager9r��.pyz#egg=rQc�6�d|�ddd��zS)Nz<a href="%s#md5=%s">%s</a>r9�rh)rL)�ms r%�<lambda>z,PackageIndex.process_index.<locals>.<lambda>�s��2�Q�W�W�Q��1�5E�5E�E�r2)rryrr:r!r�r�rLr"r�rFr,�need_version_info�scan_url�PYPI_MD5�sub)	r�r>r�rKr
r�new_urlr/�frags	         r%r�zPackageIndex.process_index�sN���]�]�4�(�(�	�	�E�
��
�
�6�<�/�/��Z����A���5O�5O�P�P�Q�Q�Q�Q���
�
�
���
�����:�:�c�?�?���S��	��2�+�3��5�5�	#�	#�G�)�'�2�2�J�D�$��}�}�U�#�#�
0�D�
0��0��G�s�s�s�C�C�8�8�G�G��*�*�3�/�/�/��M�M�'�"�"�"�"��|�|�E�E�t�
�
�	
s�AA2�2
A?�>A?c�2�|�d|��dS)NzPPage at %s links to .py file(s) without version info; an index scan is required.)�scan_all�r�r>s  r%rzPackageIndex.need_version_info�s*���
�
�
 �!$�	
�	
�	
�	
�	
r2c��|j|jvr%|r|j|g|�R�|�d��|�|j��dS)Nz6Scanning index of all packages (this may take a while))r�r�r�r�r�r�r�rps   r%rzPackageIndex.scan_all�sk���>��!2�2�	��
&���	�#�%��%�%�%�%��I�I�H�
�
�
�	
�
�
�d�n�%�%�%�%�%r2c���|�|j|jzdz��|j�|j��s%|�|j|jzdz��|j�|j��s|�|��t|j�|jd����D]}|�|���dS)Nr4r�)	rr��unsafe_namer�r��keyrS�not_found_in_indexr�)r��requirementr>s   r%�
find_packageszPackageIndex.find_packages�s����
�
�d�n�{�'>�>��D�E�E�E��!�%�%�k�o�6�6�	K��M�M�$�.�;�+C�C�c�I�J�J�J��!�%�%�k�o�6�6�	1��#�#�K�0�0�0���*�.�.�{���C�C�D�D�	�	�C��M�M�#�����	�	r2c���|���|�|��||jD]!}||vr|cS|�d||���"t	t
|���||��S)Nz%s does not match %s)�prescanr&r#r�r�r�obtain)r�r%�	installerrNr�s    �r%r)zPackageIndex.obtain�s�������������;�'�'�'����)�	B�	B�D��{�"�
������J�J�-�{�D�A�A�A�A��\�4�(�(�/�/��Y�G�G�Gr2c�2�|�|jd|z��|���sd|���t	j|��t
|jj�dtj	�
|���d����dS)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r�r�r�r�r_�unlinkrr�r.rBrY)r��checkerr`�tfps    r%�
check_hashzPackageIndex.check_hash�s���	����J�,�x�7�	9�	9�	9����!�!�	��I�I�K�K�K��I�h���� ��<�$�$�$�b�g�&6�&6�x�&@�&@�&@�&@�B���
�	�	r2c��|D]y}|j�@t|��r1|�d��stt	|����r|�|���_|j�|���zdS)z;Add `urls` to the list that will be prescanned for searchesN�file:)r�r�r-r�rr�append)r��urlsr>s   r%�add_find_linkszPackageIndex.add_find_linkss����	)�	)�C���

)�!�#���

)��>�>�'�*�*�

)����,�,�-�-�	

)��
�
�c�"�"�"�"���#�#�C�(�(�(�(�	)�	)r2c�p�|jr'tt|j|j����d|_dS)z7Scan urls scheduled for prescanning (e.g. --find-links)N)r�r�r|rr�s r%r(zPackageIndex.prescans3���<�	3���T�]�D�L�1�1�2�2�2�����r2c��||jr
|jd}}n	|jd}}|||j��|���dS)Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))r#r�r�r"r)r�r%�methr�s    r%r$zPackageIndex.not_found_in_indexsY����� �	G��	�#H�#�D�D��	�E��D�	
��S�+�)�*�*�*��
�
�����r2c���t|t��s�t|��}|rj|�|�d��||��}t|��\}}|�d��r|�|||��}|Stj	�
|��r|St|��}t|�
||��dd��S)aLocate and/or download `spec` to `tmpdir`, returning a local path

        `spec` may be a ``Requirement`` object, or a string containing a URL,
        an existing local filename, or a project/version requirement spec
        (i.e. the string form of a ``Requirement`` object).  If it is the URL
        of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
        that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
        automatically created alongside the downloaded file.

        If `spec` is a ``Requirement`` object or a string containing a
        project/version requirement spec, this method returns the location of
        a matching distribution (possibly after downloading it to `tmpdir`).
        If `spec` is a locally existing file or directory name, it is simply
        returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
        of `tmpdir`, and the local filename is returned.  Various errors may be
        raised if a problem occurs during downloading.
        r9rrRN)r�rr��
_download_urlrLrFr,�	gen_setupr_rBr�r&r��fetch_distribution)r�r#�tmpdirr@�foundr/rEs       r%r6zPackageIndex.download#s���$�$��,�,�
	3���%�%�F��
3��*�*�6�<�<��?�?�D�&�I�I��!1�$�!7�!7���h��=�=��'�'�D� �N�N�5�(�F�C�C�E��������%�%�
3���,�T�2�2���t�.�.�t�V�<�<�j�$�O�O�Or2c������	���d|��i�	d}d	���	��fd�	}|r4������|��||��}|s|�|||��}|�&�j�����||��}|�"|s ��|��||��}|���d�rdpd|��dS��d|��|�|j���S)
a|Obtain a distribution suitable for fulfilling `requirement`

        `requirement` must be a ``pkg_resources.Requirement`` instance.
        If necessary, or if the `force_scan` flag is set, the requirement is
        searched for in the (online) package index as well as the locally
        installed packages.  If a distribution matching `requirement` is found,
        the returned distribution's ``location`` is the value you would have
        gotten from calling the ``download()`` method with the matching
        distribution's URL or filename.  If no matching distribution is found,
        ``None`` is returned.

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNc�Z��|��}||jD]�}|jtkr"�s |�vr��d|��d�|<�4||vo|jtkp�}|rJ��|j�	��}||_tj	�
|j��r|cS��dS)Nz&Skipping development or system egg: %sr9)r#rHrr�r	r6rR�download_locationr_rBr�)
�req�envrN�test�loc�
develop_okr��skipped�sourcer<s
     �����r%r�z-PackageIndex.fetch_distribution.<locals>.find]s�����
����C�G��
$�
$���?�l�2��:���7�*�*��	�	�D�d����)*���
���C�K�G���K�7�E�v�:���$��-�-��
�v�>�>�C�-0�D�*��w�~�~�d�&<�=�=�$�#�����%
$�
$r2z:No local packages or working download links found for %s%sza source distribution of r�zBest match: %s)rRro)r�r(r&r�r��cloner@)
r�r%r<�
force_scanrGrE�local_indexrNr�rFs
` ` ``   @r%r;zPackageIndex.fetch_distributionEs~�������(	
�	�	�$�k�2�2�2�����	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�2�	%��L�L�N�N�N����{�+�+�+��4��$�$�D��	2��	2��4��[�1�1�D��	%��|�
��������4��$�$�D��	%�
�	%����{�+�+�+��4��$�$�D��	?��I�I�L��7�7�=�2��
�
�
�
�
�
�I�I�&��-�-�-��:�:�t�'=�:�>�>�>r2c�H�|�||||��}|�|jSdS)a3Obtain a file suitable for fulfilling `requirement`

        DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
        backward compatibility, this routine is identical but returns the
        ``location`` of the downloaded distribution instead of a distribution
        object.
        N)r;rR)r�r%r<rIrGrNs      r%�fetchzPackageIndex.fetch�s2���&�&�{�F�J��O�O���	!��=� ��tr2c��t�|��}|r.d�t||�d��d��D��pg}t	|��dk�rXt
j�|��}t
j�|��|krvt
j�	||��}t
j�
|��r t
j�||��stj
||��|}tt
j�	|d��d��5}|�d|dj�d|dj�dt
j�|��d�d	���ddd��n#1swxYwY|S|rt'd
|�d|�����t'd���)
Nc� �g|]}|j�	|��Sr�)rT)re�ds  r%�
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>�s0��
�
�
��EF�Y�
�
�
�
�
r2r9zsetup.py�wz(from setuptools import setup
setup(name=rz
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rJrKrrLrXr_rBrY�dirnamerlr��samefile�shutil�copy2r�writerSrT�splitextr)	r�r`rEr<rKr�rY�dstr�s	         r%r:zPackageIndex.gen_setup�s���"�"�8�,�,���
�
�
�!�(�E�K�K��N�N�D�A�A�
�
�
���	�
�u�:�:��?�	��w�'�'��1�1�H��w���x�(�(�F�2�
#��g�l�l�6�8�4�4������s�+�+�#���0@�0@��3�0O�0O�#��L��3�/�/�/�"�H��b�g�l�l�6�:�6�6��<�<�
���
�
�
��a��-�-�-�u�Q�x�/?�/?�/?���(�(��2�2�1�5�5�5�	����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��O�
�
	� �.�&.�X�X�u�u�6���
�!�G���
s�AF,�,F0�3F0i c��|�d|��d}	t�|��}|�|��}t	|t
jj��r"td|�d|j	�d|j
�����|���}d}|j}d}d|vrP|�d��}	ttt|	����}|�|||||��t#|d	��5}
	|�|��}|rI|�|��|
�|��|dz
}|�|||||��nn�b|�|||
��ddd��n#1swxYwY||r|���SS#|r|���wwxYw)NzDownloading %szCan't download �: � rr5zcontent-lengthzContent-Length�wbTr9)r�r�r�r�r�r:r�r�rr�r��dl_blocksize�get_all�maxr|�int�
reporthookrr�r�rVr/r�)r�r>r`�fpr-r��blocknum�bs�size�sizesr.r�s            r%�_download_tozPackageIndex._download_to�s ���	�	�"�C�(�(�(�
��	�!�*�*�3�/�/�G����s�#�#�B��"�f�l�4�5�5�
�$�n�25�#�#�r�w�w�w����G�����g�g�i�i�G��H��"�B��D��7�*�
C����(8�9�9���3�s�E�?�?�+�+������X�x��T�B�B�B��h��%�%�

8����G�G�B�K�K�E������U�+�+�+��	�	�%�(�(�(� �A�
������X�x��T�J�J�J�J��������3�7�7�7�

8�

8�

8�

8�

8�

8�

8�

8�

8�

8�

8����

8�

8�

8�

8���
����
�
�
�
�
��r�
����
�
�
�
�
���s1�C3F8�
A;F�F8�F�F8�F�F8�8Gc��dSror�)r�r>r`rc�blksizeres      r%razPackageIndex.reporthook�s���r2c��|�d��rt|��S	t||j��S#tt
jjf$r]}d�d�|j	D����}|r|�
||��nt|�d|����|�Yd}~dSd}~wtj
j$r}|cYd}~Sd}~wtj
j$rD}|r|�
||j��ntd|�d|j����|�Yd}~dSd}~wt
jj$rC}|r|�
||j��nt|�d|j����|�Yd}~dSd}~wt
jjt(j
f$r:}|r|�
||��ntd|�d|����|�Yd}~dSd}~wwxYw)Nr1r[c�,�g|]}t|����Sr�)r})re�args  r%rPz)PackageIndex.open_url.<locals>.<listcomp>�s��7�7�7��C��H�H�7�7�7r2zDownload error for rZz7 returned a bad status line. The server might be down, )r-�
local_open�open_with_authr�r"�http�client�
InvalidURLrlrpr�rr:r�r��URLError�reason�
BadStatusLine�line�
HTTPException�socket)r�r>�warning�vr�s     r%r�zPackageIndex.open_url�sv���>�>�'�"�"�	#��c�?�?�"�	8�!�#�t�{�3�3�3���D�K�2�3�	B�	B�	B��(�(�7�7���7�7�7�8�8�C��
B��	�	�'�3�'�'�'�'�$����S�S�%9�:�:��A�(�'�'�'�'�'������|�%�	�	�	��H�H�H�H�H�H������|�$�	?�	?�	?��
?��	�	�'�1�8�,�,�,�,�$�n�(+���Q�X�X�&7�8�8�=>�?�-�,�,�,�,�,������{�(�	�	�	��
��	�	�'�1�6�*�*�*�*�$��S�S�!�&�&�"����	�+�*�*�*�*�*�������)�6�<�8�	8�	8�	8��
8��	�	�'�1�%�%�%�%�$�n�(+���Q�Q�&0�1�1�67�8�&�%�%�%�%�%�����	8���sL�;�G�AB.�.G�C�G�G�#9D"�"G�98E7�7#G�/G�Gc��t|��\}}|r3d|vr.|�dd���dd��}d|v�.nd}|�d��r
|dd�}tj�||��}|dks|�d	��r|�||��S|d
ks|�d��r|�||��S|�d��r|�	||��S|d
krBtj�tj
�|��d��S|�|d��|�||��S)Nz..�.�\�_�__downloaded__rPr*�svnzsvn+�gitzgit+zhg+r�rhT)rF�replacer,r_rBrlr-�
_download_svn�
_download_git�_download_hgr:r��url2pathnamer!r;r��_attempt_download)r�r@r>r<r.rEr`s       r%r9zPackageIndex._download_urls���*�#�.�.���h��	$��$�,�
B��|�|�D�#�.�.�6�6�t�S�A�A���$�,�
B��$�D��=�=��$�$�	�����9�D��7�<�<���-�-���U�?�
	9�f�/�/��7�7�
	9��%�%�c�8�4�4�4�
�u�_�	9�� 1� 1�&� 9� 9�	9��%�%�c�8�4�4�4�
�
�
�u�
%�
%�	9��$�$�S�(�3�3�3�
�v�
�	9��>�.�.�v�|�/D�/D�S�/I�/I�!�/L�M�M�M��K�K��T�"�"�"��)�)�#�x�8�8�8r2c�2�|�|d��dS)NT)r�rs  r%rzPackageIndex.scan_url0s������d�#�#�#�#�#r2c��|�||��}d|�dd�����vr|�|||��S|S)Nr�r�r�)rgr�r+�_download_html)r�r>r`r�s    r%r�zPackageIndex._attempt_download3s[���#�#�C��2�2���W�[�[���4�4�:�:�<�<�<�	��&�&�s�G�X�>�>�>��Or2c�t�t|��}|D]m}|���rWtjd|��r@|���tj|��|�||��cSn�n|���tj|��td|z���)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	rr~rdr�r�r_r,r�r)r�r>r�r`r�rus      r%r�zPackageIndex._download_html:s����H�~�~���	�	�D��z�z�|�|�
��9�@�$�G�G�=��J�J�L�L�L��I�h�'�'�'��-�-�c�8�<�<�<�<�<���
�	
�
�
����
�	�(�����=��C�D�D�Dr2c���tjdt��|�dd��d}d}|����d��r�d|vr�tj�|��\}}}}}}	|s�|�d��r�d	|d
d�vr�|d
d��d	d��\}}t|��\}
}|
rTd|
vr"|
�dd��\}}
d|�d
|
��}nd|
z}|}||||||	f}tj�
|��}|�d||��tj
d|�d|�d|����|S)Nz"SVN download support is deprecatedr8r9rr�zsvn:�@z//r4rh�:z --username=z --password=z'Doing subversion checkout from %s to %szsvn checkoutz -q r[)�warningsr��UserWarningr=r+r-r:r!r;�
_splituser�
urlunparser�r_�system)r�r>r`�credsr@�netlocrBrf�qr��auth�host�user�pwr?s               r%r�zPackageIndex._download_svnIs����
�:�K�H�H�H��i�i��Q����"�����9�9�;�;�!�!�&�)�)�
	9�c�S�j�
	9�,2�L�,A�,A�#�,F�,F�)�F�F�D�!�Q���
9�d�o�o�d�3�3�
9��t�A�B�B�x��
9�#�A�B�B�x�~�~�c�1�5�5����'��/�/�
��d��9��d�{�6�#'�:�:�c�1�#5�#5���b�b�BF�$�$��� K��� .�� 5��!�F�"�F�C��A�q�8�E� �,�1�1�%�8�8�C��	�	�;�S�(�K�K�K�
�	�	�u�u�u�c�c�c�8�8�D�E�E�E��r2c�J�tj�|��\}}}}}|�dd��d}|�dd��d}d}d|vr|�dd��\}}tj�||||df��}||fS)N�+r9r5r8rr�r�)r:r!�urlsplitr=�rsplit�
urlunsplit)r>�
pop_prefixr@r�rBrDr�revs        r%�_vcs_split_rev_from_urlz$PackageIndex._vcs_split_rev_from_url_s���,2�L�,A�,A�#�,F�,F�)����e�T����c�1�%�%�b�)���z�z�#�q�!�!�!�$�����$�;�	,����C��+�+�I�D�#��l�%�%�v�v�t�U�B�&G�H�H���C�x�r2c�8�|�dd��d}|�|d���\}}|�d||��tjd|�d|����|�0|�d	|��tjd
|�d|����|S)Nr8r9rT�r�zDoing git clone from %s to %szgit clone --quiet r[zChecking out %szgit -C z checkout --quiet �r=r�r�r_r��r�r>r`r�s    r%r�zPackageIndex._download_gitqs����>�>�#�q�)�)�!�,���/�/���/�E�E���S��	�	�1�3��A�A�A�
�	�	�s�s�s�H�H�=�>�>�>��	��I�I�'��-�-�-��I�I�������
�
�
�
�r2c�:�|�dd��d}|�|d���\}}|�d||��tjd|�d|����|�1|�d	|��tjd
|�d|�d���|S)
Nr8r9rTr�zDoing hg clone from %s to %szhg clone --quiet r[zUpdating to %sz	hg --cwd z
 up -C -r z -qr�r�s    r%r�zPackageIndex._download_hg�s����>�>�#�q�)�)�!�,���/�/���/�E�E���S��	�	�0�#�x�@�@�@�
�	�	�c�c�c�8�8�<�=�=�=��	��I�I�&��,�,�,��I�I��������
�
�
�
�r2c�*�tj|g|�R�dSro)rr�r s   r%r�zPackageIndex.debug�s ���	�#��������r2c�*�tj|g|�R�dSro)rr�r s   r%r�zPackageIndex.info�� ������t������r2c�*�tj|g|�R�dSro)rr�r s   r%r�zPackageIndex.warn�r�r2)r�r�NT)Fro)FFFN)FF)*r�r�r�r�r�r�r�r�r�rr�rr�rrr&r)r/r4r(r$r6r;rLr:r]rgrar�r9rr�r�r��staticmethodr�r�r�r�r�r��
__classcell__�r�s@r%rrs��������E�E�?E�'+�-�-�-�-�-�-�!�!�!�!�!�31�31�31�31�j'�'�'�'�  � � � �?�?�?���� 2�2�2�$
�
�
�:
�
�
�&�&�&�&�
�
�
�H�H�H�H�H�H���� 
)�
)�
)������� P� P� P�FAF�*.�J?�J?�J?�J?�X����&�&�&�P�L�"�"�"�H
�
�
�!8�!8�!8�!8�F9�9�9�:$�$�$����
E�
E�
E����,�����\��"��� ��� ������������r2rz!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c�T�|�d��}tj|��S)Nr)rLr��unescape)rK�whats  r%�
decode_entityr��s!���;�;�q�>�>�D��=����r2c�,�tt|��S)a
    Decode HTML entities in the given text.

    >>> htmldecode(
    ...     'https://../package_name-0.1.2.tar.gz'
    ...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
    'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
    )�
entity_subr�)�texts r%r�r��s���m�T�*�*�*r2c����fd�}|S)Nc������fd�}|S)Nc���tj��}tj���	�|i|��tj|��S#tj|��wxYwro)rw�getdefaulttimeout�setdefaulttimeout)rprq�old_timeoutrr�timeouts   ��r%�_socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeout�sd��� �2�4�4�K��$�W�-�-�-�
6��t�T�,�V�,�,��(��5�5�5�5���(��5�5�5�5���s�A�Ar�)rrr�r�s` �r%r�z'socket_timeout.<locals>._socket_timeout�s*����	6�	6�	6�	6�	6�	6��r2r�)r�r�s` r%�socket_timeoutr��s$���	�	�	�	�	��r2c���tj�|��}|���}t	j|��}|���}|�dd��S)a9
    Encode auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    �
r�)r:r!r<�encode�base64�	b64encoder�r�)r��auth_s�
auth_bytes�
encoded_bytes�encodeds     r%�_encode_authr��s[���\�
!�
!�$�
'�
'�F������J��$�Z�0�0�M��"�"�$�$�G��?�?�4��$�$�$r2c�$�eZdZdZd�Zd�Zd�ZdS)�
Credentialz:
    A username/password pair. Use like a namedtuple.
    c�"�||_||_dSro��username�password)r�r�r�s   r%r�zCredential.__init__�s�� ��
� ��
�
�
r2c#�.K�|jV�|jV�dSror�r�s r%�__iter__zCredential.__iter__�s(�����m�����m�����r2c�&�dt|��zS)Nz%(username)s:%(password)s)�varsr�s r%�__str__zCredential.__str__�s��*�T�$�Z�Z�7�7r2N)r�r�r�r�r�r�r�r�r2r%r�r��sK��������!�!�!����8�8�8�8�8r2r�c�@��eZdZ�fd�Zed���Zd�Zd�Z�xZS)�
PyPIConfigc�j��t�gd�d��}t���|��tj�tj�d��d��}tj�|��r|�	|��dSdS)z%
        Load from ~/.pypirc
        )r�r��
repositoryr��~z.pypircN)
�dict�fromkeysr�r�r_rBrl�
expanduserr�r�)r��defaults�rcr�s   �r%r�zPyPIConfig.__init__�s�����=�=�!G�!G�!G��L�L��
������"�"�"�
�W�\�\�"�'�,�,�S�1�1�9�
=�
=��
�7�>�>�"���	��I�I�b�M�M�M�M�M�	�	r2c����fd�����D��}tt�j|����S)Nc�d��g|],}��|d������*|��-S)r�)r�r~)re�sectionr�s  �r%rPz2PyPIConfig.creds_by_repository.<locals>.<listcomp>�sI���&
�&
�&
���x�x���.�.�4�4�6�6�&
��&
�&
�&
r2)�sectionsr�r|�_get_repo_cred)r��sections_with_repositoriess` r%�creds_by_repositoryzPyPIConfig.creds_by_repository�sR���&
�&
�&
�&
�#'�=�=�?�?�&
�&
�&
�"�
�C��+�-G�H�H�I�I�Ir2c��|�|d�����}|t|�|d�����|�|d�������fS)Nr�r�r�)r�r~r�)r�r��repos   r%r�zPyPIConfig._get_repo_cred�st���x�x���.�.�4�4�6�6���Z��H�H�W�j�)�)�/�/�1�1��H�H�W�j�)�)�/�/�1�1�
�
�
�	
r2c�v�|j���D]\}}|�|��r|cS�dS)z�
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)r��itemsr-)r�r>r��creds    r%�find_credentialzPyPIConfig.find_credentialsS��
!%� 8� >� >� @� @�	�	��J���~�~�j�)�)�
�����
�	�	r2)	r�r�r�r��propertyr�r�r�r�r�s@r%r�r��st�������	�	�	�	�	��J�J��X�J�
�
�
�������r2r�c���tj�|��}|\}}}}}}|�d��rtj�d���|dvrt|��\}	}
nd}	|	sMt���	|��}|r*t|��}	|j|f}tj
dg|�R�|	rodt|	��z}	||
||||f}
tj�|
��}tj�|��}|�d|	��ntj�|��}|�dt&��||��}|	rctj�|j��\}}}}}}||kr2||
kr,||||||f}
tj�|
��|_|S)	z4Open a urllib2 request, handling HTTP authenticationr�znonnumeric port: '')ro�httpsNz*Authenticating as %s for %s (from .pypirc)zBasic �
Authorizationz
User-Agent)r:r!r;r,rorprqr�r�r�r}r�rr�r�r�r��Request�
add_header�
user_agentr>)r>r��parsedr@r�rB�paramsrDrr��addressr�r�r?rr�rb�s2�h2�path2�param2�query2�frag2s                       r%rnrns����\�
"�
"�3�
'�
'�F�06�-�F�F�D�&�%�����s���<��k�$�$�%:�;�;�;�
�"�"��"�6�*�*�
��g�g����J��|�|�+�+�C�0�0���	J��t�9�9�D��=�#�%�D��H�A�I�D�I�I�I�I��.��,�t�,�,�,�����v�u�d�:���,�)�)�%�0�0���.�(�(��1�1�����?�D�1�1�1�1��.�(�(��-�-�����|�Z�0�0�0�	�����B��4�06�|�/D�/D�R�V�/L�/L�,��B��v�v�u�
��<�	4�B�'�M�	4����v�v�u�<�E��\�,�,�U�3�3�B�F�
�Ir2c�D�|�d��\}}}|r|nd|fS)zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r�N)�
rpartition)r�r��delims   r%r�r�;s0������,�,��D�%���#�D�D�t�d�*�*r2c��|Sror�)r>s r%�
fix_sf_urlr�Fs���Jr2c���tj�|��\}}}}}}tj�|��}t
j�|��rtj�|��S|�	d���rt
j�
|��r�g}tj|��D]�}	t
j�||	��}
|	dkr>t|
d��5}|���}ddd��n#1swxYwYnzt
j�
|
��r|	dz
}	|�d�|	�������d}
|
�|d�|���	��}d
\}}nd\}}}dd
i}t#j|��}tj�|||||��S)z7Read a local path, with special support for directoriesr4z
index.html�rNz<a href="{name}">{name}</a>)r.zB<html><head><title>{url}</title></head><body>{files}</body></html>r�)r>�files)���OK)r�zPath not foundz	Not foundr�z	text/html)r:r!r;r�r�r_rB�isfiler�r,r�r�rlrr�r2�format�io�StringIOr�r�)r>r@rArB�paramrDrr`rr��filepathrb�bodyr��status�messager��body_streams                  r%rmrmJs��/5�|�/D�/D�S�/I�/I�,�F�F�D�%����~�*�*�4�0�0�H�	�w�~�~�h���C��~�%�%�c�*�*�*�	
���s�	�	�C���
�
�h� 7� 7�C�����H�%�%�
	@�
	@�A��w�|�|�H�a�0�0�H��L� �
��(�C�(�(�%�B��7�7�9�9�D�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%�������x�(�(�
��S����L�L�6�=�=�1�=�E�E�F�F�F�F�5�
��;�;�3�d�i�i��.>�.>�;�?�?�D�#����� B������{�+�G��+�d�#�#�K��<�!�!�#�v�w���M�M�Ms�D(�(D,	�/D,	ro)r)Zr��sysr_rdrrTrwr�r�r�r��configparserr��http.clientro�urllib.parser:�urllib.request�urllib.error�	functoolsrr�
pkg_resourcesrrrrr	r
rrr
rrrrr�	distutilsr�distutils.errorsr�fnmatchr�setuptools.wheelr� setuptools.extern.more_itertoolsrr�rJ�IrrrKr�r=rW�__all__�_SOCKET_TIMEOUT�_tmplr�version_infor�r&rrFrrIrarrtrxr�r�r�rrr�r�r�r�r�r��RawConfigParserr�r�r�rnr�r�rmr�r2r%�<module>r!s���)�)�
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	�
�
�
�
�
�
�
�
�
�
�
�
�������������������������������������������������������������������������������
������+�+�+�+�+�+�������"�"�"�"�"�"�<�<�<�<�<�<��r�z�6�7�7���r�z�3�R�T�:�:���2�:�J�����R�Z�,�b�d�
3�
3�
9�
�
.�
4�
4�
6�
6�
�����
��F��
�\�\�
�W�^�S�-�
.�:��G�G�
�������0�����������B����26�+�� 
� 
� 
� 
�F
�
�
��b�j�@�"�$�G�G���L�L���L�$��������2�����.����B	�	�	�	�	�;�	�	�	�H�R�Z�<�
=�
=�
A�
����
	+�	+�	+�����%�%�%�*8�8�8�8�8�8�8�8�"#�#�#�#�#��-�#�#�#�L &�~�5�+�+�+�+�^+�+�+�1����0�0��@�@�����N�N�N�N�Nr2