U
    j5{i»  ã                   @  sv   d dl mZ d dlZd dlmZmZ ddlmZmZ dddgZ	e 
d	¡ZedeƒZG d
d„ deƒZdddœdd„ZdS )é    )ÚannotationsN)ÚNewTypeÚcasté   )Ú
EXCEPTIONSÚLICENSESÚInvalidLicenseExpressionÚNormalizedLicenseExpressionÚcanonicalize_license_expressionz^[A-Za-z0-9.-]*$c                   @  s   e Zd ZdZdS )r   zõRaised when a license-expression string is invalid

    >>> canonicalize_license_expression("invalid")
    Traceback (most recent call last):
        ...
    packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid'
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú?/tmp/pip-unpacked-wheel-gcvfa7ey/packaging/licenses/__init__.pyr   2   s   Ústr)Úraw_license_expressionÚreturnc                   sH  | sd| ›�}t |ƒ‚|  dd¡ dd¡}d‰ ‡ fdd„| ¡ D ƒ}| ¡ }| ¡ }g }|D ]z}|d	krt| d
¡ q\|dkrˆ| d¡ q\|dkr |r |d dks¸|dkrÌ|rÌ|d dkrÌd| ›�}t |ƒ‚q\| |¡ q\d |¡}zt|ddƒ W n* tk
�r   d| ›�}t |ƒd ‚Y nX g }|D ]ü}|d	k�rF| | ¡ ¡ �q&|�rŠ|d dk�rŠ|t	k�rvd|›�}t |ƒ‚| t	| d ¡ n–| 
d¡�r¨|d d… }	d}
n|}	d}
|	 d¡�rît |	¡�sÚd|	›�}t |ƒ‚| ||	 |
 ¡ n2|	tk�r
d|	›�}t |ƒ‚| t|	 d |
 ¡ �q&d |¡}td| dd¡ dd¡ƒS )NzInvalid license expression: ú(z ( ú)z ) úLicenseRef-c                   s8   i | ]0}|  ¡  ˆ   ¡ ¡r|  ¡ d |tˆ ƒd…  “qS )r   N)ÚlowerÚ
startswithÚlen)Ú.0Úref©Zlicenseref_prefixr   r   Ú
<dictcomp>G   s   þ z3canonicalize_license_expression.<locals>.<dictcomp>>   Úwithr   r   ÚandÚorÚFalser   r    éÿÿÿÿ>   r   r   r    ú Ú ÚevalZWITHzUnknown license exception: Úidú+zlicenseref-zInvalid licenseref: zUnknown license: r	   z( z ))r   ÚreplaceÚsplitr   ÚappendÚjoinÚcompileÚSyntaxErrorÚupperr   Úendswithr   Úlicense_ref_allowedÚmatchr   r   )r   ÚmessageZlicense_expressionZlicense_refsÚtokensZpython_tokensÚtokenZpython_expressionZnormalized_tokensZfinal_tokenÚsuffixZnormalized_expressionr   r   r   r
   <   s„    

þÿþ
ýüü
ü










þ)Ú
__future__r   ÚreÚtypingr   r   Z_spdxr   r   Ú__all__r,   r0   r   r	   Ú
ValueErrorr   r
   r   r   r   r   Ú<module>    s   ý


