
    i!                     j   S SK r S SKJr  S SKJrJrJrJrJr  S SK	J
r
Jr  S SKJr  Sr\ R                  " S\ R                   5      r\ R                  " S\ R                   5      r\ " S	 S
5      5       r " S S\5      r " S S\
5      rS\\   S\S\4S jrS\\   S\SS4S jrS\S\\   S\SS4S jrg)    N)total_ordering)Any
NamedTupleOptionalTupleUnion)ProtocolSelfVersionError)ClientVersion
APIVersionz?^v?(\d+)\.(\d+)(?:\.(\d+)(?:\.(\d+))?)?((?:alpha|beta|rc)\d*)?$z^(\d+)\.(\d+)(?:\.(\d+))?$c                   \   \ rS rSr% Sr\\\\\\\4   \S'   \\S'   SS\S\S\S\S	\4
S
 jjr	\
S\4S j5       r\
S\4S j5       r\
S\4S j5       r\
S\4S j5       r\
S\4S j5       rS\S\4S jrS\4S jrS\S\4S jrS\4S jr\S	\S\\\4   4S j5       r\S\SS 4S j5       rSrg)r      z
Represent client version.
_key_statusmajorminorpatchbuildstatusc                 J    U R                  U5      u  pgXX4Xg4U l        XPl        g N)_parse_statusr   r   )selfr   r   r   r   r   st0st1s           ;/app/mltbenv/lib/python3.13/site-packages/aioqbt/version.py__init__ClientVersion.__init__"   s'    %%f-5:	    returnc                      U R                   S   $ )zMajor number.r   r   r   s    r   r   ClientVersion.major'        yy|r!   c                      U R                   S   $ )zMinor number.   r$   r%   s    r   r   ClientVersion.minor,   r'   r!   c                      U R                   S   $ )zPatch number.   r$   r%   s    r   r   ClientVersion.patch1   r'   r!   c                      U R                   S   $ )zBuild number.   r$   r%   s    r   r   ClientVersion.build6   r'   r!   c                     U R                   $ )zStatus string.)r   r%   s    r   r   ClientVersion.status;   s     ||r!   otherc                 j    [        U[        5      (       a  U R                  UR                  :H  $ [        $ r   
isinstancer   r   NotImplementedr   r3   s     r   __eq__ClientVersion.__eq__@   s(    e]++99

**r!   c                 ,    [        U R                  5      $ r   )hashr   r%   s    r   __hash__ClientVersion.__hash__E   s    DIIr!   c                 j    [        U[        5      (       a  U R                  UR                  :  $ [        $ r   r5   r8   s     r   __lt__ClientVersion.__lt__H   s(    e]++99uzz))r!   c                     U R                   S SU R                  S SU R                  S 3nU R                  S:w  a  USU R                  S 3-  nXR                  -  nU$ )Nd.r   )r   r   r   r   r   )r   results     r   __str__ClientVersion.__str__M   s]    JJq>4::a.$**Q@::?$**Q((F++r!   c                     US:X  a  g[         R                  " SU[         R                  5      nUc  [        SU< 35      eUR	                  5       u  p4UR                  5       [        U=(       d    S5      4$ )N )releaser   z(alpha|beta|rc)(\d*)zBad status: r   )rematch
IGNORECASE
ValueErrorgroupslowerint)clsr   rL   abs        r   r   ClientVersion._parse_statusV   s`    R<0&"--H=|F:677||~wwy#af1+%%r!   versionc                    [         R                  U5      nUc  [        SU< 35      e[        US   5      n[        US   5      n[        US   =(       d    S5      n[        US   =(       d    S5      nUS   =(       d    SnU " X4XVU5      $ )	zz
Parse client version.

Format::

    major.minor.patch[.build][status]

Examples::

    4.2.5
    4.4.0beta2
    4.4.3.1
zBad version: r)   r,   r/   r         rI   )_VERSION_PATTERNrL   rN   rQ   )rR   rV   rL   r   r   r   r   r   s           r   parseClientVersion.parsea   s      !&&w/=}WK899E!HE!HE!HM"E!HM"qR5v66r!   )r   r   N)r   rI   )__name__
__module____qualname____firstlineno____doc__r   rQ   str__annotations__r   propertyr   r   r   r   r   objectboolr9   r=   r   r@   rF   classmethodr   r[   __static_attributes__ r!   r   r   r      s`    S#sC,
--Lc # c # SV 
 s   s   s   s     F t 
# C D 
  &3 &5c? & & 7C 7O 7 7r!   r   c                       \ rS rSr% Sr\\S'    \\S'    Sr\\S'    \S\	SS 4S	 j5       r
S\	4S
 jr\S\\\\\\\4   4      S\\\\\\\4   4      S\4S j5       rSrg)r   }   zW
Represent API version.

Instances can also be compared with 3-tuple of :class:`int`.

r   r   r   rJ   rV   r"   c                     [         R                  U5      nUc  [        SU< 35      eUR                  5       u  p4nU " [	        U5      [	        U5      [	        U=(       d    S5      5      $ )zu
Parse API version.

Format::

    major.minor[.release]

where ``major``, ``minor`` and ``release`` are all digits.
zBad API version: r   )_API_VERSION_PATTERNrL   rN   rO   rQ   )rR   rV   rL   s1s2s3s         r   r[   APIVersion.parse   sZ     %**73=0<==\\^
3r7CGSq\22r!   c                 R    U R                    SU R                   SU R                   3$ )NrD   )r   r   rJ   r%   s    r   rF   APIVersion.__str__   s%    **Qtzzl!DLL>::r!   rS   rT   c                 4    Uc  Uc  ggUc  gX:X  a  gX:  a  gg)z
Compare two API versions.

Return zero if ``a == b``; a negative value if ``a < b``;
or a positive value if ``a > b``.

``None`` is a special value treated as the latest version.

:return: integer value indicating version relationship.
r   r)   ri   )rR   rS   rT   s      r   compareAPIVersion.compare   s/    " 9yYVUr!   ri   N)r]   r^   r_   r`   ra   rQ   rc   rJ   rg   rb   r[   rF   r   r   r
   r   rv   rh   ri   r!   r   r   r   }   s     JJGS3C 3L 3 3&; ; E$c3m 4456 E$c3m 4456 
	 r!   r   c                       \ rS rSrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jr	S\S\4S jr
S\S\4S	 jrS
rg)
Comparable   r3   r"   c                     g r   ri   r8   s     r   r9   Comparable.__eq__       r!   c                     g r   ri   r8   s     r   __ne__Comparable.__ne__   r}   r!   c                     g r   ri   r8   s     r   r@   Comparable.__lt__   r}   r!   c                     g r   ri   r8   s     r   __le__Comparable.__le__   r}   r!   c                     g r   ri   r8   s     r   __gt__Comparable.__gt__   r}   r!   c                     g r   ri   r8   s     r   __ge__Comparable.__ge__   r}   r!   ri   N)r]   r^   r_   r`   r   rf   r9   r   r@   r   r   r   rh   ri   r!   r   ry   ry      st    C D C D C D C D C D C D r!   ry   rV   minimumr"   c                      U SL =(       d    X:  $ )z
Compare version with minimum requirement and return boolean

:param version: current version, or ``None`` as the latest
:param minimum: minimum version
Nri   rV   r   s     r   version_satisfyr      s     d?0g00r!   c                 :    U b  X:  a  [        SU SU  S35      egg)z
Compare version with minimum requirement and raise if violated.

:param version: current version, or ``None`` as the latest
:param minimum: minimum version
NzVersion z is required but z	 is foundr   r   s     r   version_checkr      s2     w0XgY.?y	RSS  1r!   paramc                     [        X5      (       d7  [        U5      [        L a  [        U5      " U6 n[        U < SU< SU< S35      eg )Nz requires version z but z found)r   typetupler   )r   rV   r   s      r   param_version_checkr      sL    7,,=E!7mW-GeY&85SYZ[[	 -r!   )rK   	functoolsr   typingr   r   r   r   r   typing_extensionsr	   r
   
aioqbt.excr   __all__compilerM   rZ   rm   r   r   ry   rf   r   r   rb   r   ri   r!   r   <module>r      s    	 $ : : , #
 ::FMM 
 zz!MM  `7 `7 `7FE EP (1Xj1 1J 14 1T8J/ T* T T\s \Xj-A \J \[_ \r!   