
    i9                        d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZm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  ej<                  d      Z G d deee         Z y)z6
Psycopg null connection pool module (async version).
    )annotationsN)AnycastDictOptionalType)AsyncConnection)TransactionStatus   )ACTAsyncConnectionCBAsyncConnectFailedCB)PoolTimeoutTooManyRequests)ConnectionTimeout)AEvent)_BaseNullConnectionPool)AsyncConnectionPoolAddConnectionz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 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         >@g      @g     @g     r@   )connection_classkwargsmin_sizemax_sizeopen	configurecheckresetnametimeoutmax_waitingmax_lifetimemax_idlereconnect_timeoutreconnect_failednum_workersc               D    t         |   ||||||	||||
||||||       y )N)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)   	__class__s                     |/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg_pool/null_pool_async.pyr,   z AsyncNullConnectionPool.__init__   sG    * 	-#%/#! 	 	
    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     r0   waitzAsyncNullConnectionPool.waitB   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       r0   _get_ready_connectionz-AsyncNullConnectionPool._get_ready_connection_   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)r4   _closedrB   _poolpgconntransaction_statusr
   UNKNOWNrC   _RETURNS_BADr:   r>   )r-   rE   s     r0   _maybe_close_connectionz/AsyncNullConnectionPool._maybe_close_connectiont   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_sizer6   r7   r"   r4   	_min_size	_max_size)r-   r   r   s      r0   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    r0   r    zAsyncNullConnectionPool.check   s	     s   c                  K   d |_         | j                  4 d {    | j                  rA| j                  j                         }|j	                  |       d {   rna| j                  rA|j                          d {    | j                  r| j                  j	                          n| xj                  dz  c_        d d d       d {    y 7 7 y7 U7 # 1 d {  7  sw Y   y xY ww)Nr   )rJ   r4   rB   popleftsetr:   r5   r>   )r-   rE   poss      r0   _add_to_poolz$AsyncNullConnectionPool._add_to_pool   s      
 :: 	& 	&-- mm++-&& -- jjl"" (())--/ LLA%L%	& 	& 	&
 ' #	& 	& 	& 	&so   C.CC.;CCC,C?C A C C.CC.CCC.C+C" C+'C.) )"r.   r@   r   z	Type[ACT]r   zOptional[Dict[str, Any]]r   intr   Optional[int]r   zbool | Noner    Optional[AsyncConnectionCB[ACT]]r    r_   r!   r_   r"   zOptional[str]r#   floatr$   r]   r%   r`   r&   r`   r'   r`   r(   zOptional[AsyncConnectFailedCB]r)   r]   )r   )r#   r`   returnNone)r#   zOptional[float]ra   zOptional[ACT])rE   r   ra   bool)N)r   r]   r   r^   ra   rb   )ra   rb   )rE   r   ra   rb   )__name__
__module____qualname__r   r   r   r	   r,   r;   rG   rO   rT   r    r[   __classcell__)r/   s   @r0   r   r      s    &
 '+49o&F+/"& 6:2626"'##+;?'&
&
 $	&

 )&
 &
  &
 &
 4&
 0&
 0&
 &
 &
 &
 &
  !&
" !#&
$ 9%&
& '&
P::*&&r1   r   )!__doc__
__future__r   loggingtypingr   r   r   r   r   psycopgr	   
psycopg.pqr
   abcr   r   r   errorsr   r   _compatr   _acompatr   base_null_poolr   
pool_asyncr   r   	getLoggerr6   r   rV   r1   r0   <module>ru      s\    #  2 2 # ( = = 0 &  3 :			>	*V&57J37O V&r1   