U
    gS                     @  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NormalizedLicenseExpressionInvalidLicenseExpression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-et9flr3b/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rd| }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rt|
sd|
}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>>   orandr   withr   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   


