
    3fi                        d Z ddlmZ ddl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 dd	l
mZ dd
lmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ  ej8                  d      Z G d deee         Zy)z6
Psycopg null connection pool module (async version).
    )annotationsN)cast)AsyncConnection)TransactionStatus   )ACTAsyncConnectFailedCBAsyncConnectionCBAsyncConninfoParam)AsyncKwargsParam)PoolTimeoutTooManyRequests)ConnectionTimeout)AEvent)AddConnectionAsyncConnectionPool)_BaseNullConnectionPoolzpsycopg.poolc                       e Zd Z	 d eee   e      ddddddddddddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fd
ZdddZddZ	ddZ
dddZddZddZ xZS )AsyncNullConnectionPoolNr   F      >@g      @g     @g     r@   )connection_classkwargsmin_sizemax_sizeopen	configurecheckresetnameclose_returnstimeoutmax_waitingmax_lifetimemax_idlereconnect_timeoutreconnect_failednum_workersc               F    t         |   ||||||	||||
d||||||       y )NF)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r(   )super__init__)selfconninfor   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   	__class__s                      Z/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/psycopg_pool/null_pool_async.pyr+   z AsyncNullConnectionPool.__init__   sJ    , 	-#%/## 	 	
    c                  K   | j                          | j                  4 d{    | j                  rJ t               | _        ddd      d{    t        j                  d| j                         | j                  t        |              | j                  j                  |       d{   s'| j                          d{    t        d| d      | j                  4 d{    | j                  sJ d| _        ddd      d{    t        j                  d| j                         y7 7 # 1 d{  7  sw Y   xY w7 7 7 h7 E# 1 d{  7  sw Y   UxY ww)a9  
        Create a connection for test.

        Calling this function will verify that the connectivity with the
        database works as expected. However the connection will not be stored
        in the pool.

        Close the pool, and raise `PoolTimeout`, if not ready within *timeout*
        sec.
        Nz"waiting for pool %r initializationz%pool initialization incomplete after z seczpool %r is ready to use)_check_open_getconn_lock_pool_full_eventr   loggerinfor    run_taskr   wait_timeoutcloser   )r,   r"   s     r/   waitzAsyncNullConnectionPool.waitF   s5     	  ":: 	- 	-,,,,$*HD!	- 	- 	8$))DmD)***77@@@**, EgYdSTT:: 	) 	)(((($(D!	) 	) 	-tyy9	- 	- 	- 	- 	- A	) 	) 	) 	) 	)s   !E+D4E+D9E+D7AE+-E.E+E#E+)E*E+-EE+E&E+7E+9E?E EE+E+E+E+E(EE($E+c                <  K   ||dk  r
t               d }| j                  dk(  s| j                  | j                  k  r2	 | j                  |       d {   }| xj                  dz  c_        |S | j                  rvt        | j                        | j                  k\  rT| j                  | j                  xx   dz  cc<   t        d| j                  ddt        | j                         dz         |S 7 # t        $ r}t        t        |            d d }~ww xY ww)	Ng        r   )r"   r   z	the pool z has already z requests waiting)r   r   _nconns_connectr   strr#   len_waiting_stats_REQUESTS_ERRORSr   r    )r,   r"   connexs       r/   _get_ready_connectionz-AsyncNullConnectionPool._get_ready_connectionc   s	    7c>-==A!=5!]]7];; LLAL  #dmm"48H8H"HKK--.!3.!DII=5c$--()):;<   <$ 5!#b'*45s;   <DC6 C4C6 BD4C6 6	D?DDDc                  K   | j                   4 d {    | j                  s| j                  r	 d d d       d {    yd |_        |j                  j
                  t        j                  k(  r!| j                  | j                  xx   dz  cc<   | j                  |       d {    | xj                  dz  c_        	 d d d       d {    y7 7 7 /7 # 1 d {  7  sw Y   y xY ww)NFr   T)r3   _closedrA   _poolpgconntransaction_statusr   UNKNOWNrB   _RETURNS_BAD_close_connectionr=   r,   rD   s     r/   _maybe_close_connectionz/AsyncNullConnectionPool._maybe_close_connectionx   s      :: 		 		<<DMM		 		 		 DJ{{--1B1J1JJD--.!3.((...LLAL		 		 		 		 /		 		 		 		sr   C.CC.CC.CC.A#C%C&C C.CC.C.CC.C+C" C+'C.c                  K   | j                  ||      \  }}t        j                  d| j                  ||       | j                  4 d{    || _        || _        ddd      d{    y7 #7 # 1 d{  7  sw Y   yxY ww)zwChange the size of the pool during runtime.

        Only *max_size* can be changed; *min_size* must remain 0.
        z&resizing %r to min_size=%s max_size=%sN)_check_sizer5   r6   r    r3   	_min_size	_max_size)r,   r   r   s      r/   resizezAsyncNullConnectionPool.resize   s~     
 "--hA(4dii8	
 :: 	& 	&%DN%DN	& 	& 	& 	& 	& 	& 	&sH   AB
A.BA2B(A0)B0B2B8A;9B Bc                   K   yw)z9No-op, as the pool doesn't have connections in its state.N )r,   s    r/   r   zAsyncNullConnectionPool.check   s	     s   c                  K   d |_         | j                  4 d {    | j                  r?| j                  j                         j	                  |       d {   rnb| j                  r?| j                  |       d {    | j                  r| j                  j	                          n| xj                  dz  c_        d d d       d {    y 7 7 z7 U7 # 1 d {  7  sw Y   y xY ww)Nr   )rI   r3   rA   popleftsetrN   r4   r=   rO   s     r/   _add_to_poolz$AsyncNullConnectionPool._add_to_pool   s      
 :: 	& 	&-- ..044T:::	 -- ,,T222 (())--/ LLA%L!	& 	& 	& ; 3	& 	& 	& 	&so   C-CC-9CCC*C>C?A C?C-
CC-CCC-C*C!C*&C-) )$r-   r   r   z	type[ACT]r   zAsyncKwargsParam | Noner   intr   
int | Noner   zbool | Noner   AsyncConnectionCB[ACT] | Noner   r_   r   r_   r    z
str | Noner!   boolr"   floatr#   r]   r$   ra   r%   ra   r&   ra   r'   zAsyncConnectFailedCB | Noner(   r]   )r   )r"   ra   returnNone)r"   zfloat | Nonerb   z
ACT | None)rD   r   rb   r`   )N)r   r]   r   r^   rb   rc   )rb   rc   )rD   r   rb   rc   )__name__
__module____qualname__r   typer   r   r+   r:   rF   rP   rU   r   r[   __classcell__)r.   s   @r/   r   r      s#    (*(
 '+49o&F*.# 37/3/3#'##+8<)(
$(
 $	(

 ((
 (
 (
 (
 1(
 -(
 -(
 (
 (
 (
 (
  !(
" #(
$ !%(
& 6'(
( )(
T::*&&r0   r   )__doc__
__future__r   loggingtypingr   psycopgr   
psycopg.pqr   abcr   r	   r
   r   r   errorsr   r   _compatr   _acompatr   
pool_asyncr   r   base_null_poolr   	getLoggerr5   r   rW   r0   r/   <module>rv      s\    #   # ( Q Q ! 0 &  : 3			>	*W&57J37O W&r0   