
    =OOf!:                         d Z ddlmZmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZ dd	lmZmZmZ dd
lmZ ddlmZmZmZmZmZ e
eegZ G d de      Z G d de      Z G d de      Z y)
    )datetimeMINYEAR)linesep)randint)sleep   )FIRSTROUND_ROBINRANDOMSEQUENCE_TYPESSTRING_TYPESget_config_parameter   )LDAPUnknownStrategyErrorLDAPServerPoolErrorLDAPServerPoolExhaustedError)Server)loglog_enabledERRORBASICNETWORKc                       e Zd Zd Zy)ServerStatec                 .    || _         || _        || _        y N)serverlast_checked_time	available)selfr   r   r    s       S/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/core/pooling.py__init__zServerState.__init__(   s    !2"    N)__name__
__module____qualname__r#    r$   r"   r   r   '   s    #r$   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ServerPoolStatec                     g | _         |j                  | _        || _        d| _        | j	                          t        j                         | _        t        t              rt        t        d|        y y )Nr   z"instantiated ServerPoolState: <%r>)server_statesstrategyserver_poollast_used_serverrefreshr   nowinitialize_timer   r   r   )r!   r.   s     r"   r#   zServerPoolState.__init__/   sX    #,,& !'||~u;TB r$   c                 t   dt         z   }| j                  r1| j                  D ]!  }|t        |j                        t         z   z  }# n|dt         z   z  }|dt        | j                        z   t         z   z  }|d| j
                  dk(  rdn+t        | j                  | j
                     j                        z   z  }|S )N	servers: NonePool strategy: z - Last used server: )r   r,   strr   r-   r/   )r!   sstates      r"   __str__zServerPoolState.__str__:   s    '!++ 1S&001 '!!A	T]]!33g==	$$2G2G22MSVW[WiWijnjj  XA  XH  XH  TI  J  	Jr$   c                     g | _         | j                  j                  D ]7  }| j                   j                  t	        |t        t        dd      d             9 t        dt        | j                         dz
        | _	        y )Nr   Tr   )
r,   r.   serversappendr   r   r   r   lenr/   )r!   r   s     r"   r0   zServerPoolState.refreshF   sm    &&.. 	ZF%%k&(7Aq:QSW&XY	Z '3t/A/A+BQ+F Gr$   c                 H    | j                   | j                     j                  S r   )r,   r/   r   r!   s    r"   get_current_serverz"ServerPoolState.get_current_serverL   s    !!$"7"78???r$   c                 <   | j                   r| j                  j                  t        k(  r8| j                  j                  r| j                  d      | _        nLd| _        nC| j                  j                  t        k(  rv| j                  j                  r$| j                  | j                  dz         | _        n| j                  dz   t        | j                         k  r| j                  dz   nd| _        n| j                  j                  t        k(  rT| j                  j                  r| j                         | _        ngt        dt        | j                         dz
        | _        n?t        t              r%t        t        d| j                  j                         t        d      t        t               rt        t         d| j                         | j                   | j                     j"                  S t        t              rt        t        d|        t%        d      )	Nr   )startingr   z$unknown server pooling strategy <%s>zunknown server pooling strategyz&server returned from Server Pool: <%s>zno servers in Server Pool <%s>zno servers in server pool)r,   r.   r-   r
   activefind_active_serverr/   r   r?   r   find_active_random_serverr   r   r   r   r   r   r   r   rA   s    r"   
get_serverzServerPoolState.get_serverO   s   ((E1##**,0,C,CQ,C,OD) -.D)!!**k9##**,0,C,CDDYDY\]D],^D) KOJ_J_bcJcgjkok}k}g~I~D,A,AA,E  EFD)!!**f4##**,0,J,J,LD) -4As4;M;M7NQR7R,SD)u%EtGWGWG`G`a./PQQ5!ECTEZEZ[%%d&;&;<CCC5!E;TB%&ABBr$   c                 d   | j                   j                  }|rt        t              rt	        t        d|        | j
                  d d  }|r|j                  t        dt        |      dz
              }|j                  st        | j                   j                  t              r| j                   j                  sBt        j                         |j                  z
  j                   | j                   j                  k  r+t        t              rt	        t        d|j"                         t        t              rt	        t        d|j"                         t        j                         |_        t        t              rt	        t        d|j"                         |j"                  j%                         r"d|_	        | j
                  j'                  |      S d|_	        |rt        | j                   j                  t              s|dz  }|rt        t(              rt	        t(        d	|        t+        d
      )Nz4entering loop for finding active server in pool <%s>r   r   z8server <%s> excluded from checking because it is offlineserver <%s> reinserted in pool%checking server <%s> for availabilityTFzSno random active server available in Server Pool <%s> after maximum number of trieszNno random active server available in server pool after maximum number of tries)r.   rE   r   r   r   r,   popr   r?   r    
isinstanceexhaustboolr   r1   r   secondsr   check_availabilityindexr   r   )r!   counter	temp_listserver_states       r"   rG   z)ServerPoolState.find_active_random_serverq   s   ""))7#GSUYZ**1-I  )}}WQI8J-KL#--"4#3#3#;#;TBtGWGWG_G_emeqeqes  wC  wU  wU  fU  e^  e^  ae  aq  aq  ay  ay  ey&w/)ceqexexy "7+)I<K^K^_19.w'!H,J]J]^&&99;-1L*--33LAA-2L*' ( d..55t<13 4 ulnrs*+{||r$   c                    t        d      }| j                  j                  }|t        | j                        k\  rd}|rt        t              rt        t        d||        d}t        | j                        }||dz
  k  r |dz  }||z   |k  r||z   n||z   |z
  }| j                  |   }|j                  sSt        | j                  j                  t              r| j                  j                  sBt        j                         |j                  z
  j                  | j                  j                  k  rt        t              rt        | j                  j                  t              rt        t        d|j                          n\t        t        d|j                   | j                  j                  t        j                         |j                  z
  j                  z
         ht        t              rt        t        d|j                          t        j                         |_        t        t              rt        t        d	|j                          |j                   j#                         r	d
|_        |S d|_        ||dz
  k  r t        | j                  j                  t              s|dz  }t        t              rt        t        d|       t%        |       |rt        t&              rt        t&        d|        t)        d      )NPOOLING_LOOP_TIMEOUTr   z@entering loop number <%s> for finding active server in pool <%s>r7   r   z5server <%s> excluded from checking because is offlinezDserver <%s> excluded from checking because is offline for %d secondsrJ   rK   TFz9waiting for %d seconds before retrying pool servers cyclezLno active server available in Server Pool <%s> after maximum number of trieszGno active server available in server pool after maximum number of tries)r   r.   rE   r?   r,   r   r   r   r    rM   rN   rO   r   r1   r   rP   r   rQ   r   r   r   )r!   rD   conf_pool_timeoutrS   rR   	pool_sizeoffsetrU   s           r"   rF   z"ServerPoolState.find_active_server   s   01GH""))s4--..H7#G_ahjnoED../I)a-'
-2X-=	-I)uW_O_bkOk#11&9#--"4#3#3#;#;TBtGWGWG_G_emeqeqes  wC  wU  wU  fU  e^  e^  ae  aq  aq  ay  ay  ey&w/)$*:*:*B*BDI #G-dfrfyfy z #G-s  vB  vI  vI  LP  L\  L\  Ld  Ld  hp  ht  ht  hv  yE  yW  yW  hW  g`  g`  L`  !b "7+)I<K^K^_19.w'!H,J]J]^&&99;-1L*!M-2L*+ )a-'. d..55t<17#GXZkl#$A D uegkl*+tuur$   c                 ,    t        | j                        S r   )r?   r,   rA   s    r"   __len__zServerPoolState.__len__   s    4%%&&r$   N)r%   r&   r'   r#   r;   r0   rB   rH   rG   rF   r\   r(   r$   r"   r*   r*   .   s3    	C
H@ CD}@*vX'r$   r*   c                   Z    e Zd ZdedddfdZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zy)
ServerPoolNTFc                 "   |t         vr+t        t              rt        t        d|       t	        d      |r,|s*t        t              rt        t        d       t        d      g | _        t               | _        || _	        || _
        || _        d | _        t        |t        t        fz         r| j!                  |       n*t        |t"              r| j!                  t        |             || _        t        t&              rt        t&        d|        y y )Nzunknown pooling strategy <%s>zunknown pooling strategyz3cannot instantiate pool with exhaust and not activez<pools can be exhausted only when checking for active serverszinstantiated ServerPool: <%r>)POOLING_STRATEGIESr   r   r   r   r   r=   dictpool_statesrE   rN   single_pool_staterM   r   r   addr   r-   r   )r!   r=   pool_strategyrE   rN   single_states         r"   r#   zServerPool.__init__   s      225!E:MJ*+EFF65!EPQ%&dee6"g~
:;HHW.HHVG_%%u6= r$   c                 p   dt         z   }| j                  r'| j                  D ]  }|t        |      t         z   z  } n|dt         z   z  }|dt        | j                        z   z  }|d| j                  rt        | j                        ndz   z  }|d| j
                  rt        | j
                        ndz   z  }|S )Nr4   r5   r6   z - active: Falsez - exhaust pool: )r   r=   r8   r-   rE   rN   )r!   r9   r   s      r"   r;   zServerPool.__str__   s    g%A||"ll /FVw..A/ Vg%%"S%777A#4;;s4;;'7GTTA)$,,S->T[\\AHr$   c                    d}| j                   r5|dz  }| j                   D ]  }||j                         dz   z  } |d d dz   }n|dz  }|dj                  |       z  }|dj                  |       z  }|d	j                  |       z  }|d
z  }|S )NzServerPool(servers=[z, ]r5   z, pool_strategy={0.strategy!r}z, active={0.active!r}z, exhaust={0.exhaust!r}))r=   __repr__format)r!   rr   s      r"   ro   zServerPool.__repr__   s    !<<HA,, .V__&--.#2AKA	-44T::	$++D11	&--d33	Sr$   c                 ,    t        | j                        S r   )r?   r=   rA   s    r"   r\   zServerPool.__len__   s    4<<  r$   c                      | j                   |   S r   )r=   )r!   items     r"   __getitem__zServerPool.__getitem__   s    ||D!!r$   c                 6    | j                   j                         S r   )r=   __iter__rA   s    r"   rw   zServerPool.__iter__  s    ||$$&&r$   c                 F   t        |t              r,|| j                  vr | j                  j                  |       nt        |t              r%| j                  j                  t        |             nt        |t
              r|D ]  }t        |t              r| j                  j                  |       /t        |t              r%| j                  j                  t        |             dt        t              rt        t        d|        t        d       n+t        t              rt        t        d|        t        d      | j                  r(| j                  r| j                  j                          y y | j                  D ]  }| j                  |   j                          ! y )Nz,element must be a server in Server Pool <%s>z%server in ServerPool must be a ServerzLserver must be a Server of a list of Servers when adding to Server Pool <%s>z+server must be a Server or a list of Server)rM   r   r=   r>   r   r   r   r   r   r   rc   rd   r0   rb   )r!   r=   r   
connections       r"   re   zServerPool.add  s<   gv&dll*##G,.LLw00! Wff-LL''/5LL''v7"5)E#QSWX-.UVVW 5!Eikop%&STT;;  ((*   #.. 7
  ,4467r$   c                 t   || j                   v r| j                   j                  |       n,t        t              rt	        t        d||        t        d      | j                  r(| j                  r| j                  j                          y y | j                  D ]  }| j                  |   j                          ! y )Nz/server %s to be removed not in Server Pool <%s>zserver not in server pool)
r=   remover   r   r   r   rc   rd   r0   rb   )r!   r   ry   s      r"   r{   zServerPool.remove"  s    T\\!LL'5!ELfVZ[%&ABB;;  ((*   #.. 7
  ,4467r$   c                     | j                   r6| j                  st        |       | _        | j                  | j                  |<   y t        |       | j                  |<   y r   )rc   rd   r*   rb   r!   ry   s     r"   
initializezServerPool.initialize2  sJ    ;;###24#8 +/+;+;DZ(+:4+@DZ(r$   c                     || j                   v r| j                   |   j                         S t        t              rt	        t        d||        t        d      Nz-connection <%s> not in Server Pool State <%s>z!connection not in ServerPoolState)rb   rH   r   r   r   r   r}   s     r"   rH   zServerPool.get_server;  sN    )))##J/::<<5!EJJX\]%&IJJr$   c                     || j                   v r| j                   |   j                         S t        t              rt	        t        d||        t        d      r   )rb   rB   r   r   r   r   r}   s     r"   rB   zServerPool.get_current_serverC  sN    )))##J/BBDD5!EJJX\]%&IJJr$   )r%   r&   r'   r   r#   r;   ro   r\   ru   rw   re   r{   r~   rH   rB   r(   r$   r"   r^   r^      sK    *"><
 !"'7:7 AKKr$   r^   N)!__doc__r   r   osr   randomr   timer    r
   r   r   r   r   r   
exceptionsr   r   r   r   r   	utils.logr   r   r   r   r   r`   objectr   r*   r^   r(   r$   r"   <module>r      se   2 '    ] ] c c  ? ?[&1 #& #P'f P'fHK HKr$   