3
ûâde¬  ã               @   sJ   d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 G dd„ dƒZ
dS )z`Represents a wheel file and provides access to the various parts of the
name that have meaning.
é    N)ÚDictÚIterableÚList)ÚTag)ÚInvalidWheelFilenamec               @   s†   e Zd ZdZejdejƒZeddœdd„Z	e
e dœdd	„Ze
e ed
œdd„Ze
e eeef edœdd„Zee ed
œdd„ZdS )ÚWheelzA wheel filez�^(?P<namever>(?P<name>.+?)-(?P<ver>.*?))
        ((-(?P<build>\d[^-]*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?)
        \.whl|\.dist-info)$N)ÚfilenameÚreturnc                s¨   ˆ j j|ƒ}|st|› d�ƒ‚|ˆ _|jdƒjddƒˆ _|jdƒjddƒˆ _|jdƒˆ _|jdƒj	dƒˆ _
|jd	ƒj	dƒˆ _|jd
ƒj	dƒˆ _‡ fdd„ˆ j
D ƒˆ _dS )zX
        :raises InvalidWheelFilename: when the filename is invalid for a wheel
        z is not a valid wheel filename.ÚnameÚ_ú-ÚverÚbuildÚpyverÚ.ÚabiÚplatc                s0   h | ](}ˆ j D ]}ˆ jD ]}t|||ƒ’qqqS © )ÚabisÚplatsr   )Ú.0ÚxÚyÚz)Úselfr   ú9/tmp/pip-build-red6nood/pip/pip/_internal/models/wheel.pyú	<setcomp>(   s   z!Wheel.__init__.<locals>.<setcomp>N)Úwheel_file_reÚmatchr   r   ÚgroupÚreplacer
   ÚversionZ	build_tagÚsplitÚ
pyversionsr   r   Ú	file_tags)r   r   Ú
wheel_infor   )r   r   Ú__init__   s    
zWheel.__init__)r	   c             C   s   t dd„ | jD ƒƒS )z4Return the wheel's tags as a sorted list of strings.c             s   s   | ]}t |ƒV  qd S )N)Ústr)r   Útagr   r   r   ú	<genexpr>.   s    z0Wheel.get_formatted_file_tags.<locals>.<genexpr>)Úsortedr$   )r   r   r   r   Úget_formatted_file_tags,   s    zWheel.get_formatted_file_tags)Útagsr	   c                s   t ‡ fdd„| jD ƒƒS )aÜ  Return the lowest index that one of the wheel's file_tag combinations
        achieves in the given list of supported tags.

        For example, if there are 8 supported tags and one of the file tags
        is first in the list, then return 0.

        :param tags: the PEP 425 tags to check the wheel against, in order
            with most preferred first.

        :raises ValueError: If none of the wheel's file tags match one of
            the supported tags.
        c             3   s    | ]}|ˆ krˆ j |ƒV  qd S )N)Úindex)r   r(   )r,   r   r   r)   =   s    z*Wheel.support_index_min.<locals>.<genexpr>)Úminr$   )r   r,   r   )r,   r   Úsupport_index_min0   s    zWheel.support_index_min)r,   Útag_to_priorityr	   c                s   t ‡ fdd„| jD ƒƒS )a¨  Return the priority of the most preferred tag that one of the wheel's file
        tag combinations achieves in the given list of supported tags using the given
        tag_to_priority mapping, where lower priorities are more-preferred.

        This is used in place of support_index_min in some cases in order to avoid
        an expensive linear scan of a large list of tags.

        :param tags: the PEP 425 tags to check the wheel against.
        :param tag_to_priority: a mapping from tag to priority of that tag, where
            lower is more preferred.

        :raises ValueError: If none of the wheel's file tags match one of
            the supported tags.
        c             3   s   | ]}|ˆ krˆ | V  qd S )Nr   )r   r(   )r0   r   r   r)   Q   s    z0Wheel.find_most_preferred_tag.<locals>.<genexpr>)r.   r$   )r   r,   r0   r   )r0   r   Úfind_most_preferred_tag?   s    zWheel.find_most_preferred_tagc             C   s   | j j|ƒ S )zŽReturn whether the wheel is compatible with one of the given tags.

        :param tags: the PEP 425 tags to check the wheel against.
        )r$   Ú
isdisjoint)r   r,   r   r   r   Ú	supportedT   s    zWheel.supported)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompileÚVERBOSEr   r'   r&   r   r+   r   Úintr/   r   r1   r   Úboolr3   r   r   r   r   r      s   r   )r7   r8   Útypingr   r   r   Zpip._vendor.packaging.tagsr   Zpip._internal.exceptionsr   r   r   r   r   r   Ú<module>   s
   