3
ûâdeh  ã               @   sþ   d dl Z d dlmZmZmZmZmZ ddlmZm	Z	 ddl
mZmZ eef  eeef f ZedeƒZG dd„ deƒZG d	d
„ d
eƒZe jdƒZe jdƒZeedœdd„Zeeef edœdd„Zeeeeeee f dœdd„Zeeeef dœdd„ZdS )é    N)Ú	FrozenSetÚNewTypeÚTupleÚUnionÚcasté   )ÚTagÚ	parse_tag)ÚInvalidVersionÚVersionÚNormalizedNamec               @   s   e Zd ZdZdS )ÚInvalidWheelFilenamezM
    An invalid wheel filename was found, users should refer to PEP 427.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú:/tmp/pip-build-red6nood/pip/pip/_vendor/packaging/utils.pyr      s   r   c               @   s   e Zd ZdZdS )ÚInvalidSdistFilenamez^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    N)r   r   r   r   r   r   r   r   r      s   r   z[-_.]+z	(\d+)(.*))ÚnameÚreturnc             C   s   t jd| ƒjƒ }tt|ƒS )Nú-)Ú_canonicalize_regexÚsubÚlowerr   r   )r   Úvaluer   r   r   Úcanonicalize_name    s    r   )Úversionr   c             C   sü   t | tƒr.yt| ƒ}W q2 tk
r*   | S X n| }g }|jdkrR|j|j› d�ƒ |jtjdddjdd„ |j	D ƒƒƒƒ |j
dk	rž|jdjd	d„ |j
D ƒƒƒ |jdk	rº|jd
|j› �ƒ |jdk	rÖ|jd|j› �ƒ |jdk	rò|jd|j› �ƒ dj|ƒS )z�
    This is very similar to Version.__str__, but has one subtle difference
    with the way it handles the release segment.
    r   ú!z(\.0)+$Ú Ú.c             s   s   | ]}t |ƒV  qd S )N)Ústr)Ú.0Úxr   r   r   ú	<genexpr><   s    z'canonicalize_version.<locals>.<genexpr>Nc             s   s   | ]}t |ƒV  qd S )N)r!   )r"   r#   r   r   r   r$   @   s    z.postz.devú+)Ú
isinstancer!   r   r
   ÚepochÚappendÚrer   ÚjoinÚreleaseÚpreÚpostÚdevÚlocal)r   ÚparsedÚpartsr   r   r   Úcanonicalize_version&   s&    

&



r2   )Úfilenamer   c       
      C   s  | j dƒstd| › �ƒ‚| d d… } | jdƒ}|dkrDtd| › �ƒ‚| jd|d ƒ}|d }d	|ksxtjd
|tjƒd kr†td| › �ƒ‚t|ƒ}t|d ƒ}|dkrò|d }t	j|ƒ}|d krÒtd|› d| › d�ƒ‚t
tt|jdƒƒ|jdƒfƒ}nf }t|d ƒ}	||||	fS )Nz.whlz3Invalid wheel filename (extension must be '.whl'): é   r   é   z0Invalid wheel filename (wrong number of parts): é   r   Ú__z^[\w\d._]*$zInvalid project name: r   zInvalid build number: z in 'ú'éüÿÿÿ)r4   r5   éÿÿÿÿ)Úendswithr   ÚcountÚsplitr)   ÚmatchÚUNICODEr   r   Ú_build_tag_regexr   ÚBuildTagÚintÚgroupr	   )
r3   Zdashesr1   Ú	name_partr   r   Z
build_partZbuild_matchÚbuildÚtagsr   r   r   Úparse_wheel_filenameQ   s0    


 rG   c             C   s„   | j dƒr| d tdƒ … }n,| j dƒr<| d tdƒ … }ntd| › �ƒ‚|jdƒ\}}}|sltd| › �ƒ‚t|ƒ}t|ƒ}||fS )Nz.tar.gzz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): r   zInvalid sdist filename: )r;   Úlenr   Ú
rpartitionr   r   )r3   Z	file_stemrD   ÚsepZversion_partr   r   r   r   r   Úparse_sdist_filenameu   s    

rK   )r)   Útypingr   r   r   r   r   rF   r   r	   r   r
   r   rB   r!   rA   r   Ú
ValueErrorr   r   Úcompiler   r@   r   r2   rG   rK   r   r   r   r   Ú<module>   s   


,"