o
    f}”eˆ  ã                   @   sö   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ e e¡Zdee deedf defdd„Zdedefdd„Zdedefdd„Ze jdd�dedefdd„ƒZ dS )é    N)ÚMessage)Ú
FeedParser)ÚOptionalÚTuple)Úpkg_resources)Ú
specifiersÚversion©ÚRequirement)ÚDistribution)ÚNoneMetadataError)Údisplay_pathÚrequires_pythonÚversion_info.Úreturnc                 C   s4   | du rdS t  | ¡}t d tt|ƒ¡¡}||v S )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Ú.)r   ÚSpecifierSetr   ÚparseÚjoinÚmapÚstr)r   r   Zrequires_python_specifierÚpython_version© r   úf/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/pip/_internal/utils/packaging.pyÚcheck_requires_python   s
   
r   Údistc                 C   s€   d}t | tjƒr|  |¡r|  |¡}n|  d¡r d}|  |¡}nt dt| jƒ¡ d}|du r4t	| |ƒ‚t
ƒ }| |¡ | ¡ S )z�
    :raises NoneMetadataError: if the distribution reports `has_metadata()`
        True but `get_metadata()` returns None.
    ÚMETADATAzPKG-INFOzNo metadata found in %sÚ N)Ú
isinstancer   ÚDistInfoDistributionÚhas_metadataÚget_metadataÚloggerÚwarningr   Úlocationr   r   ÚfeedÚclose)r   Úmetadata_nameÚmetadataZfeed_parserr   r   r   r!   )   s   ÿ


r!   c                 C   s2   |   d¡r|  d¡D ]}| ¡ r| ¡   S q
dS )NÚ	INSTALLERr   )r    Úget_metadata_linesÚstrip)r   Úliner   r   r   Úget_installerD   s   
ÿr-   i   )ÚmaxsizeÚ
req_stringc                 C   s   t | ƒS )z5Construct a packaging.Requirement object with cachingr	   )r/   r   r   r   Úget_requirementL   s   r0   )!Ú	functoolsÚloggingÚemail.messager   Úemail.parserr   Útypingr   r   Úpip._vendorr   Úpip._vendor.packagingr   r   Ú"pip._vendor.packaging.requirementsr
   Úpip._vendor.pkg_resourcesr   Úpip._internal.exceptionsr   Úpip._internal.utils.miscr   Ú	getLoggerÚ__name__r"   r   ÚintÚboolr   r!   r-   Ú	lru_cacher0   r   r   r   r   Ú<module>   s.    
ÿ
ÿ
þ
