o nnh8@sdddlmZddlZddlmZmZejdejdZGdddZ Gdd d Z Gd d d eZ dS) ) annotationsN) LooseVersionVersiona ^ (?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@PeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)_AlphazClass 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 ||_dSN) specifierselfr r @/usr/local/lib/python3.10/dist-packages/ansible/utils/version.py__init__, z_Alpha.__init__cC t|jSrreprr r r r r __repr__/rz_Alpha.__repr__cC.t|tr |j|jkSt|tr|j|kSdSNF) isinstancerr strr otherr r r __eq__2    z _Alpha.__eq__cC || Srrrr r r __ne__: z _Alpha.__ne__cC<t|tr |j|jkSt|tr|j|kSt|trdStr)rrr r_Numeric ValueErrorrr r r __lt__=     z _Alpha.__lt__cC||p ||Srr$rrr r r __le__Gz _Alpha.__le__cCrrr(rr r r __gt__Jr z _Alpha.__gt__cCrrr$rr r r __ge__Mr z _Alpha.__ge__N __name__ __module__ __qualname____doc__rrrrr$r(r+r-r r r r r&  rc@r)r"zClass 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 r r r rWz_Numeric.__init__cCrrrrr r r rZrz_Numeric.__repr__cCrr)rr"r r4rr r r r]rz_Numeric.__eq__cCrrrrr r r rer z_Numeric.__ne__cCr!)NT)rr"r r4rr#rr r r r$hr%z_Numeric.__lt__cCr&rr'rr r r r(rr)z_Numeric.__le__cCrrr*rr r r r+ur z_Numeric.__gt__cCrrr,rr r r r-xr z_Numeric.__ge__Nr.r r r r r"Qr3r"c@seZdZdZeZdddZddZeddZ d d Z e d d Z e d dZ e ddZddZddZddZddZddZddZddZdS) SemanticVersionzwVersion comparison class that implements Semantic Versioning 2.0.0 Based off of ``distutils.version.Version`` NcCs:||_d|_d|_d|_d|_d|_|r||dSdS)Nr )vstringmajorminorpatch prerelease buildmetadataparse)r r7r r r rszSemanticVersion.__init__cCs d|jS)NzSemanticVersion(%r))r7rr r r rrzSemanticVersion.__repr__c Cst|ts td|z |jdd}Wn ty!td|wd}dD]}z||}Wn ty8Yq&w||kr?|}q&|d|}|r\tdd|Dttfkr\td|t d|j }|d gdt |}t d d d d|D|r|d fSd fS)zThis 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)-+cs|]}t|VqdSr)type.0vr r r z5SemanticVersion.from_loose_version..zNon integer values in %rz[+-].+$rz%s%s.csrAr)rrCr r r rFrG)rrr#versionAttributeErrorindexsetr4researchr7lenr6joingroup) loose_versionrJ extra_idxmarkeridxextrar r r from_loose_versions>         z"SemanticVersion.from_loose_versioncCst|}|s td||ddddd\}}}}}||_t||_t||_t||_|rcs(|]}|r t|nt|VqdSrisdigitr"rrDxr r r rF&z(SemanticVersion.parse..rHcsr]rr^r`r r r rFrb) SEMVER_REmatchr#rRr7r4r8r9r:tuplesplitr;r<)r r7rdr8r9r:r;r<r r r r=s     zSemanticVersion.parsecCs|j|j|jfSr)r8r9r:rr r r coreszSemanticVersion.corecCrr)boolr;rr r r is_prereleases zSemanticVersion.is_prereleasecCs|jdkp|j SNr)r8rirr r r is_stableszSemanticVersion.is_stablecCst|tr t|}|j|jkr|j|jkrdSdSt|j|jfs#dS|jr+|js+dS|js3|jr3dS|j|jkr;dS|j|jkrCdSdS)NrYr)rrr6rganyr;rr r r _cmps"       zSemanticVersion._cmpcCs||dkSrjrnrr r r rr5zSemanticVersion.__eq__cCrrrrr r r rr zSemanticVersion.__ne__cCs||dkSrjrorr r r r$r5zSemanticVersion.__lt__cCs||dkSrjrorr r r r(r5zSemanticVersion.__le__cCs||dkSrjrorr r r r+ r5zSemanticVersion.__gt__cCs||dkSrjrorr r r r- r5zSemanticVersion.__ge__r)r/r0r1r2rc version_rerr staticmethodrXr=propertyrgrirkrnrrr$r(r+r-r r r r r6|s*   (   # r6) __future__rrN#ansible.module_utils.compat.versionrrcompileXrcrr"r6r r r r s ++