U ��.e� �@s�ddlmZddlZddlmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZer�dd lmZmZdd lmZdd lmZe�e�Zd d �Zdd�Zdd�Zdd�ZdS)�)�absolute_importN)� FeedParser)� pkg_resources)� specifiers�version)�NoneMetadataError)� display_path)�MYPY_CHECK_RUNNING)�Optional�Tuple)�Message)� DistributioncCs4|dkr dSt�|�}t�d�tt|���}||kS)a� Check if the given Python version matches a "Requires-Python" specifier. :param version_info: A 3-tuple of ints representing a Python major-minor-micro version to check (e.g. `sys.version_info[:3]`). :return: `True` if the given Python version satisfies the requirement. Otherwise, return `False`. :raises InvalidSpecifier: If `requires_python` has an invalid format. NT�.)rZ SpecifierSetr�parse�join�map�str)�requires_python� version_infoZrequires_python_specifierZpython_version�r�A/usr/lib/python3.8/site-packages/pip/_internal/utils/packaging.py�check_requires_pythons  rcCs�d}t|tj�r&|�|�r&|�|�}n0|�d�r@d}|�|�}nt�dt|j��d}|dkrht ||��t �}|� |�|� �S)z� :raises NoneMetadataError: if the distribution reports `has_metadata()` True but `get_metadata()` returns None. ZMETADATAzPKG-INFOzNo metadata found in %s�N) � isinstancerZDistInfoDistribution� has_metadata� get_metadata�loggerZwarningr�locationrrZfeed�close)�distZ metadata_nameZmetadataZ feed_parserrrrr,s �     rcCs&t|�}|�d�}|dk r"t|�}|S)z_ Return the "Requires-Python" metadata for a distribution, or None if not present. zRequires-PythonN)r�getr)rZ pkg_info_dictrrrr�get_requires_pythonGs  r!cCs2|�d�r.|�d�D]}|��r|��SqdS)NZ INSTALLERr)rZget_metadata_lines�strip)r�linerrr� get_installerXs  r$)Z __future__rZloggingZ email.parserrZ pip._vendorrZpip._vendor.packagingrrZpip._internal.exceptionsrZpip._internal.utils.miscrZpip._internal.utils.typingr �typingr r Z email.messager Zpip._vendor.pkg_resourcesr Z getLogger�__name__rrrr!r$rrrr�s