ó
    ×›‘hße  ã                   óN  • S r SSKrSSKrSSKJrJr  SSKJrJrJ	r	J
r
  SSKJrJrJr  SSKJr  SSKJr  SSKJr  S	r " S
 S5      r " S S5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS r\" \S\ " 5       5        \" \S\ " 5       5         " S S 5      r! " S! S"\RD                  5      r# " S# S$\RD                  5      r$ " S% S&5      r% " S' S(\	5      r& " S) S*5      r' " S+ S,\RD                  5      r(g)-z&
Tests for twisted.enterprise.adbapi.
é    N)ÚDictÚOptional)Ú
ConnectionÚConnectionLostÚConnectionPoolÚTransaction)ÚdeferÚ
interfacesÚreactor)ÚFailure©ÚrequireModule)Úunittestz%
CREATE TABLE simple (
  x integer
)
c                   óì   • \ rS rSr% Sr0 r\\\4   \	S'   \
R                  " \S5      c  SrS rS rS rSS	 j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)ÚADBAPITestBaseé   z$
Test the asynchronous DB-API code.
Úopenfun_calledNú5ADB-API requires threads, no way to test without themc                 ó”   • U R                  5         U R                  U R                  S9U l        U R                  R	                  5         g)zB
Set up the database and create a connection pool pointing at it.
)Ú
cp_openfunN)ÚstartDBÚmakePoolÚopenfunÚdbpoolÚstart©Úselfs    Ú\C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_adbapi.pyÚ
extraSetUpÚADBAPITestBase.extraSetUp(   s3   € ð 	�‰ŒØ—m‘m¨t¯|©|�mÐ<ˆŒØ�‰×ÑÕó    c                 ó’   ^ • T R                   R                  S5      nUR                  U 4S j5        UR                  U 4S j5        U$ )NúDROP TABLE simplec                 ó8   >• TR                   R                  5       $ ©N©r   Úclose©Úresr   s    €r   Ú<lambda>Ú)ADBAPITestBase.tearDown.<locals>.<lambda>2   ó   ø€  $§+¡+×"3Ñ"3Ô"5r!   c                 ó$   >• TR                  5       $ r%   ©ÚstopDBr(   s    €r   r*   r+   3   ó   ø€  $§+¡+¤-r!   ©r   ÚrunOperationÚaddCallback©r   Úds   ` r   ÚtearDownÚADBAPITestBase.tearDown0   ó7   ø€ Ø�K‰K×$Ñ$Ð%8Ó9ˆØ	�‰Ô5Ô6Ø	�‰Ô/Ô0Øˆr!   c                 ó"   • SU R                   U'   g )NT)r   ©r   Úconns     r   r   ÚADBAPITestBase.openfun6   s   € Ø$(ˆ×Ñ˜DÒ!r!   c                 ó€   • U(       d  U R                  U R                  5        g U R                  XR                  5        g r%   )Ú
assertTruer   ÚassertInr:   s     r   ÚcheckOpenfunCalledÚ!ADBAPITestBase.checkOpenfunCalled9   s)   € ÞØ�O‰O˜D×/Ñ/Õ0à�M‰M˜$× 3Ñ 3Õ4r!   c                 ó  ^ • T R                   R                  [        5      nT R                  (       a�  UR	                  T R
                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  U 4S j5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                  5        UR	                  T R                   5        U$ )Nc                 ó$   >• TR                  5       $ r%   )ÚflushLoggedErrorsr(   s    €r   r*   Ú*ADBAPITestBase.test_pool.<locals>.<lambda>F   s   ø€  d×&<Ñ&<Ô&>r!   )r   r2   Úsimple_table_schemaÚtest_failuresr3   Ú_testPool_1_1Ú_testPool_1_2Ú_testPool_1_3Ú_testPool_1_4Ú_testPool_2Ú_testPool_3Ú_testPool_4Ú_testPool_5Ú_testPool_6Ú_testPool_7Ú_testPool_8Ú_testPool_9r4   s   ` r   Ú	test_poolÚADBAPITestBase.test_pool?   s  ø€ Ø�K‰K×$Ñ$Ô%8Ó9ˆØ××Ø�M‰M˜$×,Ñ,Ô-Ø�M‰M˜$×,Ñ,Ô-Ø�M‰M˜$×,Ñ,Ô-Ø�M‰M˜$×,Ñ,Ô-Ø�M‰MÔ>Ô?Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Øˆr!   c                 óŒ   ^ • [         R                  " T R                  R                  S5      nUR	                  U 4S jS 5        U$ )Núselect * from NOTABLEc                 ó&   >• TR                  S5      $ ©Nzno exception©Úfailr(   s    €r   r*   Ú.ADBAPITestBase._testPool_1_1.<locals>.<lambda>S   ó   ø€  4§9¡9¨^Ô#<r!   c                 ó   • g r%   © ©Úfs    r   r*   r\   S   ó   € Èr!   ©r	   ÚmaybeDeferredr   ÚrunQueryÚaddCallbacks©r   r)   r5   s   `  r   rH   ÚADBAPITestBase._testPool_1_1Q   s4   ø€ Ü×Ò §¡× 4Ñ 4Ð6MÓNˆØ	�‰Ô<¹nÔMØˆr!   c                 óŒ   ^ • [         R                  " T R                  R                  S5      nUR	                  U 4S jS 5        U$ )Nzdeletexxx from NOTABLEc                 ó&   >• TR                  S5      $ rY   rZ   r(   s    €r   r*   Ú.ADBAPITestBase._testPool_1_2.<locals>.<lambda>X   r]   r!   c                 ó   • g r%   r_   r`   s    r   r*   rk   X   rb   r!   )r	   rd   r   r2   rf   rg   s   `  r   rI   ÚADBAPITestBase._testPool_1_2V   s4   ø€ Ü×Ò §¡× 8Ñ 8Ð:RÓSˆØ	�‰Ô<¹nÔMØˆr!   c                 ó    ^ • [         R                  " T R                  R                  T R                  5      nUR                  U 4S jS 5        U$ )Nc                 ó&   >• TR                  S5      $ rY   rZ   r(   s    €r   r*   Ú.ADBAPITestBase._testPool_1_3.<locals>.<lambda>]   r]   r!   c                 ó   • g r%   r_   r`   s    r   r*   rp   ]   rb   r!   )r	   rd   r   ÚrunInteractionÚbad_interactionrf   rg   s   `  r   rJ   ÚADBAPITestBase._testPool_1_3[   s9   ø€ Ü×Ò §¡× :Ñ :¸D×<PÑ<PÓQˆØ	�‰Ô<¹nÔMØˆr!   c                 ó    ^ • [         R                  " T R                  R                  T R                  5      nUR                  U 4S jS 5        U$ )Nc                 ó&   >• TR                  S5      $ rY   rZ   r(   s    €r   r*   Ú.ADBAPITestBase._testPool_1_4.<locals>.<lambda>b   r]   r!   c                 ó   • g r%   r_   r`   s    r   r*   rw   b   rb   r!   )r	   rd   r   ÚrunWithConnectionÚbad_withConnectionrf   rg   s   `  r   rK   ÚADBAPITestBase._testPool_1_4`   s9   ø€ Ü×Ò §¡× =Ñ =¸t×?VÑ?VÓWˆØ	�‰Ô<¹nÔMØˆr!   c                 óp   ^ • SnT R                   R                  U5      nU 4S jnUR                  U5        U$ )Núselect count(1) from simplec                 ón   >• TR                  [        U S   S   5      S:H  S5        TR                  5         g )Nr   zInteraction not rolled back)r>   Úintr@   ©Úrowr   s    €r   Ú_checkÚ*ADBAPITestBase._testPool_2.<locals>._checkj   s/   ø€ Ø�O‰OœC  A¡ q¡	›N¨aÑ/Ð1NÔOØ×#Ñ#Õ%r!   ©r   re   r3   ©r   r)   Úsqlr5   r‚   s   `    r   rL   ÚADBAPITestBase._testPool_2e   s4   ø€ à+ˆØ�K‰K× Ñ  Ó%ˆõ	&ð 	
�‰�fÔØˆr!   c                 ó.  ^ • Sn/ n[        T R                  5       H2  nSU-  nUR                  T R                  R	                  U5      5        M4     [
        R                  " U5      nU 4S jnUR                  U5        U 4S jnUR                  U5        U$ )Nr}   z insert into simple(x) values(%d)c                 óB   >• SnTR                   R                  U5      nU$ )Núselect x from simple order by x)r   re   )r)   r†   r5   r   s      €r   Ú_selectÚ+ADBAPITestBase._testPool_3.<locals>._selectz   s!   ø€ à3ˆCØ—‘×$Ñ$ SÓ)ˆAØˆHr!   c                 ó  >• TR                  [        U 5      TR                  :H  S5        [        TR                  5       H=  nTR                  [        X   5      S:H  S5        TR                  X   S   U:H  S5        M?     g )NzWrong number of rowsé   úWrong size rowr   zValues not returned.)r>   ÚlenÚnum_iterationsÚrange)ÚrowsÚir   s     €r   r‚   Ú*ADBAPITestBase._testPool_3.<locals>._check‚   si   ø€ Ø�O‰OœC ›I¨×)<Ñ)<Ñ<Ð>TÔUÜ˜4×.Ñ.Ö/�Ø—‘¤ D¡G£°Ñ 1Ð3CÔDØ—‘ ¡¨¡
¨a¡Ð1GÖHò 0r!   )r’   r‘   Úappendr   r2   r	   ÚgatherResultsr3   )r   r)   r†   Úinsertsr”   r5   r‹   r‚   s   `       r   rM   ÚADBAPITestBase._testPool_3q   s…   ø€ Ø+ˆØˆä�t×*Ñ*Ö+ˆAØ4°qÑ8ˆCØ�N‰N˜4Ÿ;™;×3Ñ3°CÓ8Ö9ñ ,ô ×Ò Ó(ˆõ	ð 	
�‰�gÔõ	Ið 	
�‰�fÔàˆr!   c                 ó|   ^ • T R                   R                  T R                  5      nUR                  U 4S j5        U$ )Nc                 ó(   >• TR                  U S5      $ ©NÚdone©ÚassertEqualr(   s    €r   r*   Ú,ADBAPITestBase._testPool_4.<locals>.<lambda>�   ó   ø€  $×"2Ñ"2°3¸Ô"?r!   )r   rr   Úinteractionr3   rg   s   `  r   rN   ÚADBAPITestBase._testPool_4Œ   s/   ø€ à�K‰K×&Ñ& t×'7Ñ'7Ó8ˆØ	�‰Ô?Ô@Øˆr!   c                 ó|   ^ • T R                   R                  T R                  5      nUR                  U 4S j5        U$ )Nc                 ó(   >• TR                  U S5      $ rœ   rž   r(   s    €r   r*   Ú,ADBAPITestBase._testPool_5.<locals>.<lambda>•   r¡   r!   )r   ry   ÚwithConnectionr3   rg   s   `  r   rO   ÚADBAPITestBase._testPool_5’   s/   ø€ à�K‰K×)Ñ)¨$×*=Ñ*=Ó>ˆØ	�‰Ô?Ô@Øˆr!   c                 óP   • U R                   R                  U R                  5      nU$ r%   )r   ry   Úclose_withConnectionrg   s      r   rP   ÚADBAPITestBase._testPool_6˜   s!   € à�K‰K×)Ñ)¨$×*CÑ*CÓDˆØˆr!   c                 óú   ^ • / n[        T R                  5       H2  nSU-  nUR                  T R                  R	                  U5      5        M4     [
        R                  " USS9nU 4S jnUR                  U5        U$ )Nz!select x from simple where x = %dT©ÚfireOnOneErrbackc                 ó~   >• [        TR                  5       H#  nTR                  X   S   S   S   U:H  S5        M%     g )NrŽ   r   zValue not returned)r’   r‘   r>   )Úresultr”   r   s     €r   r‚   Ú*ADBAPITestBase._testPool_7.<locals>._check¥   s;   ø€ Ü˜4×.Ñ.Ö/�Ø—‘ ¡	¨!¡¨Q¡°Ñ 2°aÑ 7Ð9MÖNò 0r!   )r’   r‘   r–   r   re   r	   ÚDeferredListr3   )r   r)   Údsr”   r†   Údlistr‚   s   `      r   rQ   ÚADBAPITestBase._testPool_7�   sq   ø€ àˆÜ�t×*Ñ*Ö+ˆAØ5¸Ñ9ˆCØ�I‰I�d—k‘k×*Ñ*¨3Ó/Ö0ñ ,ô ×"Ò" 2¸Ñ=ˆõ	Oð 	×Ñ˜&Ô!Øˆr!   c                 óÊ   • / n[        U R                  5       H2  nSU-  nUR                  U R                  R	                  U5      5        M4     [
        R                  " USS9nU$ )Nzdelete from simple where x = %dTr­   )r’   r‘   r–   r   r2   r	   r²   )r   r)   r³   r”   r†   r´   s         r   rR   ÚADBAPITestBase._testPool_8¬   sZ   € àˆÜ�t×*Ñ*Ö+ˆAØ3°aÑ7ˆCØ�I‰I�d—k‘k×.Ñ.¨sÓ3Ö4ñ ,ô ×"Ò" 2¸Ñ=ˆØˆr!   c                 óp   ^ • SnT R                   R                  U5      nU 4S jnUR                  U5        U$ )Nr}   c                 ón   >• TR                  [        U S   S   5      S:H  S5        TR                  5         g )Nr   z)Didn't successfully delete table contents)r>   r   ÚcheckConnectr€   s    €r   r‚   Ú*ADBAPITestBase._testPool_9.<locals>._checkº   s4   ø€ Ø�O‰OÜ�C˜‘F˜1‘I“ !Ñ#Ð%Pôð ×ÑÕr!   r„   r…   s   `    r   rS   ÚADBAPITestBase._testPool_9µ   s4   ø€ à+ˆØ�K‰K× Ñ  Ó%ˆõ	 ð 	
�‰�fÔØˆr!   c                 ól  • U R                   R                  5       nU R                  U5        UR                  5       nUR	                  S5        UR	                  S5        UR                  5       nU R                  [        U5      S5        U R                  [        US   5      S5        U R                  US   S   S5        UR	                  S5        UR	                  S5        U R                  [        UR                  5       5      S5        UR                  5         U R                   R                  U5        g)z/Check the connect/disconnect synchronous calls.zinsert into simple(x) values(1)zselect x from simplerŽ   r   zdelete from simpleN)
r   Úconnectr@   ÚcursorÚexecuteÚfetchallrŸ   r�   r'   Ú
disconnect)r   r;   Úcursr)   s       r   rº   ÚADBAPITestBase.checkConnectÃ   sæ   € à�{‰{×"Ñ"Ó$ˆØ×Ñ Ô%Ø�{‰{‹}ˆØ�‰Ð6Ô7Ø�‰Ð+Ô,Ø�m‰m‹oˆØ×Ñœ˜S› 1Ô%Ø×Ñœ˜S ™V› aÔ(Ø×Ñ˜˜Q™ ™ AÔ&Ø�‰Ð)Ô*Ø�‰Ð+Ô,Ø×Ñœ˜TŸ]™]›_Ó-¨qÔ1Ø�
‰
ŒØ�‰×Ñ˜tÕ$r!   c                 ó*  • UR                  S5        [        U R                  5       HI  nUR                  5       nU R	                  [        U5      S:H  S5        U R	                  US   U:H  S5        MK     U R                  UR                  5       S5        g)NrŠ   rŽ   r�   r   úValue not returned.zToo many rowsr�   )rÀ   r’   r‘   Úfetchoner>   r�   ÚassertIsNone)r   Útransactionr”   r�   s       r   r¢   ÚADBAPITestBase.interactionÔ   s€   € Ø×ÑÐ=Ô>Ü�t×*Ñ*Ö+ˆAØ×&Ñ&Ó(ˆCØ�O‰OœC ›H¨™MÐ+;Ô<Ø�O‰O˜C ™F a™KÐ)>Ö?ñ ,ð 	×Ñ˜+×.Ñ.Ó0°/ÔBØr!   c                 ój   • U R                   (       a  UR                  S5        UR                  S5        g )Nzinsert into simple(x) values(0)rW   )Úcan_rollbackrÀ   )r   rÉ   s     r   rs   ÚADBAPITestBase.bad_interactionÝ   s)   € Ø××Ø×ÑÐ AÔBà×ÑÐ3Õ4r!   c                 óV  • UR                  5       n UR                  S5        [        U R                  5       HI  nUR	                  5       nU R                  [        U5      S:H  S5        U R                  US   U:H  S5        MK     UR                  5         g! UR                  5         f = f)NrŠ   rŽ   r�   r   rÆ   r�   )r¿   rÀ   r’   r‘   rÇ   r>   r�   r'   )r   r;   rÃ   r”   r�   s        r   r§   ÚADBAPITestBase.withConnectionã   sˆ   € Ø�{‰{‹}ˆð	Ø�L‰LÐ:Ô;Ü˜4×.Ñ.Ö/�Ø—m‘m“o�Ø—‘¤ C£¨A¡Ð/?Ô@Ø—‘  A¡¨!¡Ð-BÖCñ 0ð
 �J‰JŒLØøð �J‰J�Lús   ’A3B ÂB(c                 ó$   • UR                  5         g r%   )r'   r:   s     r   rª   Ú#ADBAPITestBase.close_withConnectionï   s   € Ø�
‰
�r!   c                 ó’   • UR                  5       n UR                  S5        UR                  5         g ! UR                  5         f = f)NrW   )r¿   rÀ   r'   )r   r;   rÃ   s      r   rz   Ú!ADBAPITestBase.bad_withConnectionò   s2   € Ø�{‰{‹}ˆð	Ø�L‰LÐ0Ô1à�J‰J�LøˆD�J‰J�Lús	   ’4 ´A©r   r%   )&Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   ÚobjectÚboolÚ__annotations__r
   ÚIReactorThreadsr   Úskipr   r6   r   r@   rT   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rº   r¢   rs   r§   rª   rz   Ú__static_attributes__r_   r!   r   r   r      s§   ‡ ñð *,€N�D˜ ˜Ñ&Ó+à×!Ò! '¨4Ó0Ñ8ØFˆòòò)ô5òò$ò
ò
ò
ò

òò6òòò
òòò%ò"ò5ò
òõr!   r   c                   ót   • \ rS rSrSr\R                  " \S5      c  SrS r	S r
S rS rS	 rS
 rS rS rSrg)ÚReconnectTestBaseéú   z3
Test the asynchronous DB-API code with reconnect.
Nr   c                 ó  • U R                   c  [        R                  " S5      eU R                  5         U R	                  SSU R                   S9U l        U R
                  R                  5         U R
                  R                  [        5      $ )z™
Skip the test if C{good_sql} is unavailable.  Otherwise, set up the
database, create a connection pool pointed at it, and set up a simple
schema in it.
zno good sql for reconnect testrŽ   T)Úcp_maxÚcp_reconnectÚcp_good_sql)	Úgood_sqlr   ÚSkipTestr   r   r   r   r2   rF   r   s    r   r   ÚReconnectTestBase.extraSetUp  sq   € ð �=‰=Ñ Ü×#Ò#Ð$DÓEÐEØ�‰ŒØ—m‘mØ 4°T·]±]ð $ð 
ˆŒð 	�‰×ÑÔØ�{‰{×'Ñ'Ô(;Ó<Ð<r!   c                 ó’   ^ • T R                   R                  S5      nUR                  U 4S j5        UR                  U 4S j5        U$ )Nr#   c                 ó8   >• TR                   R                  5       $ r%   r&   r(   s    €r   r*   Ú,ReconnectTestBase.tearDown.<locals>.<lambda>  r,   r!   c                 ó$   >• TR                  5       $ r%   r.   r(   s    €r   r*   rì     r0   r!   r1   r4   s   ` r   r6   ÚReconnectTestBase.tearDown  r8   r!   c                 ób  • [         R                  " S 5      nUR                  U R                  5        UR                  U R                  5        U R
                  (       d  UR                  U R                  5        UR                  U R                  5        UR                  U R                  5        U$ r%   )	r	   Úsucceedr3   Ú_testPool_1rL   Úearly_reconnectrM   rN   rO   r4   s     r   rT   ÚReconnectTestBase.test_pool  sx   € Ü�MŠM˜$ÓˆØ	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø×#×#Ø�M‰M˜$×*Ñ*Ô+Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Øˆr!   c                 óp   ^ • SnT R                   R                  U5      nU 4S jnUR                  U5        U$ )Nr}   c                 óN   >• TR                  [        U S   S   5      S:H  S5        g ©Nr   zTable not empty©r>   r   r€   s    €r   r‚   Ú-ReconnectTestBase._testPool_1.<locals>._check%  ó#   ø€ Ø�O‰OœC  A¡ q¡	›N¨aÑ/Ð1BÕCr!   r„   r…   s   `    r   rñ   ÚReconnectTestBase._testPool_1!  ó5   ø€ Ø+ˆØ�K‰K× Ñ  Ó%ˆõ	Dð 	
�‰�fÔØˆr!   c                 ó€   • [        U R                  R                  R                  5       5      S   R	                  5         g )Nr   )Úlistr   ÚconnectionsÚvaluesr'   )r   r)   s     r   rL   ÚReconnectTestBase._testPool_2+  s+   € äˆT�[‰[×$Ñ$×+Ñ+Ó-Ó.¨qÑ1×7Ñ7Õ9r!   c                 ó�   ^ • Sn[         R                  " T R                  R                  U5      nUR	                  U 4S jS 5        U$ )Nr}   c                 ó&   >• TR                  S5      $ rY   rZ   r(   s    €r   r*   Ú/ReconnectTestBase._testPool_3.<locals>.<lambda>2  r]   r!   c                 ó   • g r%   r_   r`   s    r   r*   r  2  rb   r!   rc   ©r   r)   r†   r5   s   `   r   rM   ÚReconnectTestBase._testPool_3/  s8   ø€ Ø+ˆÜ×Ò §¡× 4Ñ 4°cÓ:ˆØ	�‰Ô<¹nÔMØˆr!   c                 óp   ^ • SnT R                   R                  U5      nU 4S jnUR                  U5        U$ )Nr}   c                 óN   >• TR                  [        U S   S   5      S:H  S5        g rö   r÷   r€   s    €r   r‚   Ú-ReconnectTestBase._testPool_4.<locals>._check9  rù   r!   r„   r…   s   `    r   rN   ÚReconnectTestBase._testPool_45  rû   r!   c                 ó¶   ^ • T R                  5         Sn[        R                  " T R                  R                  U5      nUR                  U 4S jU 4S j5        U$ )NrW   c                 ó&   >• TR                  S5      $ rY   rZ   r(   s    €r   r*   Ú/ReconnectTestBase._testPool_5.<locals>.<lambda>D  s   ø€ ˜Ÿ	™	 .Ô1r!   c                 óL   >• TR                  U R                  [        5      5      $ r%   )ÚassertFalseÚcheckr   )ra   r   s    €r   r*   r  E  s   ø€ �d×&Ñ& q§w¡w¬~Ó'>Ô?r!   )rD   r	   rd   r   re   rf   r  s   `   r   rO   ÚReconnectTestBase._testPool_5?  sI   ø€ Ø×ÑÔ Ø%ˆÜ×Ò §¡× 4Ñ 4°cÓ:ˆØ	�‰Ü1Ü?ô	
ð ˆr!   rÔ   )rÕ   rÖ   r×   rØ   rÙ   r
   rÝ   r   rÞ   r   r6   rT   rñ   rL   rM   rN   rO   rß   r_   r!   r   rá   rá   ú   sI   † ñð ×!Ò! '¨4Ó0Ñ8ØFˆò=òòòò:òòõr!   rá   c                   óª   • \ rS rSr% SrSr\\   \S'   Sr	Sr
SrSrSrSrSrSrSr\R&                  r\\   \S'   SrSrSrS	 rS
 rS rS rS rS rSrg)ÚDBTestConnectoriJ  a&  
A class which knows how to test for the presence of
and establish a connection to a relational database.

To enable test cases  which use a central, system database,
you must create a database named DB_NAME with a user DB_USER
and password DB_PASS with full access rights to database DB_NAME.
NÚTEST_PREFIXÚtwisted_testTrç   é2   c                 óü   • U R                  5       U l        [        R                  " U R                  5        U R	                  5       (       d#  [
        R                  " SU R                  -  5      eU R                  5       $ )Nz%s: Cannot access db)	ÚmktempÚDB_DIRÚosÚmkdirÚcan_connectr   rè   r  r   r   s    r   ÚsetUpÚDBTestConnector.setUpi  sX   € Ø—k‘k“mˆŒÜ
�Š�—‘ÔØ×Ñ×!Ñ!Ü×#Ò#Ð$:¸T×=MÑ=MÑ$MÓNÐNØ�‰Ó Ð r!   c                 ó   • [        5       e)zPReturn true if this database is present on the system
and can be used in a test.©ÚNotImplementedErrorr   s    r   r  ÚDBTestConnector.can_connectp  s   € ô "Ó#Ð#r!   c                 ó   • g)z+Take any steps needed to bring database up.Nr_   r   s    r   r   ÚDBTestConnector.startDBu  ó   € àr!   c                 ó   • g)zBring database down, if needed.Nr_   r   s    r   r/   ÚDBTestConnector.stopDBy  r%  r!   c                 ó~   • U R                  5       u  p#UR                  5       nUR                  U5        [        U0 UD6$ )z;Create a connection pool with additional keyword arguments.)ÚgetPoolArgsÚcopyÚupdater   )r   ÚnewkwÚargsÚkws       r   r   ÚDBTestConnector.makePool}  s9   € à×#Ñ#Ó%‰ˆØ�W‰W‹YˆØ
�	‰	�%ÔÜ˜tÐ* rÑ*Ð*r!   c                 ó   • [        5       e)z‰Return a tuple (args, kw) of list and keyword arguments
that need to be passed to ConnectionPool to create a connection
to this database.r   r   s    r   r)  ÚDBTestConnector.getPoolArgs„  s   € ô "Ó#Ð#r!   )r  )rÕ   rÖ   r×   rØ   rÙ   r  r   ÚstrrÜ   ÚDB_NAMEÚDB_USERÚDB_PASSr  Únulls_okÚtrailing_spaces_okrÌ   rG   Úescape_slashesr   rç   rò   Ú	can_clearr‘   r  r  r   r/   r   r)  rß   r_   r!   r   r  r  J  sˆ   ‡ ñð "&€K�˜#‘Ó%à€GØ€GØ€Gà€Fà€HØÐØ€LØ€MØ€NØ,×5Ñ5€Hˆh�s‰mÓ5Ø€OØ€Ið €Nò!ò$ò
òò+õ$r!   r  c                   ó6   • \ rS rSrSrSrSrSrS rS r	S r
S	rg
)ÚSQLite3Connectori‹  z:
Connector that uses the stdlib SQLite3 database support.
ÚSQLite3FrŽ   c                 ó   • [        S5      c  gg)NÚsqlite3FTr   r   s    r   r  ÚSQLite3Connector.can_connect”  s   € Ü˜Ó#Ñ+Øàr!   c                 ó  • [         R                  R                  U R                  U R                  5      U l        [         R                  R                  U R
                  5      (       a!  [         R                  " U R
                  5        g g r%   ©r  ÚpathÚjoinr  r3  ÚdatabaseÚexistsÚunlinkr   s    r   r   ÚSQLite3Connector.startDBš  óL   € ÜŸ™Ÿ™ T§[¡[°$·,±,Ó?ˆŒÜ�7‰7�>‰>˜$Ÿ-™-×(Ñ(Ü�IŠI�d—m‘mÕ$ð )r!   c                 ó,   • SnU R                   SSS.nX4$ )N)r>  rŽ   F©rD  rä   Úcheck_same_thread©rD  ©r   r-  r.  s      r   r)  ÚSQLite3Connector.getPoolArgsŸ  s   € ØˆØŸ-™-°1È5ÑQˆØˆxˆr!   rL  N©rÕ   rÖ   r×   rØ   rÙ   r  r8  r‘   r  r   r)  rß   r_   r!   r   r;  r;  ‹  s'   † ñð €KØ€NØ€Nòò%õ
r!   r;  c                   ó6   • \ rS rSrSrSrSrSrS rS r	S r
S	rg
)ÚPySQLite2Connectori¥  z9
Connector that uses pysqlite's SQLite database support.
Ú	pysqlite2FrŽ   c                 ó   • [        S5      c  gg)Núpysqlite2.dbapi2FTr   r   s    r   r  ÚPySQLite2Connector.can_connect®  s   € ÜÐ+Ó,Ñ4Øàr!   c                 ó  • [         R                  R                  U R                  U R                  5      U l        [         R                  R                  U R
                  5      (       a!  [         R                  " U R
                  5        g g r%   rA  r   s    r   r   ÚPySQLite2Connector.startDB´  rH  r!   c                 ó,   • SnU R                   SSS.nX4$ )N)rT  rŽ   FrJ  rL  rM  s      r   r)  ÚPySQLite2Connector.getPoolArgs¹  s   € Ø$ˆØŸ-™-°1È5ÑQˆØˆxˆr!   rL  NrO  r_   r!   r   rQ  rQ  ¥  s'   † ñð €KØ€NØ€Nòò%õ
r!   rQ  c                   ó$   • \ rS rSrSrS rS rSrg)ÚPyPgSQLConnectori¿  ÚPyPgSQLc                 óÒ   •  SSK Jn   UR                  U R                  U R
                  U R                  S9nUR                  5         g! [         a     gf = f! [         a     gf = f)Nr   )ÚPgSQLF©rD  ÚuserÚpasswordT)ÚpyPgSQLr^  ÚBaseExceptionr¾   r3  r4  r5  r'   )r   r^  r;   s      r   r  ÚPyPgSQLConnector.can_connectÂ  sj   € ð	Ý%ð	Ø—=‘=ØŸ™¨D¯L©LÀ4Ç<Á<ð !ð ˆDð �J‰JŒLØøô ó 	Ùð	ûô ó 	Ùð	ús"   ‚A	 ‰?A Á	
AÁAÁ
A&Á%A&c                 óV   • SnU R                   U R                  U R                  SS.nX4$ )N)zpyPgSQL.PgSQLr   ©rD  r`  ra  Úcp_min©r3  r4  r5  rM  s      r   r)  ÚPyPgSQLConnector.getPoolArgsÐ  s/   € Ø!ˆàŸ™Ø—L‘LØŸ™Øñ	
ˆð ˆxˆr!   r_   N©rÕ   rÖ   r×   rØ   r  r  r)  rß   r_   r!   r   r[  r[  ¿  ó   † Ø€Kòõr!   r[  c                   ó$   • \ rS rSrSrS rS rSrg)ÚPsycopgConnectoriÛ  ÚPsycopgc                 óÎ   •  SS K n UR                  U R                  U R                  U R
                  S9nUR                  5         g! [         a     gf = f! [         a     gf = f)Nr   Fr_  T)Úpsycopgrc  r¾   r3  r4  r5  r'   )r   rp  r;   s      r   r  ÚPsycopgConnector.can_connectÞ  sj   € ð	Ûð	Ø—?‘?ØŸ™¨D¯L©LÀ4Ç<Á<ð #ð ˆDð �J‰JŒLØøô ó 	Ùð	ûô ó 	Ùð	úó"   ‚A ‡?A Á
AÁAÁ
A$Á#A$c                 óV   • SnU R                   U R                  U R                  SS.nX4$ )N)rp  r   rf  rh  rM  s      r   r)  ÚPsycopgConnector.getPoolArgsì  s/   € ØˆàŸ™Ø—L‘LØŸ™Øñ	
ˆð ˆxˆr!   r_   Nrj  r_   r!   r   rm  rm  Û  rk  r!   rm  c                   ó0   • \ rS rSrSrSrSrSrS rS r	Sr
g)ÚMySQLConnectori÷  ÚMySQLFc                 óÎ   •  SS K n UR                  U R                  U R                  U R
                  S9nUR                  5         g! [         a     gf = f! [         a     gf = f)Nr   F©Údbr`  ÚpasswdT)ÚMySQLdbrc  r¾   r3  r4  r5  r'   )r   r|  r;   s      r   r  ÚMySQLConnector.can_connectþ  sj   € ð	Ûð	Ø—?‘?Ø—<‘< d§l¡l¸4¿<¹<ð #ð ˆDð �J‰JŒLØøô ó 	Ùð	ûô ó 	Ùð	úrr  c                 óT   • SnU R                   U R                  U R                  S.nX4$ )N)r|  ry  rh  rM  s      r   r)  ÚMySQLConnector.getPoolArgs  s&   € ØˆØ—L‘L¨$¯,©,À$Ç,Á,ÑOˆØˆxˆr!   r_   N)rÕ   rÖ   r×   rØ   r  r7  rÌ   rò   r  r)  rß   r_   r!   r   rv  rv  ÷  s!   † Ø€KàÐØ€LØ€Oòõr!   rv  c                   óD   • \ 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)ÚFirebirdConnectori  ÚFirebirdFNé   c                 ó€   • [        S5      c  g U R                  5         U R                  5         g! [         a     gf = f)NÚkinterbasdbFT)r   r   r/   rc  r   s    r   r  ÚFirebirdConnector.can_connect  s<   € Ü˜Ó'Ñ/Øð	Ø�L‰LŒNØ�K‰KŒMØøÜó 	Ùð	ús   � 0 °
=¼=c                 ó¸  • SS K n[        R                  R                  U R                  [
        R                  5      U l        [        R                  " U R                  [        R                  [        R                  -   [        R                  -   5        SnX R                  U R                  U R                  4-  nUR                  U5      nUR                  5         g )Nr   z,create database "%s" user "%s" password "%s")r…  r  rB  rC  r  r  r3  ÚchmodÚstatÚS_IRWXUÚS_IRWXGÚS_IRWXOr4  r5  Úcreate_databaser'   )r   r…  r†   r;   s       r   r   ÚFirebirdConnector.startDB&  s†   € Ûä—w‘w—|‘| D§K¡K´×1HÑ1HÓIˆŒÜ
�Š�—‘œdŸl™l¬T¯\©\Ñ9¼D¿L¹LÑHÔIØ<ˆØ—‘˜dŸl™l¨D¯L©LÐ9Ñ9ˆØ×*Ñ*¨3Ó/ˆØ�
‰
�r!   c                 óV   • SnU R                   SU R                  U R                  S.nX4$ )N)r…  ú	127.0.0.1©rD  Úhostr`  ra  rh  rM  s      r   r)  ÚFirebirdConnector.getPoolArgs0  s/   € ØˆàŸ™ØØ—L‘LØŸ™ñ	
ˆð ˆxˆr!   c                 óŒ   • SS K nUR                  U R                  SU R                  U R                  S9nUR                  5         g )Nr   r�  r‘  )r…  r¾   r3  r4  r5  Údrop_database)r   r…  r;   s      r   r/   ÚFirebirdConnector.stopDB:  s@   € Ûà×"Ñ"Ø—\‘\ØØ—‘Ø—\‘\ð	 #ð 
ˆð 	×ÑÕr!   )r3  )rÕ   rÖ   r×   rØ   r  rG   r8  rç   r9  r‘   r  r   r)  r/   rß   r_   r!   r   r�  r�    s4   † Ø€Kà€MØ€NØ€HØ€Ià€Nòòòõ	r!   r�  c                 óx  ^• [         [        [        [        [        [
        /n0 nU H€  mTR                  U-   n " U4S jSTU [        R                  5      nXVl	        [        TS5      (       a5  SR                  TR                  R                  5       SS U/-   5      Ul        XdU'   M‚     UR                  U5        g)a9  
Make a test case for every db connector which can connect.

@param base: Base class for test case. Additional base classes
             will be a DBConnector subclass and unittest.TestCase
@param suffix: A suffix used to create test case names. Prefixes
               are defined in the DBConnector subclasses.
c                   ó0   >• \ rS rSr Y R                  rSrg)ÚmakeSQLTests.<locals>.testcasei[  r_   N)rÕ   rÖ   r×   rØ   rß   )Ú	connclasss   €r   Útestcaser™  [  s   ø† Ù"×-Ñ-‹Jr!   r›  r×   Ú.r   éÿÿÿÿN)rQ  r;  r[  rm  rv  r�  r  r   ÚTestCaserÕ   ÚhasattrrC  r×   Úsplitr+  )ÚbaseÚsuffixÚglobalsÚ
connectorsÚtestsÚnamer›  rš  s          @r   ÚmakeSQLTestsr§  F  s²   ø€ ô 	ÜÜÜÜÜð€Jð €EÛˆ	Ø×$Ñ$ vÑ-ˆ÷	.�y $¬×(9Ñ(9ô 	.ð !ÔÜ�9˜n×-Ñ-Ø$'§H¡HØ×&Ñ&×,Ñ,Ó.¨q°Ð4¸°vÑ=ó%ˆHÔ!ð ˆd‹ñ  ð ‡N�N�5Õr!   ÚADBAPITestsÚReconnectTestsc                   ó2   • \ rS rSrSrSrSrS rS rS r	Sr
g)	ÚFakePooliq  z«
A fake L{ConnectionPool} for tests.

@ivar connectionFactory: factory for making connections returned by the
    C{connect} method.
@type connectionFactory: any callable
Tc                 ó   • Xl         g r%   ©ÚconnectionFactory)r   r®  s     r   Ú__init__ÚFakePool.__init__}  s   € Ø!2Õr!   c                 ó"   • U R                  5       $ )z2
Return an instance of C{self.connectionFactory}.
r­  r   s    r   r¾   ÚFakePool.connect€  s   € ð ×%Ñ%Ó'Ð'r!   c                 ó   • g)z
Do nothing.
Nr_   )r   Ú
connections     r   rÂ   ÚFakePool.disconnect†  s   � r!   r­  N)rÕ   rÖ   r×   rØ   rÙ   Ú	reconnectÚnoisyr¯  r¾   rÂ   rß   r_   r!   r   r«  r«  q  s"   † ñð €IØ€Eò3ò(õr!   r«  c                   ó   • \ rS rSrSrS rSrg)ÚConnectionTestsiŒ  z$
Tests for the L{Connection} class.
c                 ó<  •  " S S5      n[        U5      n[        U5      nU R                  [        UR                  5        U R                  [        5      nU R                  [        U5      S5        U R                  US   R                  R                  S   S5        g)zd
If an error happens during rollback, L{ConnectionLost} is raised but
the original error is logged.
c                   ó   • \ rS rSrS rSrg)ÚIConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaisei—  c                 ó   • [        S5      e©Núproblem!©ÚRuntimeErrorr   s    r   ÚrollbackÚRConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaise.rollback˜  ó   € Ü" :Ó.Ð.r!   r_   N)rÕ   rÖ   r×   rØ   rÂ  rß   r_   r!   r   ÚConnectionRollbackRaiser¼  —  ó   † õ/r!   rÅ  rŽ   r   r¿  N)r«  r   ÚassertRaisesr   rÂ  rD   rÁ  rŸ   r�   Úvaluer-  )r   rÅ  Úpoolr´  Úerrorss        r   Útest_rollbackErrorLoggedÚ(ConnectionTests.test_rollbackErrorLogged‘  s€   € ÷	/ñ 	/ô Ð/Ó0ˆÜ Ó%ˆ
Ø×Ñœ.¨*×*=Ñ*=Ô>Ø×'Ñ'¬Ó5ˆØ×Ñœ˜V› aÔ(Ø×Ñ˜ ™Ÿ™×-Ñ-¨aÑ0°*Õ=r!   r_   N)rÕ   rÖ   r×   rØ   rÙ   rË  rß   r_   r!   r   r¹  r¹  Œ  s   † ñõ>r!   r¹  c                   ó   • \ rS rSrSrS rSrg)ÚTransactionTestsi£  z%
Tests for the L{Transaction} class.
c                 ó&  •  " S S5      n[        S5      n[        X!" 5       5      nUR                  5         U R                  [        5      nU R                  [        U5      S5        U R                  US   R                  R                  S   S5        g)zl
If the cursor creation raises an error in L{Transaction.reopen}, it
reconnects but log the error occurred.
c                   ó$   • \ rS rSrSrS rS rSrg)ÚNTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaisei®  r   c                 ó   • g r%   r_   r   s    r   r¶  ÚXTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.reconnect±  ó   € Ør!   c                 ód   • U R                   S:X  a   U =R                   S-  sl         [        S5      eg )Nr   rŽ   r¿  )ÚcountrÁ  r   s    r   r¿   ÚUTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.cursor´  s*   € Ø—:‘: “?Ø—J’J !‘O•JÜ& zÓ2Ð2ð #r!   r_   N)rÕ   rÖ   r×   rØ   rÖ  r¶  r¿   rß   r_   r!   r   ÚConnectionCursorRaiserÑ  ®  s   † ØˆEòõ3r!   rØ  NrŽ   r   r¿  )	r«  r   ÚreopenrD   rÁ  rŸ   r�   rÈ  r-  )r   rØ  rÉ  rÉ   rÊ  s        r   Útest_reopenLogErrorIfReconnectÚ/TransactionTests.test_reopenLogErrorIfReconnect¨  sz   € ÷		3ñ 		3ô ˜‹~ˆÜ! $Ð(=Ó(?Ó@ˆØ×ÑÔØ×'Ñ'¬Ó5ˆØ×Ñœ˜V› aÔ(Ø×Ñ˜ ™Ÿ™×-Ñ-¨aÑ0°*Õ=r!   r_   N)rÕ   rÖ   r×   rØ   rÙ   rÚ  rß   r_   r!   r   rÎ  rÎ  £  s   † ñõ>r!   rÎ  c                   ó   • \ rS rSrS rSrg)ÚNonThreadPooliÁ  c                 ób   • Sn U" U0 UD6nU" XV5        g ! [          a    Sn[        5       n N!f = f)NTF)Ú	Exceptionr   )r   ÚonResultra   Úar.  Úsuccessr°   s          r   ÚcallInThreadWithCallbackÚ&NonThreadPool.callInThreadWithCallbackÂ  s@   € Øˆð	Ù˜�[˜R‘[ˆFñ 	�Õ!øô ó 	ØˆGÜ“YŠFð	ús   „ •.­.r_   N)rÕ   rÖ   r×   rØ   rã  rß   r_   r!   r   rÝ  rÝ  Á  s   † õ"r!   rÝ  c                   ó,   • \ rS rSrSr\" 5       rS rSrg)ÚDummyConnectionPooliÌ  z
A testable L{ConnectionPool};
c                 ó   • [         U l        g)z
Don't forward init call.
N)r   Ú_reactorr   s    r   r¯  ÚDummyConnectionPool.__init__Ó  s   € ô  ˆ�r!   )rè  N)	rÕ   rÖ   r×   rØ   rÙ   rÝ  Ú
threadpoolr¯  rß   r_   r!   r   ræ  ræ  Ì  s   † ññ “€Jõ r!   ræ  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚEventReactoriÚ  zù
Partial L{IReactorCore} implementation with simple event-related
methods.

@ivar _running: A C{bool} indicating whether the reactor is pretending
    to have been started already or not.

@ivar triggers: A C{list} of pending system event triggers.
c                 ó   • Xl         / U l        g r%   ©Ú_runningÚtriggers)r   Úrunnings     r   r¯  ÚEventReactor.__init__å  s   € ØŒØˆ�r!   c                 óZ   • U R                   (       a  U" 5         g U R                  SSU5      $ )NÚafterÚstartup)rï  ÚaddSystemEventTrigger)r   Úfunctions     r   ÚcallWhenRunningÚEventReactor.callWhenRunningé  s#   € Ø�=�=Ù�Jà×-Ñ-¨g°yÀ(ÓKÐKr!   c                 óD   • XU4nU R                   R                  U5        U$ r%   )rð  r–   )r   ÚphaseÚeventÚtriggerÚhandles        r   rö  Ú"EventReactor.addSystemEventTriggerï  s#   € Ø Ð(ˆØ�‰×Ñ˜VÔ$Øˆr!   c                 ó:   • U R                   R                  U5        g r%   )rð  Úremove)r   rþ  s     r   ÚremoveSystemEventTriggerÚ%EventReactor.removeSystemEventTriggerô  s   € Ø�‰×Ñ˜VÕ$r!   rî  N)
rÕ   rÖ   r×   rØ   rÙ   r¯  rø  rö  r  rß   r_   r!   r   rì  rì  Ú  s   † ñòòLòõ
%r!   rì  c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚConnectionPoolTestsiø  z#
Unit tests for L{ConnectionPool}.
c                 ó¾   ^ •  " S S5      nS n[        5       nXl        UR                  U5      nT R                  U[        5      nU 4S jnUR                  U5        U$ )zy
If rollback fails, L{ConnectionPool.runWithConnection} raises the
original exception and log the error of the rollback.
c                   ó    • \ rS rSrS rS rSrg)Ú]ConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaisei  c                 ó   • g r%   r_   ©r   rÉ  s     r   r¯  ÚfConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__  rÔ  r!   c                 ó   • [        S5      er¾  rÀ  r   s    r   rÂ  ÚfConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback  rÄ  r!   r_   N©rÕ   rÖ   r×   rØ   r¯  rÂ  rß   r_   r!   r   rÅ  r    ó   † òõ/r!   rÅ  c                 ó   • [        S5      e©NÚfoo©Ú
ValueError)r´  s    r   ÚraisingFunctionÚUConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.raisingFunction
  ó   € Ü˜UÓ#Ð#r!   c                 ó¾   >• TR                  [        5      nTR                  [        U5      S5        TR                  US   R                  R
                  S   S5        g ©NrŽ   r   r¿  ©rD   rÁ  rŸ   r�   rÈ  r-  ©ÚignoredrÊ  r   s     €r   ÚcbFailedÚNConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.cbFailed  óJ   ø€ Ø×+Ñ+¬LÓ9ˆFØ×ÑœS ›[¨!Ô,Ø×Ñ˜V A™YŸ_™_×1Ñ1°!Ñ4°jÕAr!   )ræ  r®  ry   ÚassertFailurer  r3   )r   rÅ  r  rÉ  r5   r  s   `     r   Ú(test_runWithConnectionRaiseOriginalErrorÚ<ConnectionPoolTests.test_runWithConnectionRaiseOriginalErrorý  s]   ø€ ÷	/ñ 	/ò	$ô #Ó$ˆØ!8ÔØ×"Ñ" ?Ó3ˆØ×Ñ˜q¤*Ó-ˆõ	Bð
 	
�‰�hÔØˆr!   c                 ó  •  " S S5      n[        5       nUR                  U" 5       5        U R                  [        5      nU R	                  [        U5      S5        U R	                  US   R                  R                  S   S5        g)z+
L{ConnectionPool._close} logs exceptions.
c                   ó   • \ rS rSrS rSrg)ÚDConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaisei  c                 ó   • [        S5      er¾  rÀ  r   s    r   r'   ÚJConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaise.close   rÄ  r!   r_   N)rÕ   rÖ   r×   rØ   r'   rß   r_   r!   r   ÚConnectionCloseRaiser%    rÆ  r!   r(  rŽ   r   r¿  N)ræ  Ú_closerD   rÁ  rŸ   r�   rÈ  r-  )r   r(  rÉ  rÊ  s       r   Útest_closeLogErrorÚ&ConnectionPoolTests.test_closeLogError  sm   € ÷
	/ñ 	/ô #Ó$ˆØ�‰Ñ(Ó*Ô+à×'Ñ'¬Ó5ˆØ×Ñœ˜V› aÔ(Ø×Ñ˜ ™Ÿ™×-Ñ-¨aÑ0°*Õ=r!   c                 óÞ   ^ •  " S S5      n " S S5      nS n[        5       nXl        X$l        UR                  U5      nT R	                  U[
        5      nU 4S jnUR                  U5        U$ )zv
If rollback fails, L{ConnectionPool.runInteraction} raises the
original exception and log the error of the rollback.
c                   ó    • \ rS rSrS rS rSrg)Ú^ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaisei0  c                 ó   • g r%   r_   r
  s     r   r¯  ÚgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__1  rÔ  r!   c                 ó   • [        S5      er¾  rÀ  r   s    r   rÂ  ÚgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback4  rÄ  r!   r_   Nr  r_   r!   r   rÅ  r.  0  r  r!   rÅ  c                   ó   • \ rS rSrS rSrg)ÚWConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransactioni7  c                 ó   • g r%   r_   )r   rÉ  r´  s      r   r¯  Ú`ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransaction.__init__8  rÔ  r!   r_   N)rÕ   rÖ   r×   rØ   r¯  rß   r_   r!   r   ÚDummyTransactionr4  7  s   † õr!   r7  c                 ó   • [        S5      er  r  )rÉ   s    r   r  ÚVConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.raisingFunction;  r  r!   c                 ó¾   >• TR                  [        5      nTR                  [        U5      S5        TR                  US   R                  R
                  S   S5        g r  r  r  s     €r   r  ÚOConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.cbFailedE  r  r!   )ræ  r®  ÚtransactionFactoryrr   r   r  r3   )r   rÅ  r7  r  rÉ  r5   r  s   `      r   Ú)test_runWithInteractionRaiseOriginalErrorÚ=ConnectionPoolTests.test_runWithInteractionRaiseOriginalError*  sm   ø€ ÷	/ñ 	/÷	ñ 	ò	$ô #Ó$ˆØ!8ÔØ"2Ôà×Ñ Ó0ˆØ×Ñ˜q¤*Ó-ˆõ	Bð
 	
�‰�hÔØˆr!   c                 óØ   • [        S5      n[        SUS9nU R                  UR                  SSUR                  4/5        UR                  5         U R                  UR                  5        g)z�
If L{ConnectionPool.close} is called without L{ConnectionPool.start}
having been called, the pool's startup event is cancelled.
Fútwisted.test.test_adbapi©Ú
cp_reactorrô  rõ  N)rì  r   rŸ   rð  Ú_startr'   r  ©r   r   rÉ  s      r   Útest_unstartedCloseÚ'ConnectionPoolTests.test_unstartedCloseM  s\   € ô
 ˜uÓ%ˆÜÐ8ÀWÑMˆà×Ñ˜×)Ñ)¨W°iÀÇÁÐ,MÐ+NÔOØ�
‰
Œà×Ñ˜×)Ñ)Õ*r!   c                 óØ   • [        S5      n[        SUS9nU R                  UR                  SSUR                  4/5        UR                  5         U R                  UR                  5        g)z…
If L{ConnectionPool.close} is called after it has been started, but
not by its shutdown trigger, the shutdown trigger is cancelled.
Tr@  rA  ÚduringÚshutdownN)rì  r   rŸ   rð  Ú
finalCloser'   r  rD  s      r   Útest_startedCloseÚ%ConnectionPoolTests.test_startedCloseZ  s\   € ô
 ˜tÓ$ˆÜÐ8ÀWÑMˆà×Ñ˜×)Ñ)¨X°zÀ4Ç?Á?Ð,SÐ+TÔUØ�
‰
Œà×Ñ˜×)Ñ)Õ*r!   r_   N)rÕ   rÖ   r×   rØ   rÙ   r!  r*  r=  rE  rK  rß   r_   r!   r   r  r  ø  s!   † ñòò:>ò !òF+õ+r!   r  ))rÙ   r  r‰  Útypingr   r   Útwisted.enterprise.adbapir   r   r   r   Útwisted.internetr	   r
   r   Útwisted.python.failurer   Útwisted.python.reflectr   Útwisted.trialr   rF   r   rá   r  r;  rQ  r[  rm  rv  r�  r§  r£  r«  rž  r¹  rÎ  rÝ  ræ  rì  r  r_   r!   r   Ú<module>rS     s0  ðñó 
Û ß !÷ó ÷ 8Ñ 7Ý *Ý 0Ý "ðÐ ÷Yñ Y÷xMñ M÷`>$ñ >$ôB�ô ô4˜ô ô4�ô ô8�ô ô8�_ô ô61˜ô 1òhñH ˆ^˜]©G«IÔ 6ñ ÐÐ 0±'³)Ô <÷ñ ô6>�h×'Ñ'ô >ô.>�x×(Ñ(ô >÷<"ñ "ô ˜.ô  ÷%ñ %ô<m+˜(×+Ñ+õ m+r!   