U
    42i                     @  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   zRaised 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-7wv4vqcv/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rd| }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rt|	sd|	}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>>   r   orr   andwith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   


