§
    üxIfÜ-  ã                   óJ   — d dl Z d dlZd dlZd dlmZ dZ G d„ de¦  «        ZdS )é    N)ÚSTATUSé@   c                   óÒ   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zej        d„ ¦   «         ZdS )ÚConnectionPoolai  
    Class defining a pool of database connections

    MariaDB Connector/Python supports simple connection pooling.
    A connection pool holds a number of open connections and handles
    thread safety when providing connections to threads.

    The size of a connection pool is configurable at creation time,
    but cannot be changed afterwards. The maximum size of a connection
    pool is limited to 64 connections.

    Keyword Arguments:

        * pool_name (str) -- Name of connection pool

        * pool_size (int)=5 -- Size of pool. If not specified default value
          of 5 will be used. Maximum allowed number is 64.

        * pool_reset_connection (bool)=True -- Will reset the connection before
          returning it to the pool.  Default value is True.

        * pool_validation_interval (int)=500 -- Specifies the validation
          interval in milliseconds after which the status of a connection
          requested from the pool is checked.
          The default values is 500 milliseconds, a value of 0 means that
          the status will always be checked.
          (Added in version 1.1.6)
    c           	      óT  — g | _         g | _        i | _        i | _        t	          j        ¦   «         | _        d| _        g d¢}|r6d|v r2|d         t          j	        v rt          j
        d|d         z  ¦  «        ‚nt          j
        d¦  «        ‚|                     d¦  «        | j        d<   t          |                     dd¦  «        ¦  «        | j        d	<   t          |                     d
d¦  «        ¦  «        | j        d<   t          |                     dd¦  «        ¦  «        | j        d<   d| j        d	         cxk     rt          k    sn t          j
        dt          z  ¦  «        ‚|                     ¦   «         | _        |D ]}|| j        v r| j        |= Œt!          | j        ¦  «        dk    râ| j        5  t#          d| j        d	         ¦  «        D ]¦}	 t          j        di | j        ¤Ž}nw# t          j        $ re t#          dt!          | j         ¦  «        ¦  «        D ]@}	 | j         |                              ¦   «          n# t          j        $ r Y nw xY w| j         |= ŒA‚ w xY w|                      |¦  «         Œ§	 ddd¦  «         n# 1 swxY w Y   | t          j	        | j        d         <   dS )aŸ  
        Creates a connection pool class

        :param str pool_name:
            Name of connection pool

        :param int pool_size:
            Size of pool. If not specified default value of 5 will be used.
            Maximum allowed number is 64.

        :param bool pool_reset_connection:
            Will reset the connection before returning it to the pool.
            Default value is True.
        r   )Ú	pool_nameÚ	pool_sizeÚpool_reset_connectionÚpool_validation_intervalr   zPool '%s' already existszNo pool name specifiedÚnamer	   é   Úsizer
   TÚreset_connectionr   iô  Úvalidation_intervalz&Pool size must be in range of 1 and %sN© )Ú_connections_freeÚ_connections_usedÚ
_pool_argsÚ
_conn_argsÚ_threadÚRLockÚ
_lock_poolÚ_ConnectionPool__closedÚmariadbÚ_CONNECTION_POOLSÚProgrammingErrorÚgetÚintÚboolÚMAX_POOL_SIZEÚcopyÚlenÚrangeÚ
ConnectionÚErrorÚcloseÚadd_connection)ÚselfÚargsÚkwargsÚ	key_wordsÚkeyÚiÚ
connectionÚjs           úJ/var/www/piapp/venv/lib/python3.11/site-packages/mariadb/connectionpool.pyÚ__init__zConnectionPool.__init__;   sN  € ð "$ˆÔØ!#ˆÔØˆŒØˆŒÝ!œ-™/œ/ˆŒØˆŒð1ð 1ð 1ˆ	ð ð 	E�k VÐ+Ð+ð �kÔ"¥gÔ&?Ð?Ð?ÝÔ.Ð/IØ17¸Ô1Dñ0Eñ Fô Fð Fð @õ Ô*Ð+CÑDÔDÐDð #)§*¢*¨[Ñ"9Ô"9ˆŒ˜ÑÝ"% f§j¢j°¸aÑ&@Ô&@Ñ"AÔ"AˆŒ˜Ñå�—’Ð3°TÑ:Ô:Ñ;Ô;ð 	ŒÐ*Ñ+õ �—
’
Ð5°sÑ;Ô;Ñ<Ô<ð 	ŒÐ-Ñ.ð �D”O FÔ+Ð<Ð<Ò<Ð<­}Ò<Ð<Ð<Ð<ÝÔ*ð ,6Ý8Eñ,Fñ Gô Gð Gð !Ÿ+š+™-œ-ˆŒØð 	)ð 	)ˆCØ�d”oÐ%Ð%Ø”O CÐ(øåˆtŒÑÔ !Ò#Ð#Ø”ð 4ð 4å˜q $¤/°&Ô"9Ñ:Ô:ð 4ð 4�AðÝ%,Ô%7Ð%JÐ%J¸$¼/Ð%JÐ%J˜
˜
øÝ"œ=ð ð ð õ "' q­#¨dÔ.DÑ*EÔ*EÑ!FÔ!Fð :ð :˜Að%Ø $Ô 6°qÔ 9× ?Ò ?Ñ AÔ AÐ AÐ AøÝ#*¤=ð %ð %ð %ð !% ð	%øøøð
 !%Ô 6°qÐ 9Ð 9Øðøøøð ×'Ò'¨
Ñ3Ô3Ð3Ð3ð!4ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð* >B�Ô! $¤/°&Ô"9Ñ:Ð:Ð:sN   Æ3JÇG)Ç(JÇ)3IÈH=È<IÈ=IÉIÉIÉIÉJÊJÊ
Jc                 ó  — |rr|| j         v r#| j                              |¦  «        }| j         |= n+|| j        v r"| j                             |¦  «        }| j        |= d|_        |                     ¦   «          |                      ¦   «         S )zI
        Removes the given connection and adds a new connection.
        N)r   Úindexr   Ú_Connection__poolr&   r'   ©r(   r.   Úxs      r0   Ú_replace_connectionz"ConnectionPool._replace_connection‰   s™   € ð
 ð 		Ø˜TÔ3Ð3Ð3ØÔ*×0Ò0°Ñ<Ô<�ØÔ*¨1Ð-Ð-Ø˜tÔ5Ð5Ð5ØÔ*×0Ò0°Ñ<Ô<�ØÔ*¨1Ð-à+/ˆJÔ(Ø×ÒÑÔÐØ×"Ò"Ñ$Ô$Ð$ó    c                 ó    — | j         r dt          t          | ¦  «        ¦  «        ›d�S d| j        ›dt          t          | ¦  «        ¦  «        ›d�S )Nz:<mariadb.connectionPool.ConnectionPool object (closed) at ú>z4<mariadb.connectionPool.ConnectionPool object (name=z) at )r   ÚhexÚidr   ©r(   s    r0   Ú__repr__zConnectionPool.__repr__š   sZ   € ØŒMð 	>ð 	>å"¥2 d¡8¤8™}œ}˜}˜}ð/ð /ð	>ð
  $œ~˜~˜~­sµ2°d±8´8©}¬}¨}¨}ð>ð >r8   Nc                 óÄ  — | j         s"t          j        d| j        d         z  ¦  «        ‚|�3t	          |t          j        j        ¦  «        st          j        d¦  «        ‚|€:t          | j         ¦  «        dk    r"t          j        d| j        d         z  ¦  «        ‚t          | j	        | j
        z   ¦  «        }|| j        d         k    r&t          j        d| j        d         ›d	|›d
�¦  «        ‚| j        5  |€t          j        di | j         ¤Ž}| |_        t          j        ¦   «         |_        | j	                             |¦  «         |cddd¦  «         S # 1 swxY w Y   dS )u¿   
        Adds a connection object to the connection pool.

        In case that the pool doesnâ€™t have a free slot or is not configured
        a PoolError exception will be raised.
        z&Couldn't get configuration for pool %sr   Nz+Passed parameter is not a connection objectr   z#Can't get configuration for pool %sr   zCan't add connection to pool z: No free slot available (z).r   )r   r   Ú	PoolErrorr   Ú
isinstanceÚconnectionsr$   r   r"   r   r   r   r4   ÚtimeÚperf_counter_nsÚ_ConnectionPool__last_usedÚappend)r(   r.   Útotals      r0   r'   zConnectionPool.add_connection¢   sÔ  € ð Œð 	=ÝÔ#Ð$LØ$(¤O°FÔ$;ñ%<ñ =ô =ð =ð Ð"Ý˜z­7Ô+>Ô+IÑJÔJð #åÔ*ð ,?ñ @ô @ð @ð Ð¥# d¤oÑ"6Ô"6¸!Ò";Ð";ÝÔ#Ð$IØ$(¤O°FÔ$;ñ%<ñ =ô =ð =õ �DÔ*¨TÔ-CÑCÑDÔDˆØ�D”O FÔ+Ò+Ð+ÝÔ#Ð#à%)¤_°VÔ%<Ð%<Ð%<Ø%* U Uð%,ñ -ô -ð -ð
 Œ_ð 	ð 	ØÐ!Ý$Ô/ÐBÐB°$´/ÐBÐB�
à+/ˆJÔ(Ý%)Ô%9Ñ%;Ô%;ˆJÔ"ØÔ"×)Ò)¨*Ñ5Ô5Ð5Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Ã5AEÅEÅEc                 ón  — d}| j         5  t          dt          | j        ¦  «        ¦  «        D ]Ý}| j        |         }t	          j        ¦   «         |j        z
  dz  }|| j        d         k    rD	 |                     ¦   «          n.# t          j
        $ r |                      |¦  «        }|sY Œ|Y nw xY w|xj        dz  c_        | j                             |¦  «         | j                             |¦  «        }| j        |= |c cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   t          j        d¦  «        ‚)z‰
        Returns a connection from the connection pool or raises a PoolError
        exception if a connection is not available.
        Nr   i@B r   é   zNo connection available)r   r#   r"   r   rC   rD   rE   r   Úpingr   r%   r7   Ú_usedr   rF   r3   r@   )r(   Úconnr-   ÚdtÚidxs        r0   Úget_connectionzConnectionPool.get_connectionÇ   s±  € ð ˆàŒ_ð 	ð 	Ý˜1�c $Ô"8Ñ9Ô9Ñ:Ô:ð ð �ØÔ-¨aÔ0�ÝÔ*Ñ,Ô,¨tÔ/?Ñ?À7ÑJ�Ø˜œÐ(=Ô>Ò>Ð>ð%ØŸ	š	™œ˜˜øÝ"œ=ð %ð %ð %Ø#×7Ò7¸Ñ=Ô=˜Ø#ð %Ø$˜Hð%ð %ð%øøøð
 �
”
˜a‘�
”
ØÔ&×-Ò-¨dÑ3Ô3Ð3ØÔ,×2Ò2°4Ñ8Ô8�ØÔ*¨3Ð/Ø��ð!	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ$ ÔÐ 9Ñ:Ô:Ð:s7   ŠA!DÁ,BÂ DÂ&B,Â'DÂ+B,Â,ADÄDÄDc                 óð  — | j         5  	 | j        d         r|                     ¦   «          n(|j        t          j        z  r|                     ¦   «          n*# t          j        $ r |  	                    |¦  «         Y nw xY w|r]|| j
        v rT| j
                             |¦  «        }| j
        |= t          j        ¦   «         |_        | j                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z_
        Returns connection to the pool. Internally used
        by connection object.
        r   N)r   r   ÚresetÚserver_statusr   ÚIN_TRANSÚrollbackr   r%   r7   r   r3   rC   rD   rE   r   rF   r5   s      r0   Ú_close_connectionz ConnectionPool._close_connectionã   sW  € ð
 Œ_ð 	>ð 	>ð5Ø”?Ð#5Ô6ð *Ø×$Ò$Ñ&Ô&Ð&Ð&ØÔ-µ´Ñ?ð *Ø×'Ò'Ñ)Ô)Ð)øøÝ”=ð 5ð 5ð 5Ø×(Ò(¨Ñ4Ô4Ð4Ð4Ð4ð5øøøð ð >Ø Ô!7Ð7Ð7ØÔ.×4Ò4°ZÑ@Ô@�AØÔ.¨qÐ1Ý-1Ô-AÑ-CÔ-C�JÔ*ØÔ*×1Ò1°*Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð 	>ð 	>s6   ˆC+ŠA
AÁC+Á$A<Á9C+Á;A<Á<A"C+Ã+C/Ã2C/c                 ó   — || _         dS )u  
        Sets the connection configuration for the connection pool.
        For valid connection arguments check the mariadb.connect() method.

        Note: This method doesn't create connections in the pool.
        To fill the pool one has to use add_connection() á¸¿ethod.
        N)r   )r(   r*   s     r0   Ú
set_configzConnectionPool.set_configù   s   € ð !ˆŒˆˆr8   c                 ó  — 	 | j         | j        z   D ]}d|_        |                     ¦   «          Œ	 d| _         d| _        t          j        | j        d         = dS # d| _         d| _        t          j        | j        d         = w xY w)z+Closes connection pool and all connections.Nr   )r   r   r4   r&   r   r   r   )r(   Úcs     r0   r&   zConnectionPool.close  s™   € ð	CØÔ,¨tÔ/EÑEð ð �Ø&*�Ô#Ø—’‘	”	�	�	ðð &*ˆDÔ"Ø%)ˆDÔ"ÝÔ)¨$¬/¸&Ô*AÐBÐBÐBøð &*ˆDÔ"Ø%)ˆDÔ"ÝÔ)¨$¬/¸&Ô*AÐBÐBÐBÐBÐBs   ‚-A Á(B c                 ó   — | j         d         S )z(Returns the name of the connection pool.r   ©r   r=   s    r0   r   zConnectionPool.pool_name  ó   € ð Œ˜vÔ&Ð&r8   c                 ó   — | j         d         S )z(Returns the size of the connection pool.r   r[   r=   s    r0   r	   zConnectionPool.pool_size  r\   r8   c                 ó   — t           S )z.Returns the maximum size for connection pools.)r    r=   s    r0   Úmax_sizezConnectionPool.max_size  s
   € õ Ðr8   c                 ó^   — 	 t          | j        | j        z   ¦  «        S # t          $ r Y dS w xY w)z5Returns the number of connections in connection pool.r   )r"   r   r   Ú	Exceptionr=   s    r0   Úconnection_countzConnectionPool.connection_count!  sB   € ð	Ý�tÔ-°Ô0FÑFÑGÔGÐGøÝð 	ð 	ð 	Ø�1�1ð	øøøs   ‚ ž
,«,c                 ó   — | j         d         S )z†
        If set to true, the connection will be reset on both client and server
        side after .close() method was called
        r   r[   r=   s    r0   r
   z$ConnectionPool.pool_reset_connection*  s   € ð ŒÐ1Ô2Ð2r8   c                 ó   — || j         d<   d S )Nr   r[   )r(   rQ   s     r0   r
   z$ConnectionPool.pool_reset_connection2  s   € à.3ˆŒÐ*Ñ+Ð+Ð+r8   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r7   r>   r'   rO   rU   rW   r&   Úpropertyr   r	   r_   rb   r
   Úsetterr   r8   r0   r   r      sL  € € € € € ðð ð:LBð LBð LBð\%ð %ð %ð">ð >ð >ð#ð #ð #ð #ðJ;ð ;ð ;ð8>ð >ð >ð,	!ð 	!ð 	!ð	Cð 	Cð 	Cð ð'ð 'ñ „Xð'ð
 ð'ð 'ñ „Xð'ð
 ðð ñ „Xðð
 ðð ñ „Xðð ð3ð 3ñ „Xð3ð Ô!ð4ð 4ñ "Ô!ð4ð 4ð 4r8   r   )r   r   rC   Úmariadb.constantsr   r    Úobjectr   r   r8   r0   ú<module>rm      sw   ðð( €€€Ø €€€Ø €€€à $Ð $Ð $Ð $Ð $Ð $à€ðW4ð W4ð W4ð W4ð W4�Vñ W4ô W4ð W4ð W4ð W4r8   