o knhS@snddlmZddlZddlmZmZddlmZmZgdZ e dZ ede Z Gdd d eZdd dZdS)) annotationsN)NewTypecast) EXCEPTIONSLICENSES)InvalidLicenseExpressionNormalizedLicenseExpressioncanonicalize_license_expressionz^[A-Za-z0-9.-]*$rc@seZdZdZdS)rzRaised 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__rrF/usr/local/lib/python3.10/dist-packages/packaging/licenses/__init__.pyr2srraw_license_expressionstrreturnc s&|s d|}t||dddd}dfdd|D}|}|}g}|D]0}|d vr:|d q.|d krD|d q.|dkrY|rY|d dvrYd|}t|||q.d|}z t|tt}Wn t yyd}Ynw|durd|}t|dg} |D]t}|d vr| | q| r| d dkr|t vrd|}t|| t |dq| dr|dd } d} n|} d} | drt| sd| }t|| || | q| tvrd| }t|| t| d| qd| } tt| ddddS)NzInvalid license expression: (z ( )z ) LicenseRef-cs8i|]}|r|d|tdqS)rN)lower startswithlen).0reflicenseref_prefixrr Gs z3canonicalize_license_expression..>orandwithrrFalser r>rr TFWITHzUnknown license exception: id+z licenseref-zInvalid licenseref: zUnknown license: z( z ))rreplacesplitrappendjoinevalglobalslocals Exceptionupperrendswithrlicense_ref_allowedmatchrrr) rmessagelicense_expression license_refstokens python_tokenstokenpython_expressioninvalidnormalized_tokens final_tokensuffixnormalized_expressionrrrr <st                  r )rrrr) __future__rretypingrrpackaging.licenses._spdxrr__all__compiler2rr ValueErrorrr rrrrs