a oe@sddlZddlmZmZmZmZmZddlmZm Z ddl m Z m Z eedee effZedeZGdd d eZGd d d eZed Zed ZeedddZddee efeedddZeeee 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 FC:\Program Files\Certbot\pkgs\pkg_resources\_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 srT)strip_trailing_zero)versionrrcCs t|tr0z t|}Wq4ty,|YS0n|}g}|jdkrT||jdddd|jD}|r|t dd|}|||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!.css|]}t|VqdSNstr.0xr r r =z'canonicalize_version..z(\.0)+$Ncss|]}t|VqdSr"r#r%r r rr(Er)z.postz.dev+) isinstancer$r r ZepochappendjoinreleasererZpreZpostdevlocal)rrparsedpartsZrelease_segmentr r rcanonicalize_version&s,          r5)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: rr9zInvalid build number: z in ''r )endswithrcountsplitr0matchUNICODErr _build_tag_regexrBuildTagintgroupr ) r6Zdashesr4 name_partrrZ build_partZ build_matchbuildtagsr r rparse_wheel_filenameVs6       rJcCs|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 )r6Z file_stemrGsepZ version_partrrr r rparse_sdist_filenamezs  rN)r0typingrrrrrrIrr rr r rEr$rDr ValueErrorrrcompilerrCrboolr5rJrNr r r rs&     1 $