U
    ZªShS  ã                   @  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   úN/root/rtd-docs/venv/lib/python3.8/site-packages/packaging/licenses/__init__.pyr   2   s   Ústr)Úraw_license_expressionÚreturnc                   s@  | sd| ›}t |ƒ‚|  dd¡ dd¡}d‰ ‡ fdd„| ¡ D ƒ}| ¡ }| ¡ }g }|D ]b}|d	krt| d
¡ q\|dkrˆ| d¡ q\|dkr´|r´|d dkr´d| ›}t |ƒ‚q\| |¡ q\d |¡}zt|tƒ tƒ ƒ}W n t	k
rö   d}Y nX |dk	rd| ›}t |ƒd ‚g }	|D ]ü}|d	kr>|	 | 
¡ ¡ q|	r‚|	d dkr‚|tkrnd|›}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t| 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>>   ÚwithÚorÚandr   r   ÚFalser   r   éÿÿÿÿ>   r   r   ú TFZWITHzUnknown license exception: Úidú+Ú zlicenseref-zInvalid licenseref: zUnknown license: z( z ))r   ÚreplaceÚsplitr   ÚappendÚjoinÚevalÚglobalsÚlocalsÚ	ExceptionÚupperr   Úendswithr   Úlicense_ref_allowedÚmatchr   r   r   )r   ÚmessageZlicense_expressionZlicense_refsÚtokensZpython_tokensÚtokenZpython_expressionÚinvalidZnormalized_tokensZfinal_tokenÚsuffixZnormalized_expressionr   r   r   r	   <   sr    

þ













þ)Ú
__future__r   ÚreÚtypingr   r   Zpackaging.licenses._spdxr   r   Ú__all__Úcompiler0   r   r   Ú
ValueErrorr   r	   r   r   r   r   Ú<module>    s   ý


