a ì)g�ã@s|ddlmZmZmZeZddlZddlmZm Z ddl m Z ej dej d�ZGdd„dƒZGd d „d ƒZGd d „d e ƒZdS) é)Úabsolute_importÚdivisionÚprint_functionN)Ú LooseVersionÚVersion)Ú text_typea° ^ (?P0|[1-9]\d*) \. (?P0|[1-9]\d*) \. (?P0|[1-9]\d*) (?: - (?P (?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*) (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))* ) )? (?: \+ (?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*) )? $ )Úflagsc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)Ú_Alphaz•Class to easily allow comparing strings Largely this exists to make comparing an integer and a string on py3 so that it works like py2. cCs ||_dS©N)Ú specifier©Úselfr ©rú9/usr/lib/python3.9/site-packages/ansible/utils/version.pyÚ__init__0sz_Alpha.__init__cCs t|jƒSr ©Úreprr ©r rrrÚ__repr__3sz_Alpha.__repr__cCs.t|tƒr|j|jkSt|tƒr*|j|kSdS©NF)Ú isinstancer r Ústr©r ÚotherrrrÚ__eq__6s     z _Alpha.__eq__cCs | |¡ Sr ©rrrrrÚ__ne__>sz _Alpha.__ne__cCs@t|tƒr|j|jkSt|tƒr*|j|kSt|tƒr8dSt‚dSr)rr r rÚ_NumericÚ ValueErrorrrrrÚ__lt__As     z _Alpha.__lt__cCs| |¡p| |¡Sr ©rrrrrrÚ__le__Ksz _Alpha.__le__cCs | |¡ Sr ©r!rrrrÚ__gt__Nsz _Alpha.__gt__cCs | |¡ Sr ©rrrrrÚ__ge__Qsz _Alpha.__ge__N© Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrr!r#r%rrrrr *s r c@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)rz•Class to easily allow comparing numbers Largely this exists to make comparing an integer and a string on py3 so that it works like py2. cCst|ƒ|_dSr )Úintr r rrrr[sz_Numeric.__init__cCs t|jƒSr rrrrrr^sz_Numeric.__repr__cCs.t|tƒr|j|jkSt|tƒr*|j|kSdSr)rrr r+rrrrras     z_Numeric.__eq__cCs | |¡ Sr rrrrrrisz_Numeric.__ne__cCs@t|tƒr|j|jkSt|tƒr*|j|kSt|tƒr8dSt‚dS)NT)rrr r+r rrrrrrls     z_Numeric.__lt__cCs| |¡p| |¡Sr r rrrrr!vsz_Numeric.__le__cCs | |¡ Sr r"rrrrr#ysz_Numeric.__gt__cCs | |¡ Sr r$rrrrr%|sz_Numeric.__ge__Nr&rrrrrUs rc@s–eZdZdZeZddd„Zdd„Zedd„ƒZ d d „Z e d d „ƒZ e d d„ƒZ e dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS) ÚSemanticVersionzwVersion comparison class that implements Semantic Versioning 2.0.0 Based off of ``distutils.version.Version`` NcCs6||_d|_d|_d|_d|_d|_|r2| |¡dS)Nr)ÚvstringÚmajorÚminorÚpatchÚ prereleaseÚ buildmetadataÚparse)r r-rrrrˆszSemanticVersion.__init__cCs d|jS)NzSemanticVersion(%r))r-rrrrr“szSemanticVersion.__repr__c Cst|tƒstd|ƒ‚z|jdd…}WntyFtd|ƒ‚Yn0d}dD]6}z| |¡}WntyxYqPYqP0||krP|}qP|d|…}|rÀtdd„|DƒƒttfƒkrÀtd|ƒ‚t  d|j ¡}|d gdt |ƒ}t d d   d d„|Dƒ¡|�r | d ¡nd fƒS)zúThis method is designed to take a ``LooseVersion`` and attempt to construct a ``SemanticVersion`` from it This is useful where you want to do simple version math without requiring users to provide a compliant semver. z%r is not a LooseVersionNé)ú-ú+css|]}t|ƒVqdSr )Útype©Ú.0ÚvrrrÚ ±óz5SemanticVersion.from_loose_version..zNon integer values in %rz[+-].+$rz%s%sÚ.css|]}t|ƒVqdSr )rr8rrrr;ºr<Ú)rrrÚversionÚAttributeErrorÚindexÚsetr+ÚreÚsearchr-Úlenr,ÚjoinÚgroup)Z loose_versionr?Z extra_idxZmarkerÚidxZextrarrrÚfrom_loose_version–s2        þÿz"SemanticVersion.from_loose_versioncCs”t |¡}|std|ƒ‚| ddddd¡\}}}}}t|ƒ|_t|ƒ|_t|ƒ|_|rrtdd„|  d ¡Dƒƒ|_ |r�td d„|  d ¡Dƒƒ|_ dS) Nzinvalid semantic version '%s'éér4éécss&|]}| ¡rt|ƒnt|ƒVqdSr ©Úisdigitrr ©r9Úxrrrr;Êr<z(SemanticVersion.parse..r=css&|]}| ¡rt|ƒnt|ƒVqdSr rNrPrrrr;Ìr<) Ú SEMVER_REÚmatchrrGr+r.r/r0ÚtupleÚsplitr1r2)r r-rSr.r/r0r1r2rrrr3¿s     zSemanticVersion.parsecCs|j|j|jfSr )r.r/r0rrrrÚcoreÎszSemanticVersion.corecCs t|jƒSr )Úboolr1rrrrÚ is_prereleaseÒszSemanticVersion.is_prereleasecCs|jdkp|j S©Nr)r.rXrrrrÚ is_stableÖszSemanticVersion.is_stablecCsŠt|tƒrt|ƒ}|j|jkr2|j|jkr.dSdSt|j|jfƒsFdS|jrV|jsVdS|jsf|jrfdS|j|jkrvdS|j|jkr†dSdS)NéÿÿÿÿrJr)rrr,rVÚanyr1rrrrÚ_cmpÝs"       zSemanticVersion._cmpcCs| |¡dkSrY©r]rrrrrszSemanticVersion.__eq__cCs | |¡ Sr rrrrrrszSemanticVersion.__ne__cCs| |¡dkSrYr^rrrrrszSemanticVersion.__lt__cCs| |¡dkSrYr^rrrrr! szSemanticVersion.__le__cCs| |¡dkSrYr^rrrrr# szSemanticVersion.__gt__cCs| |¡dkSrYr^rrrrr%szSemanticVersion.__ge__)N)r'r(r)r*rRZ version_rerrÚ staticmethodrIr3ÚpropertyrVrXrZr]rrrr!r#r%rrrrr,€s(  (   #r,)Z __future__rrrr7Z __metaclass__rCZ#ansible.module_utils.compat.versionrrZansible.module_utils.sixrÚcompileÚXrRr rr,rrrrÚs ë++