a „oevã@sødZddlZddlmZddlmZddlmZeeefZ e  dej ¡Z e  dej ¡Z e  d ej ¡Ze  d ej ¡Zeed œd d „Zeedœdd„Zeedœdd„Zeedœdd„Zeedœdd„Zeedœdd„Zeedœdd„Zeedœdd„ZdS) zZ Helpers for normalization as expected in wheel/sdist/module file names and core metadata éN)ÚPath)ÚUnioné)Ú packagingz)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$z [^A-Z0-9.]+z [^A-Z0-9]+z,^v?(?P(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*))ÚnameÚreturncCst dd|¡}| ¡sJ‚|S)zÍMake a string safe to be used as Python identifier. >>> safe_identifier("12abc") '_12abc' >>> safe_identifier("__editable__.myns.pkg-78.9.3_local") '__editable___myns_pkg_78_9_3_local' z \W|^(?=\d)Ú_)ÚreÚsubÚ isidentifier)rÚsafe©r ú:C:\Program Files\Certbot\pkgs\setuptools\_normalization.pyÚsafe_identifiers r)Ú componentrcCs t d|¡S)z°Escape a component used as a project name according to Core Metadata. >>> safe_name("hello world") 'hello-world' >>> safe_name("hello?world") 'hello-world' ú-)Ú_UNSAFE_NAME_CHARSr )rr r rÚ safe_name sr)ÚversionrcCsV| dd¡}zttj |¡ƒWStjjyPt d|¡}ttj |¡ƒYS0dS)a Convert an arbitrary string into a valid version string. Can still raise an ``InvalidVersion`` exception. To avoid exceptions use ``best_effort_version``. >>> safe_version("1988 12 25") '1988.12.25' >>> safe_version("v0.2.1") '0.2.1' >>> safe_version("v0.2?beta") '0.2b0' >>> safe_version("v0.2 beta") '0.2b0' >>> safe_version("ubuntu lts") Traceback (most recent call last): ... setuptools.extern.packaging.version.InvalidVersion: Invalid version: 'ubuntu.lts' ú Ú.rN)ÚreplaceÚstrrrZVersionÚInvalidVersionrr )rÚvZattemptr r rÚ safe_version+s   rcCs–z t|ƒWStjjy�| dd¡}t |¡}|rP|d}|t|ƒd…}nd}|}t  d|¡  d¡}d|›�  d¡}t|›d|›�ƒYS0dS)aûConvert an arbitrary string into a version-like string. Fallback when ``safe_version`` is not safe enough. >>> best_effort_version("v0.2 beta") '0.2b0' >>> best_effort_version("ubuntu lts") '0.dev0+sanitized.ubuntu.lts' >>> best_effort_version("0.23ubuntu1") '0.23.dev0+sanitized.ubuntu1' >>> best_effort_version("0.23-") '0.23.dev0+sanitized' >>> best_effort_version("0.-_") '0.dev0+sanitized' >>> best_effort_version("42.+?1") '42.dev0+sanitized.1' rrr NÚ0z sanitized.z.dev0+) rrrrrÚ_PEP440_FALLBACKÚsearchÚlenÚ_NON_ALPHANUMERICr Ústrip)rrÚmatchr ÚrestZ safe_restÚlocalr r rÚbest_effort_versionDs   r%)ÚextrarcCst d|¡ d¡ ¡S)z¬Normalize extra name according to PEP 685 >>> safe_extra("_FrIeNdLy-._.-bArD") 'friendly-bard' >>> safe_extra("FrIeNdLy-._.-bArD__._-") 'friendly-bard' r)r r r!Úlower)r&r r rÚ safe_extraesr()ÚvaluercCs| dd¡ d¡S)z»Normalize each component of a filename (e.g. distribution/version part of wheel) Note: ``value`` needs to be already normalized. >>> filename_component("my-pkg") 'my_pkg' rr)rr!©r)r r rÚfilename_componentosr+cCs tt|ƒƒS)zBLike ``safe_name`` but can be used as filename component for wheel)r+rr*r r rÚ safer_namexsr,cCs tt|ƒƒS)zLLike ``best_effort_version`` but can be used as filename component for wheel)r+r%r*r r rÚsafer_best_effort_version~sr-)Ú__doc__r ÚpathlibrÚtypingrZexternrrZ_PathÚcompileÚIZ _VALID_NAMErr rrrrr%r(r+r,r-r r r rÚs"      !