a [fh@sddlZddlmZmZmZmZmZddlmZm Z ddl m Z m Z eedee effZedeZGdd d eZGd d d eZed Zed ZeedddZee efedddZeeee eeefdddZeeee fdddZdS)N) FrozenSetNewTypeTupleUnioncast)Tag parse_tag)InvalidVersionVersionNormalizedNamec@seZdZdZdS)InvalidWheelFilenamezM An invalid wheel filename was found, users should refer to PEP 427. N__name__ __module__ __qualname____doc__r r r ?/usr/lib/python3.9/site-packages/pip/_vendor/packaging/utils.pyrsrc@seZdZdZdS)InvalidSdistFilenamez^ An invalid sdist filename was found, users should refer to the packaging user guide. Nrr r r rrsrz[-_.]+z (\d+)(.*))namereturncCstd|}tt|S)N-)_canonicalize_regexsublowerrr )rvaluer r rcanonicalize_name sr)versionrc Cst|tr0z t|}Wq4ty,|YS0n|}g}|jdkrT||jd|tddddd|j D|j dur|dd d|j D|j dur|d |j |j dur|d |j |j dur|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)+$.css|]}t|VqdSNstr.0xr r r <z'canonicalize_version..Ncss|]}t|VqdSr"r#r%r r rr(@r)z.postz.dev+) isinstancer$r r ZepochappendrerjoinreleaseZpreZpostdevlocal)rparsedpartsr r rcanonicalize_version&s&     &    r4)filenamerc Cs|dstd||dd}|d}|dvrDtd||d|d}|d}d |vsxtd |tjdurtd |t|}t|d }|d kr|d}t |}|durtd|d|dt t t | d | df}nd}t|d} |||| fS)Nz.whlz3Invalid wheel filename (extension must be '.whl'): r)z0Invalid wheel filename (wrong number of parts): r__z ^[\w\d._]*$zInvalid project name: rr8zInvalid build number: z in ''r )endswithrcountsplitr-matchUNICODErr _build_tag_regexrBuildTagintgroupr ) r5Zdashesr3 name_partrrZ build_partZ build_matchZbuildtagsr r rparse_wheel_filenameQs6       rHcCs|dr|dtd }n,|dr<|dtd }ntd||d\}}}|sltd|t|}t|}||fS)Nz.tar.gzz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): rzInvalid sdist filename: )r=lenr rpartitionrr )r5Z file_stemrFsepZ version_partrrr r rparse_sdist_filenameus  rL)r-typingrrrrrrGrr rr r rDr$rCr ValueErrorrrcompilerrBrr4rHrLr r r rs   , $