� ��^i����ddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZ ddlZn #e$rdZYnwxYwddlZddlZddlZddlZddlZ ddlZn#e$rddlZYnwxYwddlZddlmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0e j1e2��Z3e j4d��Z5e j4d��Z6e j4d ��Z7e j4d ��Z8e j4d ��Z9e j4d ��Z:e j4d ��Z;e j4d��Zd�Z?d�Z@d�ZAdqd�ZBd�ZCd�ZDd�ZEejFd���ZGejFd���ZHejFdrd���ZIGd�deJ��ZKd�ZLGd�d eJ��ZMd!�ZNGd"�d#eJ��ZOe j4d$e jP��ZQd%�ZRdsd&�ZSd'�ZTd(�ZUd)�ZVd*�ZWd+�ZXe j4d,e jY��ZZe j4d-��Z[dsd.�Z\e j4d/��Z]d0�Z^d1�Z_d2�Z`d3Zad4�Zbd5�ZcGd6�d7eJ��ZdGd8�d9eJ��ZeGd:�d;eJ��Zfd�Zhd?�Zid@ZjGdA�dBeJ��Zke j4dC��Zle j4dD��Zme j4dE��ZndF�ZdG�Zoer:ddHlmpZqmrZrmsZsGdI�dJe$jt��ZtGdK�dLeq��ZpGdM�dNepe'��ZuejvddO�ZwewdPkr(GdQ�dRe$jx��ZxerGdS�dTe$jy��ZyGdU�dVe%jz��ZzerGdW�dXe%j{��Z{GdY�dZe%j|��Z|d[�Z}Gd\�d]eJ��Z~Gd^�d_e~��ZGd`�dae~��Z�Gdb�dce(��Z�Gdd�deeJ��Z�df�Z�Gdg�dheJ��Z�di�Z�dj�Z�dk�Z�dldmdndo�Z�dp�Z�dS)u�N)�deque)�iglob�)�DistlibException)� string_types� text_type�shutil� raw_input�StringIO�cache_from_source�urlopen�urljoin�httplib� xmlrpclib� splittype� HTTPHandler�BaseConfigurator� valid_ident� Container� configparser�URLError�ZipFile�fsdecode�unquote�urlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z ^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)c�F�����d����fd���fd���fd���|��S)ae Parse a marker string and return a dictionary containing a marker expression. The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in the expression grammar, or strings. A string contained in quotes is to be interpreted as a literal string, and a string not contained in quotes is a variable (such as os_name). c��t�|��}|r8|���d}||���d�}�ns|st d���|d}|dvrt d|z���d�|d��}|dd�}|g}|r�|d|krn�|d|kr |�|��|dd�}nwt�|��}|st d|z���|�|���d��||���d�}|��d�|��}t d|z���|�|��d�|��}|dd�� ��}||fS) Nrzunexpected end of inputz'"zinvalid expression: %s�rzerror in string literal: %szunterminated string: %s) � IDENTIFIER�match�groups�end� SyntaxError�replace�append� STRING_CHUNK�join�lstrip)� remaining�m�result�q�oq�parts�ss ��/builddir/build/BUILDROOT/alt-python311-pip-21.3.1-4.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_vendor/distlib/util.py� marker_varz parse_marker..marker_varAs��� � � �Y� '� '�� � /��X�X�Z�Z��]�F�!�!�%�%�'�'�(�(�+�I�I�� /��7�8�8� 8��!� �A���~�~�!�":�Y�"F�G�G�G����q�"�%�%�B�!�!�"�"� �I��C�E�� A��Q�<�1�$�$���q�\�R�'�'��L�L��$�$�$� )�!�"�"� �I�I�$�*�*�9�5�5�A��U�)�*G�)�*S�T�T�T��L�L������A��/�/�/� )�!�%�%�'�'�(�(� 3�I�� A��G�G�E�N�N��!�";�a�"?�@�@�@� �L�L��O�O�O��W�W�U�^�^�F�!�!�"�"� �,�,�.�.�I��y� � �c����|ro|ddkrc�|dd������\}}|ddkrtd|z���|dd����}n{�|��\}}|rit�|��}|snL|���d}||���d�}�|��\}}|||d�}|�i|}||fS)Nr�(r�)�unterminated parenthesis: %s��op�lhs�rhs)r(r#� MARKER_OPr r!r")r)r+r9r*r8r:�markerr1s ��r0� marker_exprz!parse_marker..marker_expres��� � ��1���,�,� &��y����}�';�';�'=�'=� >� >� �F�I���|�s�"�"�!�"@�9�"L�M�M�M�!�!�"�"� �,�,�.�.�I�I�'�Z� �2�2�N�C��� 9��O�O�I�.�.������X�X�Z�Z��]��%�a�e�e�g�g�h�h�/� �!+��I�!6�!6���Y���C�8�8��� 9��F��y� � r2c�����|��\}}|rOt�|��}|sn2||���d�}�|��\}}d||d�}|�O||fS)N�andr7)�ANDr r")r)r9r*r:r=s �r0� marker_andz parse_marker..marker_andxs����$��Y�/�/���Y�� 8�� � �)�$�$�A�� ��!�!�%�%�'�'�(�(�+�I�(�[��3�3�N�C���s�3�7�7�C� � 8��I�~�r2c�����|��\}}|rOt�|��}|sn2||���d�}�|��\}}d||d�}|�O||fS)N�orr7)�ORr r")r)r9r*r:rAs �r0r<zparse_marker..marker�s����#��I�.�.���Y�� 7�����#�#�A�� ��!�!�%�%�'�'�(�(�+�I�'�Z� �2�2�N�C���c�#�6�6�C� � 7��I�~�r2�)� marker_stringr<rAr=r1s @@@@r0� parse_markerrG8sx������"!�"!�"!�H!�!�!�!�!�!�& � � � � � � � � � � �6�-� � � r2c���|���}|r|�d��rdSt�|��}|st d|z���|���d}||���d�}dx}x}x}}|�r"|ddk�r|�dd��}|dkrt d|z���|d|�} ||dzd����}g}| r�t�| ��}|st d | z���|� |���d��| |���d�} | sn<| dd krt d | z���| dd����} | ��|sd}|�r�|dd kr�|dd����}t�|��}|st d |z���|���d}t|��} | j r| j st d|z���||���d����}�n.d�} |ddkr| |��\}}�n|�dd��}|dkrt d|z���|d|�} ||dzd����}t�| ��r| | ��\}} n�t�| ��}|st d| z���|���d} | |���d����} | rt d| z���d| fg}|rL|ddkrt d|z���|dd����}t!|��\}}|r|ddkrt d|z���|s|}n$|�dd�d�|D������}t%||||||���S)z� Parse a requirement passed in as a string. Return a Container whose attributes contain the various parts of the requirement. �#Nzname expected: %sr�[�]rzunterminated extra: %szmalformed extra: %s�,zcomma expected in extras: %s�@zinvalid URI: %szInvalid URL: %sc�t�t�|��}d}|�rg} |���d}||���d�}t�|��}|st d|z���|���d}|�||f��||���d�}|r |ddkrnO|dd����}|sn0t�|��}|st d|z�����|sd}||fS)z| Return a list of operator, version tuples if any are specified, else None. NTrzinvalid version: %srLr�invalid constraint: %s)� COMPARE_OPr r!r"�VERSION_IDENTIFIERr#r%r()� ver_remainingr*�versionsr8�vs r0� get_versionsz'parse_requirement..get_versions�sT�� �$�$�]�3�3�����(�!�H�X��X�X�Z�Z��]��(5�a�e�e�g�g�h�h�(?� �.�4�4�]�C�C�� �U�"-�.C�m�.S�"T�"T�T��H�H�J�J�q�M�� ����Q��0�0�0�(5�a�e�e�g�g�h�h�(?� �,�"� �a�0@�C�0G�0G�!�(5�a�b�b�(9�(@�(@�(B�(B� � -�"�!�&�,�,�]�;�;�� �X�"-�.F��.V�"W�"W�W�%X�&$�(�#'����.�.r2r4r5r6rOz~=�;zinvalid requirement: %szunexpected trailing data: %s� �, c��g|]}d|z��S)z%s %srE)�.0�cons r0� z%parse_requirement.. s��,O�,O�,O�s�W�s�]�,O�,O�,Or2)�name�extras� constraintsr<�url� requirement)�strip� startswithrr r#r!r"�findr(r%� NON_SPACEr�scheme�netlocrPrQrGr'r)�reqr)r*�distnamer^� mark_exprrS�uri�ir/�trU�_rT�rss r0�parse_requirementrp�s��� � � � � �I� �� �,�,�S�1�1���t�����#�#�A� �;��-� �9�:�:�:��x�x�z�z�!�}�H��!�%�%�'�'�(�(�#�I�*.�.�F�.�Y�.��C���Y�q�\�S�(�(� �N�N�3�� "� "�� �q�5�5��6��B�C�C� C� �a��c�N���a�!�e�f�f�%�,�,�.�.� ���� �� � ��#�#�A�� =�!�"7�!�";�<�<�<� �M�M�!�(�(�*�*�Q�-� (� (� (��!�%�%�'�'�(�(� �A�� ����t�s�{�{�!�"@�1�"D�E�E�E��!�"�"�� � ���A�� �� ��F��G+� �Q�<�3� � �!�!�"�"� �,�,�.�.�I���� �*�*�A�� A�!�"3�i�"?�@�@�@��(�(�*�*�Q�-�C��� � �A� �H� ;��� ;�!�"3�c�"9�:�:�:�!�!�%�%�'�'�(�(�+�2�2�4�4�I�I� /� /� /�@��|�s�"�"�&2�l�9�&=�&=�#��)�)��N�N�3��*�*���q�5�5�%�&D�y�&P�Q�Q�Q��a��c�N��%�a�!�e�f�f�-�4�4�6�6� ��#�#�A�&�&� +�".�,�q�/�/�K�H�a�a�*�0�0��3�3�A��H�)�*B�Q�*F�G�G�G���� � �1� �A��!�%�%�'�'�(�(� �*�*�,�,�A��H�)�*B�Q�*F�G�G�G�!%�q� �{�H��7� �Q�<�3� � ��7�)�C�D�D� D��a�b�b�M�(�(�*�*� �+�I�6�6�� �9��F�Y�q�\�S�(�(��8�9�D�E�E�E� �R� ��� ���$�)�)�,O�,O�h�,O�,O�,O�"P�"P�"P� Q�� �(�6�x�%�3�B� @� @� @�@r2c���d�}i}|D]�\}}}tj�||��}t|��D]�}tj�||��} t| ��D]v} ||| ��} |�|�| d���'||| ��} |�tjjd���d��} | dz| z|| <�w����|S)z%Find destinations for resources filesc��|�tjjd��}|�tjjd��}|�|��sJ�|t |��d��d��S�N�/)r$�os�path�seprc�lenr()�rootrvs r0� get_rel_pathz)get_resources_dests..get_rel_pathsk���|�|�B�G�K��-�-���|�|�B�G�K��-�-�����t�$�$�$�$�$��C��I�I�J�J��&�&�s�+�+�+r2Nrt)rurvr'r�popr$rw�rstrip)�resources_root�rulesrz� destinations�base�suffix�dest�prefix�abs_base�abs_glob�abs_path� resource_file�rel_path�rel_dests r0�get_resources_destsr�s��,�,�,��L�#� L� L���f�d�����n�d�3�3���f� � � L� L�H��w�|�|�H�f�5�5�H�!�(�O�O� L� L�� ,� �^�X� F� F� ��<� �$�$�]�D�9�9�9�9�+�|�H�h�?�?�H�#�|�|�B�G�K��=�=�D�D�S�I�I�H�2:�S�.�8�2K�L��/�/� L� L� �r2c��ttd��rd}n.tjttdtj��k}|S)N� real_prefixT� base_prefix)�hasattr�sysr��getattr�r+s r0�in_venvr�(s=���s�M�"�"�G������w�s�M�3�:�F�F�F�� �Mr2c�f�tj}t|t��st |��}|S�N)r�� executable� isinstancerrr�s r0�get_executabler�2s/���^�F� �f�i� (� (�"��&�!�!�� �Mr2c��|} t|��}|}|s|r|}|r)|d���}||vrn |rd|||fz}�C|S)NTrz %c: %s %s)r �lower)�prompt� allowed_chars� error_prompt�default�pr/�cs r0�proceedr�Ds|���A� =� �a�L�L�� ��� �W� ��A� � =��!�� � � � �A��M�!�!��� =� �A�|�V�#<�<�� =� �Hr2c��t|t��r|���}i}|D]}||vr ||||<�|Sr�)r�r�split)�d�keysr+�keys r0�extract_by_keyr�TsQ���$� �%�%���z�z�|�|�� �F��!�!�� �!�8�8��C�&�F�3�K�� �Mr2c��tjddkrtjd��|��}|���}t |��} t j|��}|ddd}|���D]>\}}|���D]$\}}|�d|��}t|��} | �J�| ||<�%�?|S#t$r|� dd��YnwxYwd�} tj ��} | | |��nX#tj$rF|���t!j|��}t |��}| | |��YnwxYwi}| ���D]C} ix|| <}| �| ��D]$\} }| �d|��}t|��} | �J�| || <�%�D|S) Nr��utf-8� extensionszpython.exports�exports� = c�~�t|d��r|�|��dS|�|��dS)N� read_file)r�r��readfp)�cp�streams r0� read_streamz!read_exports..read_streamqsD�� �2�{� #� #� � �L�L�� � � � � � �I�I�f� � � � � r2)r�� version_info�codecs� getreader�readr �json�load�items�get_export_entry� Exception�seekr� ConfigParser�MissingSectionHeaderError�close�textwrap�dedent�sections)r��data�jdatar+�group�entries�krTr/�entryr�r�r�r]�values r0� read_exportsr�]s:�� ����a���*��!�'�*�*�6�2�2�� �;�;�=�=�D� �d�^�^�F� �� �&�!�!���|�$�%5�6�y�A��$�l�l�n�n� #� #�N�E�7�� � ��� #� #���1�!"���A�A�&��(��+�+���(�(�(�"��� � �  #� � �� ����� � �A�q������������� � "� $� $�B� �� �B������� � 1� � � �� � ������t�$�$���$����� �B�������  ���� �F��{�{�}�}�"�"�� "�"��s� �g��8�8�C�=�=� "� "�K�D�%�!�T�T�5�5�)�A�$�Q�'�'�E��$�$�$�!�G�D�M�M�  "� �Ms&�A�>�'�*�*�?�+�g�5�C�C��W�^�^�G�,�,�?�R�W�^�^�G�5L�5L�?�4�w�>�C�� F� ��'D�!D�E�E�E� �O�F�G� ,� ,� ,� ���w�'�'�'�'�'r2Nc���tj�|��rJ�|�tj�|����t �d||��|jsn|�t|d��}ntj|d|���} tj ||��|� ��n#|� ��wxYw|� |��dS)NzCopying stream %s to %s�wb�w��encoding)rurv�isdirrrrrr�openr�r � copyfileobjr�r )r��instreamrr&� outstreams r0� copy_streamzFileOperator.copy_streams����7�=�=��)�)�)�)�)� ��������0�0�1�1�1�� � �-�x��A�A�A��|� "��� ��$�/�/� � �"�K���x�H�H�H� � "��"�8�Y�7�7�7����!�!�!�!�� ���!�!�!�!���� ���w�'�'�'�'�'s �"C � C"c��|�tj�|����|jsptj�|��rtj|��t|d��5}|�|��ddd��n #1swxYwY|� |��dS)Nr#) rrurvrrrr�r(r�r )r�rvr��fs r0�write_binary_filezFileOperator.write_binary_file's��� ��������-�-�.�.�.��|� ��w�~�~�d�#�#� �� �$�����d�D�!�!� �Q����� � � � � � � � � � � � � � ���� � � � � ���t�$�$�$�$�$s�=B�B#�&B#c�X�|�||�|����dSr�)r/�encode)r�rvr�r&s r0�write_text_filezFileOperator.write_text_file0s*�� ���t�T�[�[��%:�%:�;�;�;�;�;r2c�^�tjdks tjdkr�tjdkrz|D]y}|jrt�d|���%tj|��j|z|z}t�d||��tj||���vdSdSdS)N�posix�javazchanging mode of %szchanging mode of %s to %o) rur]�_namerrrr�st_mode�chmod)r��bits�mask�filesr.�modes r0�set_modezFileOperator.set_mode3s��� �7�g� � �"�'�V�"3�"3���G�8K�8K�� &� &���<�&��K�K� 5�q�9�9�9�9��G�A�J�J�.��5��=�D��K�K� ;�Q��E�E�E��H�Q��%�%�%�%�#4�"3�8K�8K� &� &r2c�0�|�dd|��S)Nimi�)r=)r/r.s r0�zFileOperator.?s��q�z�z�%���'C�'C�r2c���tj�|��}||jvr�tj�|��s�|j�|��tj�|��\}}|�|��t� d|z��|j stj |��|j r |j �|��dSdSdSdS)Nz Creating %s)rurvrrrr r�rrrr�mkdirrr)r�rvr�r.s r0rzFileOperator.ensure_dirAs����w���t�$�$�� �t�|� #� #�B�G�N�N�4�,@�,@� #� �L� � �T� "� "� "��7�=�=��&�&�D�A�q� �O�O�A� � � � �K�K� ��,� -� -� -��<� ��������{� ,��!�%�%�d�+�+�+�+�+� $� #� #� #� ,� ,r2c��t|| ��}t�d||��|js�|s|�||��r3|sd}n.|�|��sJ�|t |��d�}i}|r)ttd��rtj j |d<tj |||dfi|��|� |��|S)NzByte-compiling %s to %s�PycInvalidationMode�invalidation_modeT) r rrrrrcrxr�� py_compilerC� CHECKED_HASH�compiler ) r�rv�optimize�forcer��hashed_invalidation�dpath�diagpath�compile_kwargss r0� byte_compilezFileOperator.byte_compileMs���!�$�H� �5�5��� � �-�t�U�;�;�;��|� N�� 2�� � �4��/�/� 2��2�#�H�H��?�?�6�2�2�2�2�2�#�C��K�K�L�L�1�H��N�"� b�w�z�;P�'Q�'Q� b�6@�6T�6a��2�3� � �t�U�H�d� M� M�n� M� M� M� ���u�%�%�%�� r2c��tj�|���r+tj�|��r�tj�|��sft �d|��|jstj |��|j r%||j vr|j � |��dSdSdStj�|��rd}nd}t �d||��|jstj |��|j r'||j vr |j � |��dSdSdSdS)NzRemoving directory tree at %s�link�filezRemoving %s %s)rurvrr'rr�debugrr r�rrr�r)r�rvr/s r0�ensure_removedzFileOperator.ensure_removed^sX�� �7�>�>�$� � � 8��w�}�}�T�"�"� 8�2�7�>�>�$�+?�+?� 8�� � �<�d�C�C�C��|�(��M�$�'�'�'��;�7��t�0�0�0��)�0�0��6�6�6�6�6�7�7�0�0��7�>�>�$�'�'���A�A��A�� � �-�q�$�7�7�7��|�$��I�d�O�O�O��;�8��t�1�1�1��*�1�1�$�7�7�7�7�7�% 8� 8� 8�8�1�1r2c���d}|sitj�|��r tj|tj��}n*tj�|��}||krn|}|�i|Sr)rurvr�access�W_OKr)r�rvr+�parents r0� is_writablezFileOperator.is_writablessp����� ��w�~�~�d�#�#� ���4���1�1����W�_�_�T�*�*�F���~�~���D�� �� r2c�\�|jsJ�|j|jf}|���|S)zV Commit recorded changes, turn off recording, return changes. )rrrr)r�r+s r0�commitzFileOperator.commits8�� �{���{��#�T�%6�6�� ������� r2c���|js�t|j��D]5}tj�|��rtj|���6t|jd���}|D]o}tj |��}|rC|dgksJ�tj� ||d��}tj |��tj |���p|� ��dS)NT)�reverse� __pycache__r) r�listrrurvrr��sortedr�listdirr'�rmdirr)r�r.�dirsr��flist�sds r0�rollbackzFileOperator.rollback�s����|� ��$�,�-�-� !� !���7�>�>�!�$�$�!��I�a�L�L�L���$�+�T�:�:�:�D�� � ��� �1� � ���!� �]�O�3�3�3�3�����a��q��2�2�B��H�R�L�L�L���� � � � � �������r2�F�Tr�)FFNF)r�r�r�r�rr rr!r,r/r2r=�set_executable_moderrNrSrXrZrerEr2r0r�r��s���������� "�"�"� )�)�)�C�C�C�((�(�(�(�" (� (� (� (�%�%�%�<�<�<� &� &� &�D�C�� ,� ,� ,�����"8�8�8�* � � ��������r2r�c� �|tjvrtj|}nt|��}|�|}nM|�d��}t ||�d����}|D]}t ||��}�|S)N�.r)r��modules� __import__r�r�r{)� module_name� dotted_path�modr+r.r�s r0�resolverp�s����c�k�!�!��k�+�&�����%�%��������!�!�#�&�&����e�i�i��l�l�+�+��� (� (�A��V�Q�'�'�F�F� �Mr2c�D�eZdZd�Zed���Zd�Zd�Zej Z dS)� ExportEntryc�>�||_||_||_||_dSr��r]r�r�r�)r�r]r�r�r�s r0r�zExportEntry.__init__�s"���� ��� ��� ��� � � r2c�6�t|j|j��Sr�)rpr�r�r s r0r�zExportEntry.value�s���t�{�D�K�0�0�0r2c �H�d|j�d|j�d|j�d|j�d� S)Nz rtr s r0�__repr__zExportEntry.__repr__�s2���04� � � �4�;�;�;�04� � � �T�Z�Z�Z�I� Ir2c��t|t��sd}n@|j|jko/|j|jko|j|jko|j|jk}|Sr)r�rrr]r�r�r�)r��otherr+s r0�__eq__zExportEntry.__eq__�sh���%��-�-� 1��F�F��i�5�:�-�0��k�U�\�1�0��k�U�\�1�0��j�E�K�/� �� r2N) r�r�r�r�r�r�rxr{r��__hash__rEr2r0rrrr�sb��������� �1�1��_�1�I�I�I������H�H�Hr2rrz�(?P(\w|[-.+])+) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? c��t�|��}|sd}d|vsd|vrtd|z���n�|���}|d}|d}|�d��}|dkr|d}}n0|dkrtd|z���|�d��\}}|d } | �d|vsd|vrtd|z���g} nd �| �d ��D��} t |||| ��}|S) NrJrKzInvalid specification '%s'r]�callabler�rrr�c�6�g|]}|�����SrE�rb)rZr.s r0r\z$get_export_entry..�s ��9�9�9�1�Q�W�W�Y�Y�9�9�9r2rL)�ENTRY_RE�searchr� groupdict�countr�rr) � specificationr*r+r�r]rv�colonsr�r�r�s r0r�r��sX����� �&�&�A� �:��� �-� � �3�-�#7�#7�"�$*�,9�$:�;�;� ;�$8� �K�K�M�M����y����}�����C���� �Q�;�;�!�4�F�F�F���{�{�&�(.�0=�(>�?�?�?�!�Z�Z��_�_�N�F�F��'� �� �=��m�#�#�s�m�';�';�&�(.�0=�(>�?�?�?��E�E�9�9�� � �C�(8�(8�9�9�9�E��T�6�6�5�9�9�� �Mr2c��|�d}tjdkr.dtjvr tj�d��}ntj�d��}tj�|��r=tj|tj��}|st� d|��nG tj |��d}n/#t$r"t� d |d� ��d }YnwxYw|s.tj��}t� d |��tj�||��S) a� Return the default base location for distlib caches. If the directory does not exist, it is created. Use the suffix provided for the base directory, and default to '.distlib' if it isn't provided. On Windows, if LOCALAPPDATA is defined in the environment, then it is assumed to be a directory, and will be the parent directory of the result. On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home directory - using os.expanduser('~') - will be the parent directory of the result. The result is just the directory '.distlib' in the parent directory as determined above, or with the name specified with ``suffix``. Nz.distlib�nt� LOCALAPPDATAz $localappdata�~z(Directory exists but is not writable: %sTzUnable to create %s)�exc_infoFz#Default location unusable, using %s)rur]�environrv� expandvars� expanduserr'rUrVr�warning�makedirs�OSErrorr�r�r')r�r+�usables r0�get_cache_baser��s:���~��� �w�$���>�R�Z�7�7���#�#�O�4�4�����#�#�C�(�(�� �w�}�}�V��� ���6�2�7�+�+��� O� �N�N�E�v� N� N� N�� � �K�� � � ��F�F��� � � � �N�N�0�&�4�N� H� H� H��F�F�F� ���� �F��!�#�#�����<�f�E�E�E� �7�<�<��� '� '�'s�?C�)D�Dc��tj�tj�|����\}}|r|�dd��}|�tjd��}||zdzS)a Convert an absolute path to a directory name for use in a cache. The algorithm used is: #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. #. Any occurrence of ``os.sep`` is replaced with ``'--'``. #. ``'.cache'`` is appended. r�z---z--z.cache)rurv� splitdriverr$rw)rvr�r�s r0�path_to_cache_dirr�sj�� �7� � �b�g�o�o�d�3�3� 4� 4�D�A�q��"� �I�I�c�5� !� !�� � � �"�&�$���A� �q�5�8� �r2c�:�|�d��s|dzS|Srs)�endswith)r/s r0� ensure_slashr�$s"�� �:�:�c�?�?���3�w�� �Hr2c���dx}}d|vr9|�dd��\}}d|vr|}n|�dd��\}}|rt|��}|rt|��}|||fS)NrMrr�)�rsplitr�r)rg�username�passwordr�s r0�parse_credentialsr�*s�����H�x� �f�}�}����s�A�.�.���� �f� � ��H�H�!'���c�1�!5�!5� �H�h��%��8�$�$���%��8�$�$�� �X�v� %�%r2c�V�tjd��}tj|��|S)N�)ru�umaskr�s r0�get_process_umaskr�9s$�� �X�d�^�^�F��H�V���� �Mr2c�r�d}d}t|��D]\}}t|t��sd}n�|�J�|S)NTF)� enumerater�r)�seqr+rlr/s r0�is_string_sequencer�>sV�� �F� �A��#�������1��!�\�*�*� ��F� �E� � �=�=�=� �Mr2z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z -py(\d\.?\d?)c�z�d}d}t|���dd��}t�|��}|r1|�d��}|d|����}|r{t |��t |��dzkrXtjtj |��dz|��}|r,|� ��}|d|�||dzd�|f}|�Gt�|��}|r+|�d��|�d��|f}|S)zw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None NrW�-rz\br�) rr$�PYTHON_VERSIONr�r��startrx�rer �escaper"�PROJECT_NAME_AND_VERSION)�filename� project_namer+�pyverr*�ns r0�split_filenamer�Ms+�� �F� �E��x� � �(�(��c�2�2�H����h�'�'�A��(����� � ���J�Q�W�W�Y�Y�J�'���;��H� � ��L�(9�(9�A�(=�=�=� �H�R�Y�|�,�,�u�4�h� ?� ?�� � ;������A��b�q�b�\�8�A��E�F�F�#3�U�:�F� �~� $� *� *�8� 4� 4�� � 3��W�W�Q�Z�Z�������U�2�F� �Mr2z-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$c���t�|��}|std|z���|���}|d������|dfS)z� A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. z$Ill-formed name/version string: '%s'r]�ver)�NAME_VERSION_REr rr�rbr�)r�r*r�s r0�parse_name_and_versionr�isj�� ���a� � �A� �M��G�!�K�L�L�L� � � � � �A� �V�9�?�?� � � "� "� $� $�a��h� .�.r2c��t��}t|pg��}t|pg��}d|vr|�d��||z}|D]�}|dkr|�|���|�d��rE|dd�}||vrt�d|z��||vr|�|���x||vrt�d|z��|�|����|S)N�*r�rzundeclared extra: %s)r�r�r rcrr�)� requested� availabler+�r�unwanteds r0� get_extrasr�xs�� �U�U�F��I�O��$�$�I��I�O��$�$�I� �i�����������)��� � � �� ��8�8� �J�J�q�M�M�M�M� �\�\�#� � � �����u�H��y�(�(����5��@�A�A�A��6�!�!�� � �h�'�'�'��� �!�!����5��9�:�:�:� �J�J�q�M�M�M�M� �Mr2c��i} t|��}|���}|�d��}|�d��st�d|��n1t jd��|��}tj |��}n3#t$r&}t� d||��Yd}~nd}~wwxYw|S)Nz Content-Typezapplication/jsonz(Unexpected response for JSON request: %sr�z&Failed to get external data for %s: %s) r r�getrcrrRr�r�r�r�r�� exception)r`r+�resp�headers�ct�reader�es r0�_get_external_datar��s��� �F�K��s�|�|���)�)�+�+�� �[�[�� (� (���}�}�/�0�0� '� �L�L�C�R� H� H� H� H�.�V�%�g�.�.�t�4�4�F��Y�v�&�&�F��� �K�K�K����A�3��J�J�J�J�J�J�J�J�����K���� �Ms�BB� C�)C � Cz'https://www.red-dove.com/pypi/projects/c��|d����d|�d�}tt|��}t|��}|S)Nrrtz /project.json��upperr�_external_data_base_urlr�)r]r`r+s r0�get_project_datar��sB��"&�q�'�-�-�/�/�/�/�4�4�4� 8�C� �)�3� /� /�C� �� $� $�F� �Mr2c��|d����d|�d|�d�}tt|��}t|��S)Nrrtz /package-z.jsonr�)r]�versionr`s r0�get_package_datar��sD��%)�!�W�]�]�_�_�_�_�d�d�d�G�G�G� D�C� �)�3� /� /�C� �c� "� "�"r2c�$�eZdZdZd�Zd�Zd�ZdS)�Cachez� A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. c�d�tj�|��stj|��tj|��jdzdkrt �d|��tj�tj� |����|_ dS)zu Initialise an instance. :param base: The base directory where the cache should be located. �?rzDirectory '%s' is not privateN) rurvr'r�rr7rr�r�normpathr�)r�r�s r0r�zCache.__init__�s����w�}�}�T�"�"� � �K�� � � � �G�D�M�M� !�D� (�Q� .� .� �N�N�<�d� C� C� C��G�O�O�B�G�$4�$4�T�$:�$:�;�;�� � � r2c� �t|��S)zN Converts a resource prefix to a directory name in the cache. )r�)r�r�s r0� prefix_to_dirzCache.prefix_to_dir�s��!��(�(�(r2c���g}tj|j��D]�}tj�|j|��} tj�|��stj�|��rtj|��n3tj�|��rtj |����#t$r|� |��Y��wxYw|S)z" Clear the cache. ) rur`r�rvr'rrr�r'r r�r�r%)r�� not_removed�fns r0�clearz Cache.clear�s���� ��*�T�Y�'�'� '� '�B�����d�i��,�,�B� '��7�>�>�"�%�%�&������);�);�&��I�b�M�M�M�M��W�]�]�2�&�&�&��M�"�%�%�%���� '� '� '��"�"�2�&�&�&�&�&� '�����s�BC � C-�,C-N)r�r�r��__doc__r�r�r�rEr2r0r�r��sK�������� <� <� <�)�)�)� ����r2r�c�2�eZdZdZd�Zd d�Zd�Zd�Zd�ZdS) � EventMixinz1 A very simple publish/subscribe system. c��i|_dSr�)� _subscribersr s r0r�zEventMixin.__init__�s������r2Tc��|j}||vrt|g��||<dS||}|r|�|��dS|�|��dS)a` Add a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be added (and called when the event is published). :param append: Whether to append or prepend the subscriber to an existing subscriber list for the event. N)r�rr%� appendleft)r��event� subscriberr%�subs�sqs r0r zEventMixin.add�so��� �� �� � ��� �-�-�D��K�K�K��e��B�� *�� � �*�%�%�%�%�%�� � �j�)�)�)�)�)r2c�v�|j}||vrtd|z���||�|��dS)z� Remove a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be removed. zNo subscribers: %rN)r�r�r�)r�r�r�r�s r0r�zEventMixin.remove�sI��� �� �� � ��1�E�9�:�:� :� �U� ���:�&�&�&�&�&r2c�R�t|j�|d����S)z� Return an iterator for the subscribers for an event. :param event: The event to return subscribers for. rE)�iterr�r�)r�r�s r0�get_subscriberszEventMixin.get_subscriberss%�� �D�%�)�)�%��4�4�5�5�5r2c��g}|�|��D]Q} ||g|�Ri|��}n,#t$rt�d��d}YnwxYw|�|���Rt�d||||��|S)a^ Publish a event and return a list of values returned by its subscribers. :param event: The event to publish. :param args: The positional arguments to pass to the event's subscribers. :param kwargs: The keyword arguments to pass to the event's subscribers. z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)r�r�rr�r%rR)r�r��args�kwargsr+r�r�s r0�publishzEventMixin.publish s������.�.�u�5�5� !� !�J� �"� �5�:�4�:�:�:�6�:�:����� � � �� � �!E�F�F�F����� ���� �M�M�%� � � � �� � �F��D�&�&� 2� 2� 2�� s� (�&A�ANrg) r�r�r�r�r�r r�r�r�rEr2r0r�r��sn�����������*�*�*�*�( '� '� '�6�6�6�����r2r�c�f�eZdZd�Zd�Zd d�Zd�Zd�Zd�Zd�Z e d ���Z e d ���Z d S) � Sequencerc�H�i|_i|_t��|_dSr�)�_preds�_succsr��_nodesr s r0r�zSequencer.__init__(s���� ��� ��e�e�� � � r2c�:�|j�|��dSr�)r�r )r��nodes r0�add_nodezSequencer.add_node-s�� � ��������r2Fc�0�||jvr|j�|��|r�t|j�|d����D]}|�||���t|j�|d����D]}|�||���t |j�����D]\}}|s|j|=�t |j�����D]\}}|s|j|=�dSdS)NrE)r�r�r�r�r�r�r^r�)r�r��edgesr�r/r�rTs r0� remove_nodezSequencer.remove_node0s3�� �4�;� � � �K� � �t� $� $� $� � '�������r�2�2�3�3� %� %��� � �A�t�$�$�$�$�������r�2�2�3�3� %� %��� � �D�!�$�$�$�$��T�[�.�.�0�0�1�1� '� '���1��'�� �A����T�[�.�.�0�0�1�1� '� '���1��'�� �A��� '� '� '� 'r2c���||ksJ�|j�|t�����|��|j�|t�����|��dSr�)r�� setdefaultr�r r�)r��pred�succs r0r z Sequencer.add@si���t�|�|�|�|� � ���t�S�U�U�+�+�/�/��5�5�5� � ���t�S�U�U�+�+�/�/��5�5�5�5�5r2c�(�||ksJ� |j|}|j|}n #t$rtd|z���wxYw |�|��|�|��dS#t$rt|�d|�����wxYw)Nz%r not a successor of anythingz not a successor of )r�r��KeyErrorr�r�)r�r�r��preds�succss r0r�zSequencer.removeEs����t�|�|�|�|� F��K��%�E��K��%�E�E��� F� F� F��=��D�E�E� E� F���� H� �L�L�� � � � �L�L�� � � � � ��� H� H� H��4�4�4���F�G�G� G� H���s�%�A�*A2�2Bc�8�||jvp||jvp||jvSr�)r�r�r�)r��steps r0�is_stepzSequencer.is_stepRs.���� �#�$�t�t�{�':�$��� �#� %r2c� �|�|��std|z���g}g}t��}|�|��|r�|�d��}||vr1||kr*|�|��|�|��nZ|�|��|�|��|j�|d��}|� |��|��t|��S)Nz Unknown: %rrrE) rr�r�r%r{r�r r�r��extend�reversed)r��finalr+�todo�seenrr�s r0� get_stepszSequencer.get_stepsVs���|�|�E�"�"� 4��]�U�2�3�3� 3������u�u�� � � �E����� #��8�8�A�;�;�D��t�|�|� �5�=�=��M�M�$�'�'�'��M�M�$�'�'�'���������� � �d�#�#�#�� ����b�1�1��� � �E�"�"�"�� #� ����r2c�v��������dg�g�i�i�g�|j��������fd���D]}|�vr �|����S)Nrc�<���d�|<�d�|<�dxxdz cc<� �|�� �|}n#t$rg}YnwxYw|D]T}|�vr+� |��t�|�|���|<�1|� vrt�|�|���|<�U�|�|krZg} � ���}|�|��||krn�1t |��}� �|��dSdS)Nrr)r%r��minr{�tuple) r�� successors� successor�connected_component� component�graph�index� index_counter�lowlinksr+�stack� strongconnects �������r0rz3Sequencer.strong_connections..strongconnectzsx���'��*�E�$�K�*�1�-�H�T�N� �!� � � �� !� � � � �L�L�� � � � �"�4�[� � ��� � � �� � � � ����'� J� J� ��H�,�,�!�M�)�,�,�,�%(��$����8K�%L�%L�H�T�N�N��%�'�'�&)��$���i�8H�%I�%I�H�T�N����~��t��,�,�&(�#�0� %� � � � �I�'�.�.�y�9�9�9� �D�(�(�%�0�"�"5�6�6� �� � �i�(�(�(�(�(�-�,s�A� A�A)r�) r�r�rrrrr+rrs @@@@@@@r0�strong_connectionszSequencer.strong_connectionsos������������ ���������� �� )� )� )� )� )� )� )� )� )� )� )�D� $� $�D��8�#�#�� �d�#�#�#��� r2c ��dg}|jD]0}|j|}|D]}|�d|�d|�d�����1|jD]}|�d|z���|�d��d�|��S)Nz digraph G {z z -> rVz %s;�}� )r�r%r�r')r�r+r�r�r�r�s r0�dotz Sequencer.dot�s�������K� <� <�D��K��%�E�� <� <��� � � �t�t�t�T�T�T�:�;�;�;�;� <��K� *� *�D� �M�M�'�D�.� )� )� )� )�� � �c�����y�y�� � � r2Nrf) r�r�r�r�r�r�r r�rr �propertyrrrEr2r0r�r�'s���������� ���'�'�'�'� 6�6�6� H� H� H�%�%�%� � � �2�0�0��X�0�d� !� !��X� !� !� !r2r�)�.tar.gz�.tar.bz2�.tar�.zip�.tgz�.tbz�.whlTc���� ��� fd�}tj�����t���� d}|�x|�d��rd}n`|�d��rd}d}nF|�d��rd}d }n,|�d ��rd }d }nt d |z��� |dkr7t |d ��}|r$|���}|D] }||���n;tj ||��}|r$|� ��}|D] }||���|dkrftj ddkrP|� ��D];} t| jt ��s| j�d��| _�<|����|r|���dSdS#|r|���wwxYw)Nc�P��t|t��s|�d��}tj�tj��|����}|����r|�tjkrtd|z���dS)Nr�zpath outside destination: %r) r�r�decoderurvrr'rcrwr�)rvr��dest_dir�plens ��r0� check_pathzunarchive..check_path�s�����$� �*�*� (��;�;�w�'�'�D� �G�O�O�B�G�L�L��4�8�8� 9� 9���|�|�H�%�%� A��4��B�F�):�):��;�a�?�@�@� @�*;�):r2)r"r%�zip)rr#�tgzzr:gz)r r$�tbzzr:bz2r!�tarr�zUnknown format for %rrr�r�)rurvrrxr�r�r�namelist�tarfiler(�getnamesr�r�� getmembersr�r]rr(� extractallr�) �archive_filenamer)�formatrr+�archiver<�namesr]�tarinfor*s ` @r0� unarchiver:�sW����A�A�A�A�A�A��w���x�(�(�H� �x�=�=�D��G� �~� � $� $�%5� 6� 6� I��F�F� � &� &�':� ;� ;� I��F��D�D� � &� &�';� <� <� I��F��D�D� � &� &�v� .� .� I��F��D�D��4�7G�G�H�H� H�� �U�?�?��.��4�4�G�� %��(�(�*�*��!�%�%�D��J�t�$�$�$�$���l�#3�T�:�:�G�� %��(�(�*�*��!�%�%�D��J�t�$�$�$�$� �U�?�?�s�/��2�Q�6�6� #�-�-�/�/� @� @��!�'�,� �:�:�@�#*�<�#6�#6�w�#?�#?�G�L�����8�$�$�$� � � �M�M�O�O�O�O�O� � ��7� � �M�M�O�O�O�O� ���s �4C9G�G c��tj��}t|��}t|d��5}t j|��D]k\}}}|D]b}tj�||��}||d�} tj�| |��} |�|| ���c�l ddd��n #1swxYwY|S)z*zip a directory tree into a BytesIO objectr$N) �io�BytesIOrxrru�walkrvr'r�) � directoryr+�dlen�zfryrbr;r]�full�relr�s r0�zip_dirrD�s�� �Z�\�\�F� �y�>�>�D� ��� � �%��!#���!3�!3� %� %� �D�$��� %� %���w�|�|�D�$�/�/���4�5�5�k���w�|�|�C��.�.������t�$�$�$�$�  %� %�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%� �Ms�BC�C�C)r�K�M�G�T�Pc��eZdZdZdd�Zd�Zd�Zd�Zd�Ze d ���Z e d ���Z d �Z e d ���Z e d ���ZdS)�Progress�UNKNOWNr�dc�n�|�||ksJ�|x|_|_||_d|_d|_d|_dS)NrF)r �cur�max�started�elapsed�done)r��minval�maxvals r0r�zProgress.__init__sE���~��6�!1�!1�!1�1�$�$���4�8������ ��� ��� � � r2c��|j|ksJ�|j� ||jksJ�||_tj��}|j� ||_dS||jz |_dSr�)r rPrO�timerQrR)r��curval�nows r0�updatezProgress.update sf���x�6�!�!�!�!��x��6�T�X�#5�#5�#5�5�����i�k�k�� �<� ��D�L�L�L����-�D�L�L�Lr2c�P�|dksJ�|�|j|z��dS�Nr)rZrO)r��incrs r0� incrementzProgress.increments-���q�y�y�y�y� � � �D�H�t�O�$�$�$�$�$r2c�:�|�|j��|Sr�)rZr r s r0r�zProgress.starts�� � � �D�H����� r2c�V�|j�|�|j��d|_dS�NT)rPrZrSr s r0�stopz Progress.stops)�� �8� � �K�K��� !� !� !��� � � r2c�,�|j�|jn|jSr�)rP�unknownr s r0�maximumzProgress.maximum!s��#�x�/�t�|�|�T�X�=r2c�|�|jrd}n1|j�d}n'd|j|jz z|j|jz z }d|z}|S)Nz100 %z ?? %gY@z%3d %%)rSrPrOr )r�r+rTs r0� percentagezProgress.percentage%sQ�� �9� "��F�F� �X� ��F�F����D�H�,�-���D�H�1D�E�A���\�F�� r2c��|dkr|j�|j|jkrd}n'tjdtj|����}|S)Nrz??:??:??z%H:%M:%S)rPrOr rW�strftime�gmtime)r��durationr+s r0�format_durationzProgress.format_duration0sI�� ��M�M�t�x�/�4�8�t�x�3G�3G��F�F��]�:�t�{�8�/D�/D�E�E�F�� r2c�"�|jr d}|j}ned}|j�d}nY|jdks|j|jkrd}n;t |j|jz ��}||j|jz z}|dz |jz}|�d|�|����S)N�DonezETA r�rrz: )rSrRrPrOr �floatrl)r�r�rms r0�ETAz Progress.ETA9s��� �9� +��F�� �A�A��F��x��������"�"�t�x�4�8�';�';�����$�(�T�X�-�.�.���T�X���(�(����U�d�l�*��!�6�6�4�#7�#7��#:�#:�#:�;�;r2c��|jdkrd}n|j|jz |jz }tD]}|dkrn|dz}�d||fzS)Nrgi�g@�@z%d %sB/s)rRrOr �UNITS)r�r+�units r0�speedzProgress.speedLsc�� �<�1� � ��F�F��h���)�T�\�9�F�� � �D���}�}��� �f� �F�F��V�T�N�*�*r2N)rrM)r�r�r�rdr�rZr^r�rbrrergrlrprtrEr2r0rKrK�s��������G�����.�.�.�%�%�%������� �>�>��X�>�����X������<�<��X�<�$� +� +��X� +� +� +r2rKz \{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$c���t�|��rd}t||z���t�|��rd}t||z���t |��S)zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')�_CHECK_RECURSIVE_GLOBr�r��_CHECK_MISMATCH_SET�_iglob)� path_globr s r0rrasj���#�#�I�.�.�*�K����y��)�)�)��!�!�)�,�,�*�F����y��)�)�)� �)� � �r2c#��K�t�|d��}t|��dkrit|��dks J|���|\}}}|�d��D].}td�|||f����D]}|V���/dSd|vrt |��D]}|V��dS|�dd��\}}|dkrd}|dkrd}n*|�d��}|�d ��}tj|��D]Y\}}} tj � |��}ttj �||����D]} | V���ZdS) Nrr�rLrz**rjr�rt�\) � RICH_GLOBr�rxrxr'� std_iglobr(rur>rvr�) ry�rich_path_globr�r�r��itemrv�radical�dirr;r�s r0rxrxls������_�_�Y��2�2�N� �>���Q����>�"�"�a�'�'�'��'�'�'�,����V��I�I�c�N�N� � �D��r�w�w���f�'=�>�>�?�?� � ��� � � � � � � � �y� � �!�)�,�,� � ��� � � � � � �(�o�o�d�A�6�6�O�F�G���|�|����"�}�}����"�.�.��-�-��!�.�.��.�.��$&�G�F�O�O� � � ��c�5��w�'�'��-�-�� �����d�G�!<�!<�=�=���B��H�H�H�H�� � r2)� HTTPSHandler�match_hostname�CertificateErrorc��eZdZdZdZd�ZdS)�HTTPSConnectionNTc��tj|j|jf|j��}t |dd��r||_|���ttd��sY|j r tj }n tj }tj ||j|j|tj|j ���|_n�tjtj��}ttd��r|xjtjzc_|jr |�|j|j��i}|j rLtj |_|�|j ���t tdd��r |j|d<|j |fi|��|_|j r�|jr� t1|j���|j��t4�d |j��dS#t8$r?|j�tj��|j����wxYwdSdS) N� _tunnel_hostF� SSLContext)� cert_reqs� ssl_version�ca_certs� OP_NO_SSLv2)�cafile�HAS_SNI�server_hostnamezHost verified: %s) r��create_connection�host�port�timeoutr��sock�_tunnelr��sslr�� CERT_REQUIRED� CERT_NONE� wrap_socket�key_file� cert_file�PROTOCOL_SSLv23r��optionsr��load_cert_chain� verify_mode�load_verify_locations� check_domainr�� getpeercertrrRr��shutdown� SHUT_RDWRr�)r�r�r��contextr�s r0�connectzHTTPSConnection.connect�s*���+�T�Y�� �,B�D�L�Q�Q�D��t�^�U�3�3� � �� �� � �����3� �-�-� @��=�.� #� 1�I�I� #� �I��O�D�$�-���6?�8;�8K�59�]�D�D�D�� � � �.��)<�=�=���3� �.�.�7��O�O�s��6�O�O��>�K��+�+�D�N�D�M�J�J�J����=�>�*-�*;�G�'��1�1���1�G�G�G��s�I�u�5�5�>�48�I��0�1�/�G�/��?�?��?�?�� ��}� ��!2� ��"�4�9�#8�#8�#:�#:�D�I�F�F�F��L�L�!4�d�i�@�@�@�@�@��'�����I�&�&�v�'7�8�8�8��I�O�O�%�%�%������  � � � s�,A G:�:A I)r�r�r�r�r�r�rEr2r0r�r��s-��������� �$ �$ �$ �$ �$ r2r�c�"�eZdZdd�Zd�Zd�ZdS)r�Tc�J�tj|��||_||_dSr�)�BaseHTTPSHandlerr�r�r�)r�r�r�s r0r�zHTTPSHandler.__init__�s(�� � %�d� +� +� +�$�D�M� ,�D� � � r2c�\�t|i|��}|jr|j|_|j|_|S)a This is called to create a connection instance. Normally you'd pass a connection class to do_open, but it doesn't actually check for a class, and just expects a callable. As long as we behave just as a constructor would have, we should be OK. If it ever changes so that we *must* pass a class, we'll create an UnsafeHTTPSConnection class which just sets check_domain to False in the class definition, and choose which one to pass to do_open. )r�r�r�)r�r�r�r+s r0� _conn_makerzHTTPSHandler._conn_maker�s9��%�d�5�f�5�5�F��}� 8�"&�-���&*�&7��#��Mr2c�� |�|j|��S#t$r3}dt|j��vrt d|jz����d}~wwxYw)Nzcertificate verify failedz*Unable to verify server certificate for %s)�do_openr�r�str�reasonr�r�)r�rhr�s r0� https_openzHTTPSHandler.https_open�sy�� ��|�|�D�$4�c�:�:�:��� � � �.�#�a�h�-�-�?�?�*�,4�69�h�,?�@�@�@������  ���s�� A�.A�ANrg)r�r�r�r�r�r�rEr2r0r�r��sF������ -� -� -� -�  � � �  � � � � r2r�c��eZdZd�ZdS)�HTTPSOnlyHandlerc�&�td|z���)NzAUnexpected HTTP request on what should be a secure connection: %s)r)r�rhs r0� http_openzHTTPSOnlyHandler.http_open�s!���,�.1�2�3�3� 3r2N)r�r�r�r�rEr2r0r�r��s#������ 3� 3� 3� 3� 3r2r���r��c��eZdZdd�ZdS)�HTTPrNc �Z�|dkrd}|�|j||fi|����dSr\��_setup�_connection_class�r�r�r�r�s r0r�z HTTP.__init__�s@���q�y�y��� �K�K�.��.�t�T�D�D�V�D�D� E� E� E� E� Er2�rN�r�r�r�r�rEr2r0r�r��s.������ F� F� F� F� F� Fr2r�c��eZdZdd�ZdS)�HTTPSrNc �Z�|dkrd}|�|j||fi|����dSr\r�r�s r0r�zHTTPS.__init__�s@���1�9�9��D�� � �2�D�2�4��H�H��H�H�I�I�I�I�Ir2r�r�rEr2r0r�r��s.������ J� J� J� J� J� Jr2r�c��eZdZdd�Zd�ZdS)� Transportrc�T�||_tj�||��dSr�)r�rr�r��r�r�� use_datetimes r0r�zTransport.__init__s(���� ���$�$�T�<�8�8�8�8�8r2c� �|�|��\}}}tdkrt||j���}nG|jr||jdkr"||_|t j|��f|_|jd}|S)Nr�)r�rr)� get_host_info� _ver_infor�r�� _connection�_extra_headersr�HTTPConnection)r�r��h�eh�x509r+s r0�make_connectionzTransport.make_connections����(�(��.�.� ��2�t� �� � ��!�T�\�2�2�2�F�F��#� C�t�t�/?��/B�'B�'B�&(��#�#'��)?��)B�)B�#B�� ��%�a�(�F�� r2N�r�r�r�r�r�r�rEr2r0r�r��s7������9�9�9�9� � � � � r2r�c��eZdZdd�Zd�ZdS)� SafeTransportrc�T�||_tj�||��dSr�)r�rr�r�r�s r0r�zSafeTransport.__init__s(��"�D�L� � #� ,� ,�T�<� @� @� @� @� @r2c��|�|��\}}}|si}|j|d<tdkrt|dfi|��}nF|jr||jdkr!||_|t j|dfi|��f|_|jd}|S)Nr�r�rr)r�r�r�r�r�r�rr�)r�r�r�r�r�r+s r0r�zSafeTransport.make_connections��� �.�.�t�4�4�M�A�r�6�� ��� $� �F�9� ��F�"�"��t�T�4�4�V�4�4����'�O�4�4�3C�A�3F�+F�+F�*,�D�'�'+�W�-D�Q��.O�.O�GM�.O�.O�(O�D�$��)�!�,���Mr2Nr�r�rEr2r0r�r�s;������ A� A� A� A� � � � � r2r�c��eZdZd�ZdS)� ServerProxyc �&�|�dd��x|_}|�Yt|��d}|�dd��}|dkrt}nt }|||���x|d<}||_tjj ||fi|��dS)Nr�rr��https)r�� transport) r{r�rr�r�r�r�rr�r�)r�rkr�r�rfr��tclsrms r0r�zServerProxy.__init__&s���!'���I�t�!<�!<�<�� �w� � ��c�]�]�1�%�F�!�:�:�n�a�8�8�L��� � �$��� ��&*�d�7��&N�&N�&N� N�F�;� �!��D�N���&�t�S�;�;�F�;�;�;�;�;r2Nr�rEr2r0r�r�%s#������<�<�<�<��>�� �>�>�� � � r2c��|Sr�rEr s r0�__iter__zCSVReader.__iter__`r�r2c���t|j��}tjddkrBt |��D]2\}}t |t ��s|�d��||<�3|S�Nrr�r�)�nextr�r�r�r�r�rr()r�r+rlrs r0r�zCSVReader.nextcsl���d�k�"�"�� � �A� �� "� "�$�V�,�,� 5� 5���4�!�$� �2�2�5� $� � �G� 4� 4�F�1�I��� r2N)r�r�r�r�r�r��__next__rEr2r0r�r�TsB������ ?� ?� ?��������H�H�Hr2r�c��eZdZd�Zd�ZdS)� CSVWriterc �r�t|d��|_tj|jfi|j��|_dS)Nr$)r�r�r��writerr�)r�r�r�s r0r�zCSVWriter.__init__ns4����C�(�(�� ��j���>�>�� �>�>�� � � r2c���tjddkrHg}|D]A}t|t��r|�d��}|�|���B|}|j�|��dSr�)r�r�r�rr1r%r��writerow)r��rowr�rs r0r�zCSVWriter.writerowrs~�� � �A� �� "� "��A�� � ���d�I�.�.�0��;�;�w�/�/�D����������C� � ���S�!�!�!�!�!r2N)r�r�r�r�r�rEr2r0r�r�ms2������?�?�?�"�"�"�"�"r2r�c�\��eZdZeej��Zded<d�fd� Zd�Zd�Zd�Z �xZ S) � Configurator� inc_convert�incNc���tt|���|��|ptj��|_dSr�)�superrr�rur�r�)r��configr�� __class__s �r0r�zConfigurator.__init__�s7��� �l�D�!�!�*�*�6�2�2�2��'�B�I�K�K�� � � r2c����� �� �fd�� ��d��}t|��s��|��}��dd��}��dd��}|rt� fd�|D����}�� fd��D��}t |��}||i|��}|r4|���D]\}} t ||� | ����� |S)Nc�J��t|ttf��r%t|���fd�|D����}n`t|t��r6d|vr��|��}n1i}|D]}�||��||<�n��|��}|S)Nc�&��g|] }�|����SrErE)rZrl�converts �r0r\zBConfigurator.configure_custom..convert..�s!���!8�!8�!8��'�'�!�*�*�!8�!8�!8r2�())r�r^r�type�dict�configure_customr )�or+r�r r�s ��r0r z.Configurator.configure_custom..convert�s�����!�d�E�]�+�+� )� ��a���!8�!8�!8�!8�a�!8�!8�!8�9�9����A�t�$�$� )��1�9�9�!�2�2�1�5�5�F�F��F��2�2��$+�G�A�a�D�M�M��q� � �2����a�����Mr2r rjz[]rEc�&��g|] }�|����SrErE)rZrr s �r0r\z1Configurator.configure_custom..�s!���3�3�3��'�'�!�*�*�3�3�3r2c�T��g|]$}t|���|��|��f��%SrE)r)rZr�rr s ��r0r\z1Configurator.configure_custom..�s7���K�K�K�Q�K��N�N�K�!�W�W�V�A�Y�'�'�(�K�K�Kr2)r{r~rprrr��setattr) r�rr��propsr�r�r�r+r�rTr s `` @r0rzConfigurator.configure_custom�s#����� � � � � � � �J�J�t� � ����{�{� �� � �Q���A�� � �3��%�%���z�z�$��#�#�� � 5��3�3�3�3�d�3�3�3�4�4�D�K�K�K�K�K�&�K�K�K���e������D�#�F�#�#�� � /�� � � � � /� /���1����7�7�1�:�:�.�.�.�.�� r2c��|j|}t|t��r#d|vr|�|��x|j|<}|S)Nr )rr�rr)r�r�r+s r0� __getitem__zConfigurator.__getitem__�sM����S�!�� �f�d� #� #� F�����(,�(=�(=�f�(E�(E� E�D�K�� �v�� r2c��tj�|��s%tj�|j|��}t j|dd���5}tj|��}ddd��n #1swxYwY|S)z*Default converter for the inc:// protocol.r�r�r%N) rurv�isabsr'r�r�r(r�r�)r�r�r.r+s r0rzConfigurator.inc_convert�s����w�}�}�U�#�#� 3��G�L�L���E�2�2�E� �[���g� 6� 6� 6� "�!��Y�q�\�\�F� "� "� "� "� "� "� "� "� "� "� "���� "� "� "� "�� s�A=�=B�Br�) r�r�r�rr�value_convertersr�rrr� __classcell__)rs@r0rr�s���������t�,�=�>�>��+��U��(�(�(�(�(�(����>��� ������r2rc�&�eZdZdZdd�Zd�Zd�ZdS)�SubprocessMixinzC Mixin for running subprocesses and capturing their output FNc�"�||_||_dSr�)�verbose�progress)r�rr s r0r�zSubprocessMixin.__init__�s���� � �� � � r2c�~�|j}|j} |���}|sn�|� |||��nr|s tj�d��n2tj�|�d����tj�����|���dS)z� Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. TNrjr�) r r�readliner��stderrr�r(�flushr�)r�r�r�r rr/s r0r�zSubprocessMixin.reader�s��� �=���,�� #����!�!�A�� ���#����G�$�$�$�$��8��J�$�$�S�)�)�)�)��J�$�$�Q�X�X�g�%6�%6�7�7�7�� � � �"�"�"� #� � � �����r2c �0�tj|ftjtjd�|��}tj|j|jdf���}|���tj|j|jdf���}|���|� ��|� ��|� ��|j �|� dd��n&|j rtj�d��|S)N)�stdoutr#r&)rr�r#zdone.�mainzdone. )� subprocess�Popen�PIPE� threading�Threadr�r&r�r#�waitr'r rr�r�)r��cmdr�r��t1�t2s r0� run_commandzSubprocessMixin.run_command�s��� � �S� ?���$.�O� ?� ?�7=� ?� ?�� � �T�[���(�7K� L� L� L�� ��� � � � � �T�[���(�7K� L� L� L�� ��� � � � ������ ��� � � � ��� � � � �=� $� �M�M�'�6� *� *� *� *� �\� (� �J� � �Y� '� '� '��r2)FN)r�r�r�r�r�r�r1rEr2r0rr�sP��������!�!�!�!����*����r2rc�R�tjdd|�����S)z,Normalize a python package name a la PEP 503z[-_.]+r�)r��subr�)r]s r0�normalize_namer4�s$�� �6�(�C�� &� &� ,� ,� .� .�.r2c�*�eZdZdZdZdd�Zd�Zd�ZdS)� PyPIRCFilezhttps://upload.pypi.org/legacy/�pypiNc��|�=tj�tj�d��d��}||_||_dS)Nr�z.pypirc)rurvr'r�r�r`)r�r�r`s r0r�zPyPIRCFile.__init__�s>�� �:�����b�g�0�0��5�5�y�A�A�B��� �����r2c��i}tj�|j���r�|jp|j}t j��}|�|j��|� ��}d|vr�|� dd��}d�|� d��D��}|gkr d|vrdg}�n|D]�}d|i}|� |d��|d<d|jfd |j fd fD]:\}} |� ||��r|� ||��||<�5| ||<�;|dkr||jdfvr |j|d<��|d|kr|d|kri}��nod |vrkd }|� |d��r|� |d��}n|j}|� |d��|� |d ��|||j d �}|S)N� distutilsz index-serversc�f�g|].}|���dk�|�����/S)rr�)rZ�servers r0r\z#PyPIRCFile.read.. s<��5�5�5�v�%�|�|�~�~��3�3�#�L�L�N�N�3�3�3r2rr7r<r�� repository�realm)r�Nz server-loginr�)r�r�r=r<r>)rurvrr�r`�DEFAULT_REPOSITORYr�RawConfigParserr�r�r�r�� DEFAULT_REALM� has_option) r�r+r=rr�� index_servers�_serversr<r�r�s r0r�zPyPIRCFile.read�sJ���� �7�>�>�$�-� (� (�4 ���<�T�%<�J�!�1�3�3�F� �K�K�� � &� &� &����(�(�H��h�&�&� &� � �;�� H� H� �5�5�)�/�/��5�5�5�5�5���r�>�>���)�)�$*�8���"*�(�(��"*�F�!3��-3�Z�Z�� �-K�-K��z�*�/;�D�� >� &� � �6�:� >� >�",�$�!�/� ���� r2c��tj��}|j}|�|��|�d��s|�d��|�dd|��|�dd|��t|d��5}|�|��ddd��dS#1swxYwYdS)Nr7r�r�r$) rr@r�r�� has_sectionr�r�r(r�)r�r�r�rr�r.s r0rZzPyPIRCFile.update9s����-�/�/�� �]��� � �B�����!�!�&�)�)� '� � � �v� &� &� &�� � �6�:�x�0�0�0�� � �6�:�x�0�0�0� �"�c�]�]� �a� �L�L��O�O�O� � � � � � � � � � � � ���� � � � � � s�B;�;B?�B?�NN)r�r�r�r?rAr�r�rZrEr2r0r6r6�sR������:���M����� 8�8�8�t � � � � r2r6c�P�t|j������S)zG Read the PyPI access configuration as supported by distutils. )r`)r6r`r��rs r0� _load_pypircrJEs#�� �%�)� $� $� $� )� )� +� +�+r2c�^�t���|j|j��dSr�)r6rZr�r�rIs r0� _store_pypircrLKs&���L�L�������7�7�7�7�7r2c���tjdkrrdtj���vrdSdtj���vrdSdtj���vrdStjSdtjvrtjdStjd ksttd ��s tjStj��\}}}}}|���� d d ��}|� d d��� d d��}|dd�dkr|�d|��S|dd�dkrQ|ddkrDd}dt|d��dz |dd�fz}ddd�}|d|tj zz }n�|dd�dkrddl m }|��S|dd �d!krMd!}tjd"tj��}|�|��}|r|���}nI|dd �d#kr;ddl} ddl} | �| j���|||��\}}}|�d|�d|��S)$a�Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. r��amd64� win-amd64z(arm)� win-arm32z(arm64)z win-arm64�_PYTHON_HOST_PLATFORMr4�unamertrrWrnr�N��linux�sunosr�5�solarisz%d.%sr�r��32bit�64bit)i���l����z.%s�aix)� aix_platformr��cygwinz[\d.]+�darwin)rur]r�r�r��platformr�r�rRr$�int�maxsize� _aix_supportr[r�rG�ASCIIr r�� _osx_support�distutils.sysconfig�get_platform_osx� sysconfig�get_config_vars) �osnamer��releaser��machine�bitnessr[�rel_rer*rcr:s r0�get_host_platformrmSs���( �w�$��� �c�k�'�'�)�)� )� )��;� �c�k�'�'�)�)� )� )��;� �� �)�)�+�+� +� +��;��|���"�*�,�,��z�1�2�2� �w�'�����W�!5�!5���|��13�� � �-�V�T�7�G�W��\�\�^�^� #� #�C�� ,� ,�F��o�o�c�3�'�'�/�/��S�9�9�G� �b�q�b�z�W���"�6�6�7�7�+�+� �����w� � � �1�:�� � ��F���W�Q�Z���1�!4�g�a�b�b�k� B�B�G�#*�w�G�G�G� �u�w�s�{�3�3� 3�G�� �����u� � �-�-�-�-�-�-��|�~�~�� �����x� � �����Y���1�1�� �L�L�� !� !�� � ��g�g�i�i�G�� �����x� � �0�0�0�0�0�0�0�0�#/�#@�#@�(1�(;�(K�(K�(M�(M�(.���$B�$B� ���� ������'�'� 2�2r2�win32rOrP)�x86�x64�armc���tjdkrt��Stj�d��}|t vrt��St |S)Nr��VSCMD_ARG_TGT_ARCH)rur]rmr�r��_TARGET_TO_PLAT)�cross_compilation_targets r0� get_platformrv�sQ�� �w�$��� �"�"�"�!�z�~�~�.B�C�C����6�6� �"�"�"� �3� 4�4r2rG)r�r�ra)�r�� collectionsr� contextlibr��globrr}r<r��loggingrurEr�r�r�� ImportErrorr(r�r1r�r�r+�dummy_threadingrWrr�compatrrr r r r r rrrrrrrrrrrrrr� getLoggerr�rrGrrQrPr;rDr@rer&rGrpr�r�r�r�r�r�r��contextmanagerr�r�r�r�r�r�r�rprr�VERBOSEr�r�r�r�r�r�r�r��Ir�r�r�r�r�r�r�r�r�r�r�r�r��ARCHIVE_EXTENSIONSr:rDrrrKr|rvrwrxr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr4r6rJrLrmrtrvrEr2r0�r�sr �� � � � ����������� � � � �#�#�#�#�#�#� � � � � � � � ����� � � � ����� � � � � � � � ���J�J�J�J������ �C�C�C��������� � � � �������������(��������(�(�(�'�'�'�'�'�'�(���� � � � �������(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(� �� �8� $� $�� �R�Z�)� *� *� ��R�Z� 3�4�4�� �R�Z�5� 6� 6� � �B�J�D� E� E� ��R�Z� �����b�j����� �B�J�{� #� #� ��r�z�E�F�F� �V!�V!�V!�rz@�z@�z@�z���4������$  �  �  �  � ���,�,�,�^���& ������� ������� ��&�&�&���&� � � � � �f� � � � � � �6u�u�u�u�u�6�u�u�u�n � � ������&����8 �2�:���:� '� '�� ���>&(�&(�&(�&(�R���" � � � &� &� &���� ���&�2�:�'8�9;��?�?�����,�-�-������2�"�*�9�:�:�� /� /� /����2���(D����� #�#�#� )�)�)�)�)�F�)�)�)�XC�C�C�C�C��C�C�C�PE!�E!�E!�E!�E!��E!�E!�E!�V.��3�3�3�3�l � � �" $��W+�W+�W+�W+�W+�v�W+�W+�W+�z �B�J�~� &� &� �"�� �#?�@�@�� �b�j�!5�6�6��������6�`3�+�+�+�+�+�+�+�+�+�+�)�)�)�)�)�'�1�)�)�)�V�����'����R3�3�3�3�3�<��3�3�3� � �R�a�R� � � ����F�F�F�F�F�w�|�F�F�F� �J� J� J� J� J� J�G�M� J� J� J������ �#���� ������� �/����*<�<�<�<�<�)�'�<�<�<�,$�$�$� � � � � �f� � � ����������2 "� "� "� "� "�� "� "� "�&4�4�4�4�4�#�4�4�4�n+�+�+�+�+�f�+�+�+�\/�/�/�O�O�O�O�O��O�O�O�b,�,�,� 8�8�8�N3�N3�N3�d � � ����5�5�5�5�5s!�;�A�A�A"�" A.�-A.