ó
    Ö›‘hA  ã                   ó~   • S r SSKJr  SSKJrJr   " S S\5      r " S S5      r " S S	5      r	 " S
 S5      r
S	S/rg)zg
An asynchronous mapping to U{DB-API
2.0<http://www.python.org/topics/database/DatabaseAPI-2.0.html>}.
é    )Úthreads)ÚlogÚreflectc                   ó   • \ rS rSrSrSrg)ÚConnectionLosté   zV
This exception means that a db connection has been lost.  Client code may
try again.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r	   ó    Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/enterprise/adbapi.pyr   r      s   † ôr   r   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
Ú
Connectioné   zù
A wrapper for a DB-API connection instance.

The wrapper passes almost everything to the wrapped connection and so has
the same API. However, the L{Connection} knows about its pool and also
handle reconnecting should when the real connection dies.
c                 ó>   • Xl         S U l        U R                  5         g ©N)Ú_poolÚ_connectionÚ	reconnect)ÚselfÚpools     r   Ú__init__ÚConnection.__init__   s   € ØŒ
ØˆÔØ�‰Õr   c                 ó   • g r   r	   ©r   s    r   ÚcloseÚConnection.close$   s   € ð 	r   c                 ó†  • U R                   R                  (       d  U R                  R                  5         g  U R                  R                  5         U R                  R	                  5       nUR                  U R                   R                  5        UR                  5         U R                  R                  5         g ! [         a    [        R                  " S S5         Of = fU R                   R                  U R                  5        U R                   R                  (       a  [        R                  " S5        [        5       e)NúRollback failedzConnection lost.)r   r   r   ÚrollbackÚcursorÚexecuteÚgood_sqlr    ÚcommitÚBaseExceptionr   ÚerrÚ
disconnectÚnoisyÚmsgr   )r   Úcurss     r   r$   ÚConnection.rollback.   sÞ   € Ø�z‰z×#×#Ø×Ñ×%Ñ%Ô'Øð	-Ø×Ñ×%Ñ%Ô'Ø×#Ñ#×*Ñ*Ó,ˆDØ�L‰L˜Ÿ™×,Ñ,Ô-Ø�J‰JŒLØ×Ñ×#Ñ#Ô%ØøÜó 	-Ü�GŠG�DÐ+Ö,ð	-úð 	�
‰
×Ñ˜d×.Ñ.Ô/à�:‰:××Ü�GŠGÐ&Ô'äÓÐs   ¸BB< Â<!C ÃC c                 ó¦   • U R                   b%  U R                  R                  U R                   5        U R                  R                  5       U l         g r   )r   r   r+   Úconnectr   s    r   r   ÚConnection.reconnectD   s;   € Ø×ÑÑ'Ø�J‰J×!Ñ! $×"2Ñ"2Ô3ØŸ:™:×-Ñ-Ó/ˆÕr   c                 ó.   • [        U R                  U5      $ r   )Úgetattrr   ©r   Únames     r   Ú__getattr__ÚConnection.__getattr__I   s   € Ü�t×'Ñ'¨Ó.Ð.r   )r   r   N)r
   r   r   r   r   r   r    r$   r   r7   r   r	   r   r   r   r      s    † ñòò
òò,0õ
/r   r   c                   ó:   • \ rS rSrSrSrS rS rS rS r	S r
S	rg)
ÚTransactionéM   a  
A lightweight wrapper for a DB-API 'cursor' object.

Relays attribute access to the DB cursor. That is, you can call
C{execute()}, C{fetchall()}, etc., and they will be called on the
underlying DB-API cursor object. Attributes will also be retrieved from
there.
Nc                 ó<   • Xl         X l        U R                  5         g r   )r   r   Úreopen)r   r   Ú
connections      r   r   ÚTransaction.__init__Y   s   € ØŒ
Ø%ÔØ�‰�r   c                 óJ   • U R                   nS U l         UR                  5         g r   )Ú_cursorr    )r   rA   s     r   r    ÚTransaction.close^   s   € Ø—,‘,ˆØˆŒØ�‰�r   c                 óÆ  • U R                   b  U R                  5          U R                  R                  5       U l         g ! [         a6    U R
                  R                  (       d  e [        R                  " S S5         Of = fU R
                  R                  (       a  [        R                  " S5        U R                  5         U R                  R                  5       U l         g )NzCursor creation failedzConnection lost, reconnecting)rA   r    r   r%   r)   r   r   r   r*   r,   r-   r   s    r   r=   ÚTransaction.reopenc   s�   € Ø�<‰<Ñ#Ø�J‰JŒLð	8Ø×+Ñ+×2Ñ2Ó4ˆDŒLØøÜó 	8Ø—:‘:×'×'Øä—’˜Ð6Ö7ð		8úð �:‰:××Ü�GŠGÐ3Ô4à�‰ÔØ×'Ñ'×.Ñ.Ó0ˆ�s   Ÿ? ¿=A?Á>A?c                 óF   • U R                   R                  5         S U l        g r   )r   r   rA   r   s    r   r   ÚTransaction.reconnectv   s   € Ø×Ñ×"Ñ"Ô$Øˆ�r   c                 ó.   • [        U R                  U5      $ r   )r4   rA   r5   s     r   r7   ÚTransaction.__getattr__z   s   € Ü�t—|‘| TÓ*Ð*r   )r   rA   r   )r
   r   r   r   r   rA   r   r    r=   r   r7   r   r	   r   r   r:   r:   M   s'   † ñð €Gòò
ò
1ò&õ+r   r:   c                   óÐ   • \ rS rSrSrSR                  5       rSrSrSr	Sr
SrSrSrSr\r\rSrS	 rS
 rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%Sr&g)ÚConnectionPoolé~   aV  
Represent a pool of connections to a DB-API 2.0 compliant database.

@ivar connectionFactory: factory for connections, default to L{Connection}.
@type connectionFactory: any callable.

@ivar transactionFactory: factory for transactions, default to
    L{Transaction}.
@type transactionFactory: any callable

@ivar shutdownID: L{None} or a handle on the shutdown event trigger which
    will be used to stop the connection pool workers when the reactor
    stops.

@ivar _reactor: The reactor which will be used to schedule startup and
    shutdown events.
@type _reactor: L{IReactorCore} provider
z-min max name noisy openfun reconnect good_sqlFé   é   Nzselect 1c                 ó@  • Xl         [        R                  " U5      U l        [	        U R                  SS5      S:w  a  [
        R                  " S5        [	        U R                  SS5      S:  a  [
        R                  " S5        UR                  S	S5      nUc  SS
KJ	n  X@l
        X l        X0l        U R                   H  nSU 3nXc;   d  M  [        XX6   5        X6	 M!     [        U R                  U R                   5      U l        [!        U R                  U R                   5      U l        0 U l        SSKJnJn  UR*                  U l        UR/                  U R                  U R                   5      U l        U R                  R1                  U R2                  5      U l        g)a  
Create a new L{ConnectionPool}.

Any positional or keyword arguments other than those documented here
are passed to the DB-API object when connecting. Use these arguments to
pass database names, usernames, passwords, etc.

@param dbapiName: an import string to use to obtain a DB-API compatible
    module (e.g. C{'pyPgSQL.PgSQL'})

@keyword cp_min: the minimum number of connections in pool (default 3)

@keyword cp_max: the maximum number of connections in pool (default 5)

@keyword cp_noisy: generate informational log messages during operation
    (default C{False})

@keyword cp_openfun: a callback invoked after every C{connect()} on the
    underlying DB-API object. The callback is passed a new DB-API
    connection object. This callback can setup per-connection state
    such as charset, timezone, etc.

@keyword cp_reconnect: detect connections which have failed and reconnect
    (default C{False}). Failed connections may result in
    L{ConnectionLost} exceptions, which indicate the query may need to
    be re-sent.

@keyword cp_good_sql: an sql query which should always succeed and change
    no state (default C{'select 1'})

@keyword cp_reactor: use this reactor instead of the global reactor
    (added in Twisted 10.2).
@type cp_reactor: L{IReactorCore} provider
ÚapilevelNz2.0z'DB API module not DB API 2.0 compliant.Úthreadsafetyr   é   z+DB API module not sufficiently thread-safe.Ú
cp_reactor)ÚreactorÚcp_)Ú
threadableÚ
threadpool)Ú	dbapiNamer   ÚnamedModuleÚdbapir4   r   r-   ÚpopÚtwisted.internetrS   Ú_reactorÚconnargsÚconnkwÚCP_ARGSÚsetattrÚminÚmaxÚconnectionsÚtwisted.pythonrU   rV   ÚgetThreadIDÚthreadIDÚ
ThreadPoolÚcallWhenRunningÚ_startÚstartID)	r   rW   r]   r^   rS   ÚargÚcpArgrU   rV   s	            r   r   ÚConnectionPool.__init__¤   s6  € ðF #ŒÜ×(Ò(¨Ó3ˆŒ
ä�4—:‘:˜z¨4Ó0°EÓ9Ü�GŠGÐ=Ô>ä�4—:‘:˜~¨qÓ1°AÓ5Ü�GŠGÐAÔBà—*‘*˜\¨4Ó0ˆØ‰?Ý0ØŒà ŒØŒà—<”<ˆCØ˜#˜�KˆEØ�Ü˜ 6¡=Ô1Ø’Mñ	  ô �t—x‘x §¡Ó*ˆŒÜ�t—x‘x §¡Ó*ˆŒð ˆÔ÷ 	:à"×.Ñ.ˆŒØ$×/Ñ/°·±¸$¿(¹(ÓCˆŒØ—}‘}×4Ñ4°T·[±[ÓAˆ�r   c                 ó0   • S U l         U R                  5       $ r   )rj   Ústartr   s    r   ri   ÚConnectionPool._startë   s   € ØˆŒØ�z‰z‹|Ðr   c                 óÂ   • U R                   (       dN  U R                  R                  5         U R                  R	                  SSU R
                  5      U l        SU l         gg)zp
Start the connection pool.

If you are using the reactor normally, this function does *not*
need to be called.
ÚduringÚshutdownTN)ÚrunningrV   ro   r\   ÚaddSystemEventTriggerÚ
finalCloseÚ
shutdownIDr   s    r   ro   ÚConnectionPool.startï   sJ   € ð �|�|Ø�O‰O×!Ñ!Ô#Ø"Ÿm™m×AÑAØ˜* d§o¡oóˆDŒOð  ˆD�Lð r   c                 óx   • [         R                  " U R                  U R                  U R                  U/UQ70 UD6$ )a}  
Execute a function with a database connection and return the result.

@param func: A callable object of one argument which will be executed
    in a thread with a connection from the pool. It will be passed as
    its first argument a L{Connection} instance (whose interface is
    mostly identical to that of a connection object for your DB-API
    module of choice), and its results will be returned as a
    L{Deferred}. If the method raises an exception the transaction will
    be rolled back. Otherwise, the transaction will be committed.
    B{Note} that this function is B{not} run in the main thread: it
    must be threadsafe.

@param args: positional arguments to be passed to func

@param kw: keyword arguments to be passed to func

@return: a L{Deferred} which will fire the return value of
    C{func(Transaction(...), *args, **kw)}, or a
    L{twisted.python.failure.Failure}.
)r   ÚdeferToThreadPoolr\   rV   Ú_runWithConnection)r   ÚfuncÚargsÚkws       r   ÚrunWithConnectionÚ ConnectionPool.runWithConnectioný   s>   € ô, ×(Ò(Ø�M‰M˜4Ÿ?™?¨D×,CÑ,CÀTð
ØLPò
ØTVñ
ð 	
r   c                 óð   • U R                  U 5      n U" U/UQ70 UD6nUR                  5         U$ ! [         a:     UR                  5         e ! [         a    [        R
                  " S S5         e f = ff = f©Nr#   )ÚconnectionFactoryr(   r)   r$   r   r*   )r   r|   r}   r~   ÚconnÚresults         r   r{   Ú!ConnectionPool._runWithConnection  s~   € Ø×%Ñ% dÓ+ˆð		Ù˜$Ð, Ò,¨Ñ,ˆFØ�K‰KŒMØˆMøÜó 	ð1Ø—‘”ð øô !ó 1Ü—’˜Ð/Õ0Øð1úð	ús,   “1 ±
A5¼AÁA5Á!A1Á.A5Á0A1Á1A5c                 óx   • [         R                  " U R                  U R                  U R                  U/UQ70 UD6$ )a(  
Interact with the database and return the result.

The 'interaction' is a callable object which will be executed in a
thread using a pooled connection. It will be passed an L{Transaction}
object as an argument (whose interface is identical to that of the
database cursor for your DB-API module of choice), and its results will
be returned as a L{Deferred}. If running the method raises an
exception, the transaction will be rolled back. If the method returns a
value, the transaction will be committed.

NOTE that the function you pass is *not* run in the main thread: you
may have to worry about thread-safety in the function you pass to this
if it tries to use non-local objects.

@param interaction: a callable object whose first argument is an
    L{adbapi.Transaction}.

@param args: additional positional arguments to be passed to
    interaction

@param kw: keyword arguments to be passed to interaction

@return: a Deferred which will fire the return value of
    C{interaction(Transaction(...), *args, **kw)}, or a
    L{twisted.python.failure.Failure}.
)r   rz   r\   rV   Ú_runInteraction)r   Úinteractionr}   r~   s       r   ÚrunInteractionÚConnectionPool.runInteraction$  sE   € ô8 ×(Ò(Ø�M‰MØ�O‰OØ× Ñ Øð	
ð
 ò
ð ñ
ð 	
r   c                 óB   • U R                   " U R                  /UQ70 UD6$ )añ  
Execute an SQL query and return the result.

A DB-API cursor which will be invoked with C{cursor.execute(*args,
**kw)}. The exact nature of the arguments will depend on the specific
flavor of DB-API being used, but the first argument in C{*args} be an
SQL statement. The result of a subsequent C{cursor.fetchall()} will be
fired to the L{Deferred} which is returned. If either the 'execute' or
'fetchall' methods raise an exception, the transaction will be rolled
back and a L{twisted.python.failure.Failure} returned.

The C{*args} and C{**kw} arguments will be passed to the DB-API
cursor's 'execute' method.

@return: a L{Deferred} which will fire the return value of a DB-API
    cursor's 'fetchall' method, or a L{twisted.python.failure.Failure}.
)rŠ   Ú	_runQuery©r   r}   r~   s      r   ÚrunQueryÚConnectionPool.runQueryI  s#   € ð$ ×"Ò" 4§>¡>Ð?°DÒ?¸BÑ?Ð?r   c                 óB   • U R                   " U R                  /UQ70 UD6$ )aÛ  
Execute an SQL query and return L{None}.

A DB-API cursor which will be invoked with C{cursor.execute(*args,
**kw)}. The exact nature of the arguments will depend on the specific
flavor of DB-API being used, but the first argument in C{*args} will be
an SQL statement. This method will not attempt to fetch any results
from the query and is thus suitable for C{INSERT}, C{DELETE}, and other
SQL statements which do not return values. If the 'execute' method
raises an exception, the transaction will be rolled back and a
L{Failure} returned.

The C{*args} and C{*kw} arguments will be passed to the DB-API cursor's
'execute' method.

@return: a L{Deferred} which will fire with L{None} or a
    L{twisted.python.failure.Failure}.
)rŠ   Ú_runOperationrŽ   s      r   ÚrunOperationÚConnectionPool.runOperation]  s%   € ð& ×"Ò" 4×#5Ñ#5ÐC¸ÒCÀÑCÐCr   c                 ó  • U R                   (       a,  U R                  R                  U R                   5        SU l         U R                  (       a,  U R                  R                  U R                  5        SU l        U R	                  5         g)z3
Close all pool connections and shutdown the pool.
N)rw   r\   ÚremoveSystemEventTriggerrj   rv   r   s    r   r    ÚConnectionPool.closer  sV   € ð �?�?Ø�M‰M×2Ñ2°4·?±?ÔCØ"ˆDŒOØ�<�<Ø�M‰M×2Ñ2°4·<±<Ô@ØˆDŒLØ�‰Õr   c                 óì   • SU l         U R                  R                  5         SU l        U R                  R                  5        H  nU R                  U5        M     U R                  R                  5         g)z5
This should only be called by the shutdown trigger.
NF)rw   rV   Ústoprt   rc   ÚvaluesÚ_closeÚclear©r   r„   s     r   rv   ÚConnectionPool.finalClose~  sY   € ð ˆŒØ�‰×ÑÔØˆŒØ×$Ñ$×+Ñ+Ö-ˆDØ�K‰K˜Öñ .à×Ñ×ÑÕ r   c                 ó‚  • U R                  5       nU R                  R                  U5      nUc�  U R                  (       a#  [        R
                  " SU R                   35        U R                  R                  " U R                  0 U R                  D6nU R                  b  U R                  U5        X R                  U'   U$ )a]  
Return a database connection when one becomes available.

This method blocks and should be run in a thread from the internal
threadpool. Don't call this method directly from non-threaded code.
Using this method outside the external threadpool may exceed the
maximum number of connections in the pool.

@return: a database connection from the pool.
zadbapi connecting: )rf   rc   Úgetr,   r   r-   rW   rY   r1   r]   r^   Úopenfun)r   Útidr„   s      r   r1   ÚConnectionPool.connect‰  s”   € ð �m‰m‹oˆØ×Ñ×#Ñ# CÓ(ˆØ‰<Ø�z�zÜ—’Ð-¨d¯n©nÐ-=Ð>Ô?Ø—:‘:×%Ò% t§}¡}ÐD¸¿¹ÑDˆDØ�|‰|Ñ'Ø—‘˜TÔ"Ø$(×Ñ˜SÑ!Øˆr   c                 ó¸   • U R                  5       nXR                  R                  U5      La  [        S5      eUb  U R	                  U5        U R                  U	 gg)zô
Disconnect a database connection associated with this pool.

Note: This function should only be used by the same thread which called
L{ConnectionPool.connect}. As with C{connect}, this function is not
used in normal non-threaded Twisted code.
zwrong connection for threadN)rf   rc   r    Ú	Exceptionr›   )r   r„   r¢   s      r   r+   ÚConnectionPool.disconnect   sW   € ð �m‰m‹oˆØ×'Ñ'×+Ñ+¨CÓ0Ò0ÜÐ9Ó:Ð:ØÑØ�K‰K˜ÔØ× Ñ  Ñ%ð r   c                 óÜ   • U R                   (       a#  [        R                  " SU R                   35         UR	                  5         g ! [
         a    [        R                  " S S5         g f = f)Nzadbapi closing: zConnection close failed)r,   r   r-   rW   r    r)   r*   r�   s     r   r›   ÚConnectionPool._close¯  sN   € Ø�:�:Ü�GŠGÐ& t§~¡~Ð&6Ð7Ô8ð	5Ø�J‰J�LøÜó 	5Ü�GŠG�DÐ3Ö4ð	5ús   ¶A Á!A+Á*A+c                 ó2  • U R                  U 5      nU R                  X5      n U" U/UQ70 UD6nUR                  5         UR                  5         U$ ! [         a:     UR                  5         e ! [         a    [        R                  " S S5         e f = ff = fr‚   )rƒ   ÚtransactionFactoryr    r(   r)   r$   r   r*   )r   r‰   r}   r~   r„   Útransr…   s          r   rˆ   ÚConnectionPool._runInteraction·  s—   € Ø×%Ñ% dÓ+ˆØ×'Ñ'¨Ó3ˆð
	Ù  Ð4¨Ò4°Ñ4ˆFØ�K‰KŒMØ�K‰KŒMØˆMøÜó 	ð1Ø—‘”ð øô !ó 1Ü—’˜Ð/Õ0Øð1úð	ús/   ¤-A Á
BÁA.Á-BÁ.!BÂBÂBÂBc                 óF   • UR                   " U0 UD6  UR                  5       $ r   )r&   Úfetchall©r   r«   r}   r~   s       r   r�   ÚConnectionPool._runQueryÆ  s    € Ø�Š�tÐ"˜rÒ"Ø�~‰~ÓÐr   c                 ó(   • UR                   " U0 UD6  g r   )r&   r¯   s       r   r’   ÚConnectionPool._runOperationÊ  s   € Ø�Š�tÐ"˜rÓ"r   c           	      ó¸   • U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S.$ )N©rW   ra   rb   r,   r   r'   r]   r^   r´   r   s    r   Ú__getstate__ÚConnectionPool.__getstate__Í  sD   € àŸ™Ø—8‘8Ø—8‘8Ø—Z‘ZØŸ™ØŸ™ØŸ™Ø—k‘kñ	
ð 		
r   c                 óx   • Xl         U R                  " U R                  /U R                  Q70 U R                  D6  g r   )Ú__dict__r   rW   r]   r^   )r   Ústates     r   Ú__setstate__ÚConnectionPool.__setstate__Ù  s)   € ØŒØ�Š�d—n‘nÐD t§}¡}ÒD¸¿¹ÓDr   )r¸   r\   r]   rc   r^   rY   rW   rb   ra   rt   rw   rj   rf   rV   )'r
   r   r   r   r   Úsplitr_   r,   ra   rb   r6   r¡   r   r'   rt   r   rƒ   r:   rª   rw   r   ri   ro   r   r{   rŠ   r�   r“   r    rv   r1   r+   r›   rˆ   r�   r’   rµ   rº   r   r	   r   r   rJ   rJ   ~   s³   † ñð& >×CÑCÓE€Gà€EØ
€CØ
€CØ€DØ€GØ€IØ€Hà€GØ"ÐØ$Ðð €JòEBòNò ò
ò4ò#
òJ@ò(Dò*
ò	!òò.&ò5òò ò#ò

õEr   rJ   N)r   r[   r   rd   r   r   r¥   r   r   r:   rJ   Ú__all__r	   r   r   Ú<module>r¾      sP   ðñ
õ %ß 'ô�Yô ÷4/ñ 4/÷n.+ñ .+÷b]Eñ ]Eð@ Ð*Ð
+�r   