o S;`h @sddlZddlmZmZmZmZmZddlmZm Z ddl m Z m Z eedee effZedeZGdd d eZGd d d eZed Zed ZdedefddZdee efdefddZdedeee eeeffddZdedeee ffddZdS)N) FrozenSetNewTypeTupleUnioncast)Tag parse_tag)InvalidVersionVersionNormalizedNamec@eZdZdZdS)InvalidWheelFilenamezM An invalid wheel filename was found, users should refer to PEP 427. N__name__ __module__ __qualname____doc__r r r 1/usr/lib/python3/dist-packages/packaging/utils.pyrrc@r)InvalidSdistFilenamez^ An invalid sdist filename was found, users should refer to the packaging user guide. Nrr r r rrrrz[-_.]+z (\d+)(.*)namereturncCstd|}tt|S)N-)_canonicalize_regexsublowerrr )rvaluer r rcanonicalize_name s rversionc Cst|trzt|}Wn ty|YSw|}g}|jdkr)||jd|tddddd|j D|j durO|dd d|j D|j dur]|d |j |j durk|d |j |j dury|d |j d|S) z This is very similar to Version.__str__, but has one subtle difference with the way it handles the release segment. r!z(\.0)+$.cs|]}t|VqdSNstr.0xr r r <z'canonicalize_version..Ncsr$r%r&r(r r rr+@r,z.postz.dev+) isinstancer'r r epochappendrerjoinreleaseprepostdevlocal)r parsedpartsr r rcanonicalize_version&s(    &     r:filenamec Cs|ds td||dd}|d}|dvr"td||d|d}|d}d |vszInvalid build number: z in ''r )endswithrcountsplitr1matchUNICODErr _build_tag_regexrBuildTagintgroupr ) r;dashesr9 name_partrr build_part build_matchbuildtagsr r rparse_wheel_filenameQs6        rRcCs|dr|dtd }n|dr|dtd }ntd||d\}}}|s6td|t|}t|}||fS)Nz.tar.gzz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): rzInvalid sdist filename: )rClenr rpartitionrr )r; file_stemrMsep version_partrr r r rparse_sdist_filenameus  rX)r1typingrrrrrrQrr r r r rJr'rIr ValueErrorrrcompilerrHrr:rRrXr r r rs$   + $