
    Vh8                        d dl mZ d dlZd dlmZmZ  ej                  dej                        Z G d d      Z	 G d d	      Z
 G d
 de      Zy)    )annotationsN)LooseVersionVersiona  
    ^
        (?P<major>0|[1-9]\d*)
        \.
        (?P<minor>0|[1-9]\d*)
        \.
        (?P<patch>0|[1-9]\d*)
        (?:
            -
            (?P<prerelease>
                (?: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<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*)
        )?
    $
    )flagsc                  @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)_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.
    c                    || _         y N)	specifierselfr   s     E/home/dcms/DCMS/lib/python3.12/site-packages/ansible/utils/version.py__init__z_Alpha.__init__,   s	    "    c                ,    t        | j                        S r
   reprr   r   s    r   __repr__z_Alpha.__repr__/       DNN##r   c                    t        |t              r| j                  |j                  k(  S t        |t              r| j                  |k(  S yNF)
isinstancer   r   strr   others     r   __eq__z_Alpha.__eq__2   s;    eV$>>U__44s#>>U**r   c                &    | j                  |       S r
   r   r   s     r   __ne__z_Alpha.__ne__:       ;;u%%%r   c                    t        |t              r| j                  |j                  k  S t        |t              r| j                  |k  S t        |t              ryt
        r   )r   r   r   r   _Numeric
ValueErrorr   s     r   __lt__z_Alpha.__lt__=   sK    eV$>>EOO33s#>>E))x(r   c                J    | j                  |      xs | j                  |      S r
   r%   r   r   s     r   __le__z_Alpha.__le__G       {{5!7T[[%77r   c                &    | j                  |       S r
   r(   r   s     r   __gt__z_Alpha.__gt__J   r!   r   c                &    | j                  |       S r
   r%   r   s     r   __ge__z_Alpha.__ge__M   r!   r   N__name__
__module____qualname____doc__r   r   r   r    r%   r(   r,   r/    r   r   r   r   &   s/    
#$&8&&r   r   c                  @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)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.
    c                $    t        |      | _        y r
   )intr   r   s     r   r   z_Numeric.__init__W   s    Yr   c                ,    t        | j                        S r
   r   r   s    r   r   z_Numeric.__repr__Z   r   r   c                    t        |t              r| j                  |j                  k(  S t        |t              r| j                  |k(  S yr   )r   r#   r   r8   r   s     r   r   z_Numeric.__eq__]   s;    eX&>>U__44s#>>U**r   c                &    | j                  |       S r
   r   r   s     r   r    z_Numeric.__ne__e   r!   r   c                    t        |t              r| j                  |j                  k  S t        |t              r| j                  |k  S t        |t              ryt
        )NT)r   r#   r   r8   r   r$   r   s     r   r%   z_Numeric.__lt__h   sK    eX&>>EOO33s#>>E))v&r   c                J    | j                  |      xs | j                  |      S r
   r'   r   s     r   r(   z_Numeric.__le__r   r)   r   c                &    | j                  |       S r
   r+   r   s     r   r,   z_Numeric.__gt__u   r!   r   c                &    | j                  |       S r
   r.   r   s     r   r/   z_Numeric.__ge__x   r!   r   Nr0   r5   r   r   r#   r#   Q   s/    
($&8&&r   r#   c                      e Zd ZdZeZddZd Zed        Z	d Z
ed        Zed        Zed	        Zd
 Zd Zd Zd Zd Zd Zd Zy)SemanticVersionzwVersion comparison class that implements Semantic Versioning 2.0.0

    Based off of ``distutils.version.Version``
    Nc                    || _         d | _        d | _        d | _        d| _        d| _        |r| j                  |       y y )Nr5   )vstringmajorminorpatch
prereleasebuildmetadataparse)r   rC   s     r   r   zSemanticVersion.__init__   sA    


JJw r   c                     d| j                   z  S )NzSemanticVersion(%r))rC   r   s    r   r   zSemanticVersion.__repr__   s    $t||33r   c                N   t        | t              st        d| z        	 | j                  dd }d}dD ]  }	 |j                  |      }||k  s|} |d| }|r1t        d |D              t        t        f      k7  rt        d| z        t        j                  d| j                        }|dgdt        |      z
  z  z   }t        d	j                  d
 |D              |r|j                  d            S d      S # t        $ r t        d| z        w xY w# t        $ r Y w xY w)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   )-+c              3  2   K   | ]  }t        |        y wr
   )type.0vs     r   	<genexpr>z5SemanticVersion.from_loose_version.<locals>.<genexpr>   s     4q474   zNon integer values in %rz[+-].+$r   .c              3  2   K   | ]  }t        |        y wr
   )r   rQ   s     r   rT   z5SemanticVersion.from_loose_version.<locals>.<genexpr>   s     1AQ1rU    )r   r   r$   versionAttributeErrorindexsetr8   researchrC   lenrA   joingroup)loose_versionrY   	extra_idxmarkeridxextras         r   from_loose_versionz"SemanticVersion.from_loose_version   sZ    -67-GHH	I#++A.G 	  	$F$mmF+ ? #I	$ *9%s4G44SFC7-GHH 		)]%:%:;QC1s7|#344111"'A/
 	
 .0/
 	
+  	I7-GHH	I  s   C= D=D	D$#D$c                   t         j                  |      }|st        d|z        |j                  ddddd      \  }}}}}|| _        t        |      | _        t        |      | _        t        |      | _        |r&t        d |j                  d      D              | _        |r't        d	 |j                  d      D              | _        y y )
Nzinvalid semantic version '%s'      rL         c              3  h   K   | ]*  }|j                         rt        |      n
t        |       , y wr
   isdigitr#   r   rR   xs     r   rT   z(SemanticVersion.parse.<locals>.<genexpr>   s&     #mRS199;HQKF1I$M#m   02rV   c              3  h   K   | ]*  }|j                         rt        |      n
t        |       , y wr
   rn   rp   s     r   rT   z(SemanticVersion.parse.<locals>.<genexpr>   s&     &sUVaiikx{vay'P&srr   )	SEMVER_REmatchr$   ra   rC   r8   rD   rE   rF   tuplesplitrG   rH   )r   rC   ru   rD   rE   rF   rG   rH   s           r   rI   zSemanticVersion.parse   s    (<wFGG;@;;q!QPQST;U8uj-Z
Z
Z
##mWaWgWghkWl#mmDO!&&sZgZmZmnqZr&s!sD r   c                H    | j                   | j                  | j                  fS r
   )rD   rE   rF   r   s    r   corezSemanticVersion.core   s    zz4::tzz11r   c                ,    t        | j                        S r
   )boolrG   r   s    r   is_prereleasezSemanticVersion.is_prerelease   s    DOO$$r   c                >    | j                   dk(  xs | j                   S Nr   )rD   r|   r   s    r   	is_stablezSemanticVersion.is_stable   s     
 JJ!O9t'9'9::r   c                   t        |t              rt        |      }| j                  |j                  k7  r| j                  |j                  k  ryyt	        | j
                  |j
                  f      sy| j
                  r|j
                  sy| j
                  s|j
                  ry| j
                  |j
                  k  ry| j
                  |j
                  kD  ryy)Nri   r   )r   r   rA   ry   anyrG   r   s     r   _cmpzSemanticVersion._cmp   s    eS!#E*E99

" yy5::%DOOU%5%567??5#3#3U%5%5!1!115#3#33 r   c                *    | j                  |      dk(  S r~   r   r   s     r   r   zSemanticVersion.__eq__       yy1$$r   c                &    | j                  |       S r
   r   r   s     r   r    zSemanticVersion.__ne__   r!   r   c                *    | j                  |      dk  S r~   r   r   s     r   r%   zSemanticVersion.__lt__      yy!##r   c                *    | j                  |      dk  S r~   r   r   s     r   r(   zSemanticVersion.__le__  r   r   c                *    | j                  |      dkD  S r~   r   r   s     r   r,   zSemanticVersion.__gt__	  r   r   c                *    | j                  |      dk\  S r~   r   r   s     r   r/   zSemanticVersion.__ge__  r   r   r
   )r1   r2   r3   r4   rt   
version_rer   r   staticmethodrg   rI   propertyry   r|   r   r   r   r    r%   r(   r,   r/   r5   r   r   rA   rA   |   s    
 J	 4 &
 &
Pt  2 2 % % ; ;F%&$%$%r   rA   )
__future__r   r]   #ansible.module_utils.compat.versionr   r   compileXrt   r   r#   rA   r5   r   r   <module>r      sT    # 	 E
 BJJ( $$+	2(& (&V(& (&VQ%g Q%r   