+
    üÐjße  ã                   óP  € R t ^ RIt^ RIt^ RIHtHt ^ RIHtHtH	t	H
t
 ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIHt Rt ! R	 R
4      t ! R R4      t ! R R4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR t]! ]R] ! 4       4       ]! ]R] ! 4       4        ! R R4      t! ! R  R!]PD                  4      t# ! R" R#]PD                  4      t$ ! R$ R%4      t% ! R& R']	4      t& ! R( R)4      t' ! R* R+]PD                  4      t(R# ),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                   óð   a € ] tR t^t o Rt/ t]P                  ! ]R4      f   Rt	R t
R tR tRR ltR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t V 3R lt!Rt"V t#R# )ÚADBAPITestBasez$
Test the asynchronous DB-API code.
Nú5ADB-API requires threads, no way to test without themc                óœ   € V P                  4        V P                  V P                  R7      V n        V P                  P	                  4        R# )zB
Set up the database and create a connection pool pointing at it.
)Ú
cp_openfunN)ÚstartDBÚmakePoolÚopenfunÚdbpoolÚstart©Úselfs   &Ú:/usr/lib/python3/dist-packages/twisted/test/test_adbapi.pyÚ
extraSetUpÚADBAPITestBase.extraSetUp(   s3   € ð 	�‰ŒØ—m‘m¨t¯|©|�mÓ<ˆŒØ�‰×ÑÖó    c                ó’   a € S P                   P                  R 4      pVP                  V 3R l4       VP                  V 3R l4       V# )úDROP TABLE simplec                 ó8   <€ SP                   P                  4       # ©N©r   Úclose©Úresr   s   &€r   Ú<lambda>Ú)ADBAPITestBase.tearDown.<locals>.<lambda>2   ó   ø€  $§+¡+×"3Ñ"3Ô"5r   c                 ó$   <€ SP                  4       # r"   ©ÚstopDBr%   s   &€r   r'   r(   3   ó   ø€  $§+¡+¤-r   ©r   ÚrunOperationÚaddCallback©r   Úds   f r   ÚtearDownÚADBAPITestBase.tearDown0   ó7   ø€ Ø�K‰K×$Ñ$Ð%8Ó9ˆØ	�‰Ô5Ô6Ø	�‰Ô/Ô0Øˆr   c                ó$   € R V P                   V&   R# )TN)Úopenfun_called©r   Úconns   &&r   r   ÚADBAPITestBase.openfun6   s   € Ø$(ˆ×Ñ˜DÓ!r   c                ó†   € V'       g   V P                  V P                  4       R # V P                  WP                  4       R # r"   )Ú
assertTruer7   ÚassertInr8   s   &&r   ÚcheckOpenfunCalledÚ!ADBAPITestBase.checkOpenfunCalled9   s)   € ßØ�O‰O˜D×/Ñ/Ö0à�M‰M˜$× 3Ñ 3Ö4r   c                ó  a € S P                   P                  \        4      pS P                  '       d‚   VP	                  S P
                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  V 3R  l4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                   4       V# )c                 ó$   <€ SP                  4       # r"   )ÚflushLoggedErrorsr%   s   &€r   r'   Ú*ADBAPITestBase.test_pool.<locals>.<lambda>F   s   ø€  d×&<Ñ&<Ô&>r   )r   r/   Úsimple_table_schemaÚtest_failuresr0   Ú_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_9r1   s   f 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                óŒ   a € \         P                  ! S P                  P                  R 4      pVP	                  V 3R lR 4       V# )úselect * from NOTABLEc                 ó&   <€ SP                  R 4      # ©zno exception©Úfailr%   s   &€r   r'   Ú.ADBAPITestBase._testPool_1_1.<locals>.<lambda>S   ó   ø€  4§9¡9¨^Ô#<r   c                 ó   € R # r"   © ©Úfs   &r   r'   rZ   S   ó   € Ér   ©r   ÚmaybeDeferredr   ÚrunQueryÚaddCallbacks©r   r&   r2   s   f& r   rF   ÚADBAPITestBase._testPool_1_1Q   s4   ø€ Ü×Ò §¡× 4Ñ 4Ð6MÓNˆØ	�‰Ô<¹nÔMØˆr   c                óŒ   a € \         P                  ! S P                  P                  R 4      pVP	                  V 3R lR 4       V# )zdeletexxx from NOTABLEc                 ó&   <€ SP                  R 4      # rW   rX   r%   s   &€r   r'   Ú.ADBAPITestBase._testPool_1_2.<locals>.<lambda>X   r[   r   c                 ó   € R # r"   r]   r^   s   &r   r'   ri   X   r`   r   )r   rb   r   r/   rd   re   s   f& r   rG   ÚADBAPITestBase._testPool_1_2V   s4   ø€ Ü×Ò §¡× 8Ñ 8Ð:RÓSˆØ	�‰Ô<¹nÔMØˆr   c                ó    a € \         P                  ! S P                  P                  S P                  4      pVP                  V 3R  lR 4       V# )c                 ó&   <€ SP                  R 4      # rW   rX   r%   s   &€r   r'   Ú.ADBAPITestBase._testPool_1_3.<locals>.<lambda>]   r[   r   c                 ó   € R # r"   r]   r^   s   &r   r'   rn   ]   r`   r   )r   rb   r   ÚrunInteractionÚbad_interactionrd   re   s   f& r   rH   ÚADBAPITestBase._testPool_1_3[   s9   ø€ Ü×Ò §¡× :Ñ :¸D×<PÑ<PÓQˆØ	�‰Ô<¹nÔMØˆr   c                ó    a € \         P                  ! S P                  P                  S P                  4      pVP                  V 3R  lR 4       V# )c                 ó&   <€ SP                  R 4      # rW   rX   r%   s   &€r   r'   Ú.ADBAPITestBase._testPool_1_4.<locals>.<lambda>b   r[   r   c                 ó   € R # r"   r]   r^   s   &r   r'   ru   b   r`   r   )r   rb   r   ÚrunWithConnectionÚbad_withConnectionrd   re   s   f& r   rI   ÚADBAPITestBase._testPool_1_4`   s9   ø€ Ü×Ò §¡× =Ñ =¸t×?VÑ?VÓWˆØ	�‰Ô<¹nÔMØˆr   c                óp   a € R pS P                   P                  V4      pV 3R lpVP                  V4       V# )úselect count(1) from simplec                 ó€   <€ SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       SP                  4        R# )é    zInteraction not rolled backN)r<   Úintr>   ©Úrowr   s   &€r   Ú_checkÚ*ADBAPITestBase._testPool_2.<locals>._checkj   s/   ø€ Ø�O‰OœC  A¥ q¥	›N¨aÑ/Ð1NÔOØ×#Ñ#Ö%r   ©r   rc   r0   ©r   r&   Úsqlr2   r�   s   f&   r   rJ   ÚADBAPITestBase._testPool_2e   s4   ø€ à+ˆØ�K‰K× Ñ  Ó%ˆõ	&ð 	
�‰�fÔØˆr   c                ó6  a € R p. p\        S P                  4       F6  pRV,          pVP                  S P                  P	                  V4      4       K8  	  \
        P                  ! V4      pV 3R lpVP                  V4       V 3R lpVP                  V4       V# )r{   z insert into simple(x) values(%d)c                 óB   <€ R pSP                   P                  V4      pV# )úselect x from simple order by x)r   rc   )r&   r…   r2   r   s   &  €r   Ú_selectÚ+ADBAPITestBase._testPool_3.<locals>._selectz   s!   ø€ à3ˆCØ—‘×$Ñ$ SÓ)ˆAØˆHr   c                 ó  <€ SP                  \        V 4      SP                  8H  R 4       \        SP                  4       FI  pSP                  \        W,          4      ^8H  R4       SP                  W,          ^ ,          V8H  R4       KK  	  R# )zWrong number of rowsúWrong size rowzValues not returned.N)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   r/   r   ÚgatherResultsr0   )r   r&   r…   Úinsertsr’   r2   rŠ   r�   s   f&      r   rK   ÚADBAPITestBase._testPool_3q   s…   ø€ Ø+ˆØˆä�t×*Ñ*Ö+ˆAØ4°qÕ8ˆCØ�N‰N˜4Ÿ;™;×3Ñ3°CÓ8Ö9ñ ,ô ×Ò Ó(ˆõ	ð 	
�‰�gÔõ	Ið 	
�‰�fÔàˆr   c                ó|   a € S P                   P                  S P                  4      pVP                  V 3R  l4       V# )c                 ó(   <€ SP                  V R 4      # ©Údone©ÚassertEqualr%   s   &€r   r'   Ú,ADBAPITestBase._testPool_4.<locals>.<lambda>�   ó   ø€  $×"2Ñ"2°3¸Ô"?r   )r   rp   Úinteractionr0   re   s   f& r   rL   ÚADBAPITestBase._testPool_4Œ   s/   ø€ à�K‰K×&Ñ& t×'7Ñ'7Ó8ˆØ	�‰Ô?Ô@Øˆr   c                ó|   a € S P                   P                  S P                  4      pVP                  V 3R  l4       V# )c                 ó(   <€ SP                  V R 4      # rš   rœ   r%   s   &€r   r'   Ú,ADBAPITestBase._testPool_5.<locals>.<lambda>•   rŸ   r   )r   rw   ÚwithConnectionr0   re   s   f& r   rM   ÚADBAPITestBase._testPool_5’   s/   ø€ à�K‰K×)Ñ)¨$×*=Ñ*=Ó>ˆØ	�‰Ô?Ô@Øˆr   c                óP   € V P                   P                  V P                  4      pV# r"   )r   rw   Úclose_withConnectionre   s   && r   rN   ÚADBAPITestBase._testPool_6˜   s!   € à�K‰K×)Ñ)¨$×*CÑ*CÓDˆØˆr   c                ó  a € . p\        S P                  4       F6  pR V,          pVP                  S P                  P	                  V4      4       K8  	  \
        P                  ! VRR7      pV 3R lpVP                  V4       V# )z!select x from simple where x = %dT©ÚfireOnOneErrbackc                 ó    <€ \        SP                  4       F3  pSP                  W,          ^,          ^ ,          ^ ,          V8H  R4       K5  	  R# )é   zValue not returnedN)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   rc   r   ÚDeferredListr0   )r   r&   Údsr’   r…   Údlistr�   s   f&     r   rO   ÚADBAPITestBase._testPool_7�   sq   ø€ àˆÜ�t×*Ñ*Ö+ˆAØ5¸Õ9ˆCØ�I‰I�d—k‘k×*Ñ*¨3Ó/Ö0ñ ,ô ×"Ò" 2¸Ô=ˆõ	Oð 	×Ñ˜&Ô!Øˆr   c                óØ   € . p\        V P                  4       F6  pR V,          pVP                  V P                  P	                  V4      4       K8  	  \
        P                  ! VRR7      pV# )zdelete from simple where x = %dTr«   )r�   r�   r”   r   r/   r   r±   )r   r&   r²   r’   r…   r³   s   &&    r   rP   ÚADBAPITestBase._testPool_8¬   sZ   € àˆÜ�t×*Ñ*Ö+ˆAØ3°aÕ7ˆCØ�I‰I�d—k‘k×.Ñ.¨sÓ3Ö4ñ ,ô ×"Ò" 2¸Ô=ˆØˆr   c                óp   a € R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                 ó€   <€ SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       SP                  4        R# )r}   z)Didn't successfully delete table contentsN)r<   r~   ÚcheckConnectr   s   &€r   r�   Ú*ADBAPITestBase._testPool_9.<locals>._checkº   s4   ø€ Ø�O‰OÜ�C˜•F˜1•I“ !Ñ#Ð%Pôð ×ÑÖr   rƒ   r„   s   f&   r   rQ   ÚADBAPITestBase._testPool_9µ   s4   ø€ à+ˆØ�K‰K× Ñ  Ó%ˆõ	 ð 	
�‰�fÔØˆr   c                ó†  € V P                   P                  4       pV P                  V4       VP                  4       pVP	                  R4       VP	                  R4       VP                  4       pV P                  \        V4      ^4       V P                  \        V^ ,          4      ^4       V P                  V^ ,          ^ ,          ^4       VP	                  R4       VP	                  R4       V P                  \        VP                  4       4      ^ 4       VP                  4        V P                   P                  V4       R# )z/Check the connect/disconnect synchronous calls.zinsert into simple(x) values(1)zselect x from simplezdelete from simpleN)
r   Úconnectr>   ÚcursorÚexecuteÚfetchallr�   rŽ   r$   Ú
disconnect)r   r9   Ú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                ó4  € VP                  R 4       \        V P                  4       FM  pVP                  4       pV P	                  \        V4      ^8H  R4       V P	                  V^ ,          V8H  R4       KO  	  V P                  VP                  4       R4       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                ón   € V P                   '       d   VP                  R 4       VP                  R4       R# )zinsert into simple(x) values(0)rU   N)Úcan_rollbackr¿   )r   rÈ   s   &&r   rq   ÚADBAPITestBase.bad_interactionÝ   s,   € Ø××ÐØ×ÑÐ AÔBà×ÑÐ3Ö4r   c                ó`  € VP                  4       p VP                  R 4       \        V P                  4       FM  pVP	                  4       pV P                  \        V4      ^8H  R4       V P                  V^ ,          V8H  R4       KO  	  VP                  4        R#   TP                  4        i ; i)r‰   r�   rÅ   r›   )r¾   r¿   r�   r�   rÆ   r<   rŽ   r$   )r   r9   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   ’A7B ÂB-c                ó&   € VP                  4        R # r"   )r$   r8   s   &&r   r¨   Ú#ADBAPITestBase.close_withConnectionï   s   € Ø�
‰
Žr   c                ó”   € VP                  4       p VP                  R 4       VP                  4        R#   TP                  4        i ; i)rU   N)r¾   r¿   r$   )r   r9   rÂ   s   && r   rx   Ú!ADBAPITestBase.bad_withConnectionò   s2   € Ø�{‰{‹}ˆð	Ø�L‰LÐ0Ô1à�J‰JŽLøˆD�J‰J�Lús	   ’5 µAc                ó<   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   # )é   r7   )r   ÚobjectÚbool)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚADBAPITestBase.__annotate__   s   ø‡ ‚ ñ
 ™¡˜Õ&Ñ+ò r   ©r   r"   )$Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r7   r	   ÚIReactorThreadsr
   Úskipr   r3   r   r>   rR   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r¹   r    rq   r¥   r¨   rx   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rØ   s   @r   r   r      s¤   ø‡ € ñð *,€Nà×!Ò! '¨4Ó0Ò8ØFˆòòò)ô5òò$ò
ò
ò
ò

òò6òòò
òòò%ò"ò5ò
òò÷i ƒ r   r   c                   ó‚   a € ] tR t^út o Rt]P                  ! ]R4      f   RtR t	R t
R tR tR tR	 tR
 tR tRtV tR# )ÚReconnectTestBasez3
Test the asynchronous DB-API code with reconnect.
Nr   c                ó"  € V P                   f   \        P                  ! R4      hV P                  4        V P	                  ^RV P                   R7      V n        V P
                  P                  4        V P
                  P                  \        4      # )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 testT)Úcp_maxÚcp_reconnectÚcp_good_sql)	Úgood_sqlr   ÚSkipTestr   r   r   r   r/   rD   r   s   &r   r   ÚReconnectTestBase.extraSetUp  sq   € ð �=‰=Ò Ü×#Ò#Ð$DÓEÐEØ�‰ŒØ—m‘mØ 4°T·]±]ð $ó 
ˆŒð 	�‰×ÑÔØ�{‰{×'Ñ'Ô(;Ó<Ð<r   c                ó’   a € S P                   P                  R 4      pVP                  V 3R l4       VP                  V 3R l4       V# )r    c                 ó8   <€ SP                   P                  4       # r"   r#   r%   s   &€r   r'   Ú,ReconnectTestBase.tearDown.<locals>.<lambda>  r)   r   c                 ó$   <€ SP                  4       # r"   r+   r%   s   &€r   r'   rò     r-   r   r.   r1   s   f r   r3   ÚReconnectTestBase.tearDown  r5   r   c                ód  € \         P                  ! R 4      pVP                  V P                  4       VP                  V P                  4       V P
                  '       g   VP                  V P                  4       VP                  V P                  4       VP                  V P                  4       V# r"   )	r   Úsucceedr0   Ú_testPool_1rJ   Úearly_reconnectrK   rL   rM   r1   s   & r   rR   ÚReconnectTestBase.test_pool  s{   € Ü�MŠM˜$ÓˆØ	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Ø×#×#Ð#Ø�M‰M˜$×*Ñ*Ô+Ø	�‰�d×&Ñ&Ô'Ø	�‰�d×&Ñ&Ô'Øˆr   c                óp   a € R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                 ó`   <€ SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       R# ©r}   zTable not emptyN©r<   r~   r   s   &€r   r�   Ú-ReconnectTestBase._testPool_1.<locals>._check%  ó#   ø€ Ø�O‰OœC  A¥ q¥	›N¨aÑ/Ð1BÖCr   rƒ   r„   s   f&   r   r÷   ÚReconnectTestBase._testPool_1!  ó5   ø€ Ø+ˆØ�K‰K× Ñ  Ó%ˆõ	Dð 	
�‰�fÔØˆr   c                óŠ   € \        V P                  P                  P                  4       4      ^ ,          P	                  4        R# )r}   N)Úlistr   ÚconnectionsÚvaluesr$   )r   r&   s   &&r   rJ   ÚReconnectTestBase._testPool_2+  s+   € äˆT�[‰[×$Ñ$×+Ñ+Ó-Ó.¨qÕ1×7Ñ7Ö9r   c                ó�   a € R p\         P                  ! S P                  P                  V4      pVP	                  V 3R lR 4       V# )r{   c                 ó&   <€ SP                  R 4      # rW   rX   r%   s   &€r   r'   Ú/ReconnectTestBase._testPool_3.<locals>.<lambda>2  r[   r   c                 ó   € R # r"   r]   r^   s   &r   r'   r	  2  r`   r   ra   ©r   r&   r…   r2   s   f&  r   rK   ÚReconnectTestBase._testPool_3/  s8   ø€ Ø+ˆÜ×Ò §¡× 4Ñ 4°cÓ:ˆØ	�‰Ô<¹nÔMØˆr   c                óp   a € R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                 ó`   <€ SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       R# rü   rý   r   s   &€r   r�   Ú-ReconnectTestBase._testPool_4.<locals>._check9  rÿ   r   rƒ   r„   s   f&   r   rL   ÚReconnectTestBase._testPool_45  r  r   c                ó¶   a € S P                  4        R p\        P                  ! S P                  P                  V4      pVP                  V 3R lV 3R l4       V# )rU   c                 ó&   <€ SP                  R 4      # rW   rX   r%   s   &€r   r'   Ú/ReconnectTestBase._testPool_5.<locals>.<lambda>D  s   ø€ ˜Ÿ	™	 .Ô1r   c                 óL   <€ SP                  V P                  \        4      4      # r"   )ÚassertFalseÚcheckr   )r_   r   s   &€r   r'   r  E  s   ø€ �d×&Ñ& q§w¡w¬~Ó'>Ô?r   )rB   r   rb   r   rc   rd   r  s   f&  r   rM   ÚReconnectTestBase._testPool_5?  sI   ø€ Ø×ÑÔ Ø%ˆÜ×Ò §¡× 4Ñ 4°cÓ:ˆØ	�‰Ü1Ü?ô	
ð ˆr   rÛ   )rÜ   rÝ   rÞ   rß   rà   r	   rá   r
   râ   r   r3   rR   r÷   rJ   rK   rL   rM   rä   rå   ræ   s   @r   rè   rè   ú   sQ   ø‡ € ñð ×!Ò! '¨4Ó0Ò8ØFˆò=òòòò:òò÷ð r   rè   c                   ó    a € ] tR tRt o RtRtRtRtRtRt	Rt
RtRtRtRt]P                   tRtRt^2tR tR tR tR	 tR
 tR tV 3R ltRtV tR# )Ú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Útwisted_testTc                ó  € V P                  4       V n        \        P                  ! V P                  4       V P	                  4       '       g(   \
        P                  ! R V P                  ,          4      hV P                  4       # )z%s: Cannot access db)	ÚmktempÚDB_DIRÚosÚmkdirÚcan_connectr   rî   ÚTEST_PREFIXr   r   s   &r   ÚsetUpÚDBTestConnector.setUpi  sX   € Ø—k‘k“mˆŒÜ
�Š�—‘ÔØ×Ñ×!Ò!Ü×#Ò#Ð$:¸T×=MÑ=MÕ$MÓNÐNØ�‰Ó Ð r   c                ó   € \        4       h)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                ó   € R# )z+Take any steps needed to bring database up.Nr]   r   s   &r   r   ÚDBTestConnector.startDBu  ó   € ár   c                ó   € R# )zBring database down, if needed.Nr]   r   s   &r   r,   ÚDBTestConnector.stopDBy  r*  r   c                ó~   € V P                  4       w  r#VP                  4       pVP                  V4       \        V/ VB # )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                ó   € \        4       h)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   c                óR   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   # )rÔ   r!  rí   )r   Ústr)r×   rØ   s   "€r   rÙ   ÚDBTestConnector.__annotate__J  s'   ø‡ ‚ ñ ™#•Ñ%ñ ñ0 ‘s�mÑ5ò1 r   )r  )rÜ   rÝ   rÞ   rß   rà   r!  ÚDB_NAMEÚDB_USERÚDB_PASSr  Únulls_okÚtrailing_spaces_okrË   rE   Úescape_slashesr   rí   rø   Ú	can_clearr�   r"  r   r   r,   r   r.  rã   rä   rå   ræ   s   @r   r  r  J  s�   ø‡ € ñð "&€Kà€GØ€GØ€Gà€Fà€HØÐØ€LØ€MØ€NØ,×5Ñ5€HØ€OØ€Ið €Nò!ò$ò
òò+ò$÷u ƒ r   r  c                   óB   a € ] tR tRt o RtRtRt^tR tR t	R t
RtV tR	# )
ÚSQLite3Connectori‹  z:
Connector that uses the stdlib SQLite3 database support.
ÚSQLite3Fc                ó$   € \        R 4      f   R# R# )Úsqlite3FTr   r   s   &r   r   ÚSQLite3Connector.can_connect”  s   € Ü˜Ó#Ò+Ùár   c                ó  € \         P                  P                  V P                  V P                  4      V n        \         P                  P                  V P
                  4      '       d#   \         P                  ! V P
                  4       R # R # r"   ©r  ÚpathÚjoinr  r:  ÚdatabaseÚexistsÚunlinkr   s   &r   r   ÚSQLite3Connector.startDBš  óL   € ÜŸ™Ÿ™ T§[¡[°$·,±,Ó?ˆŒÜ�7‰7�>‰>˜$Ÿ-™-×(Ò(Ü�IŠI�d—m‘mÖ$ñ )r   c                ó0   € RpRV P                   R^RR/pW3# )rE  rK  rê   Úcheck_same_threadF)rE  ©rK  ©r   r2  r3  s   &  r   r.  ÚSQLite3Connector.getPoolArgsŸ  s%   € ØˆØ˜$Ÿ-™-¨°1Ð6IÈ5ÐQˆØˆxˆr   rR  N©rÜ   rÝ   rÞ   rß   rà   r!  r?  r�   r   r   r.  rä   rå   ræ   s   @r   rB  rB  ‹  s/   ø‡ € ñð €KØ€NØ€Nòò%÷
ð r   rB  c                   óB   a € ] tR tRt o RtRtRt^tR tR t	R t
RtV tR	# )
ÚPySQLite2Connectori¥  z9
Connector that uses pysqlite's SQLite database support.
Ú	pysqlite2Fc                ó$   € \        R 4      f   R# R# )úpysqlite2.dbapi2FTr   r   s   &r   r   ÚPySQLite2Connector.can_connect®  s   € ÜÐ+Ó,Ò4Ùár   c                ó  € \         P                  P                  V P                  V P                  4      V n        \         P                  P                  V P
                  4      '       d#   \         P                  ! V P
                  4       R # R # r"   rH  r   s   &r   r   ÚPySQLite2Connector.startDB´  rO  r   c                ó0   € RpRV P                   R^RR/pW3# )rZ  rK  rê   rQ  F)rZ  rR  rS  s   &  r   r.  ÚPySQLite2Connector.getPoolArgs¹  s%   € Ø$ˆØ˜$Ÿ-™-¨°1Ð6IÈ5ÐQˆØˆxˆr   rR  NrU  ræ   s   @r   rW  rW  ¥  s/   ø‡ € ñð €KØ€NØ€Nòò%÷
ð r   rW  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚPyPgSQLConnectori¿  ÚPyPgSQLc                óâ   €  ^ RI Hp  TP                  T P                  T P
                  T P                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   )ÚPgSQLF©rK  ÚuserÚpasswordT)ÚpyPgSQLrd  ÚBaseExceptionr½   r:  r;  r<  r$   )r   rd  r9   s   &  r   r   ÚPyPgSQLConnector.can_connectÂ  sj   € ð	Ý%ð	Ø—=‘=ØŸ™¨D¯L©LÀ4Ç<Á<ð !ó ˆDð �J‰JŒLÙøô ô 	Úð	ûô ô 	Úð	ús#   ‚A ‰AA ÁAÁAÁA.Á-A.c                ó\   € RpRV P                   RV P                  RV P                  R^ /pW3# )úpyPgSQL.PgSQLrK  rf  rg  Úcp_min)rl  ©r:  r;  r<  rS  s   &  r   r.  ÚPyPgSQLConnector.getPoolArgsÐ  s7   € Ø!ˆà˜Ÿ™Ø�D—L‘LØ˜Ÿ™Ø�að	
ˆð ˆxˆr   r]   N©	rÜ   rÝ   rÞ   rß   r!  r   r.  rä   rå   ræ   s   @r   ra  ra  ¿  ó   ø‡ € Ø€Kò÷ð r   ra  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚPsycopgConnectoriÛ  ÚPsycopgc                óÞ   €  ^ RI p TP                  T P                  T P                  T P
                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   NFre  T)Úpsycopgri  r½   r:  r;  r<  r$   )r   rv  r9   s   &  r   r   ÚPsycopgConnector.can_connectÞ  sj   € ð	Ûð	Ø—?‘?ØŸ™¨D¯L©LÀ4Ç<Á<ð #ó ˆDð �J‰JŒLÙøô ô 	Úð	ûô ô 	Úð	úó#   ‚A ‡AA ÁAÁAÁA,Á+A,c                ó\   € RpRV P                   RV P                  RV P                  R^ /pW3# )rv  rK  rf  rg  rm  )rv  rn  rS  s   &  r   r.  ÚPsycopgConnector.getPoolArgsì  s7   € Øˆà˜Ÿ™Ø�D—L‘LØ˜Ÿ™Ø�að	
ˆð ˆxˆr   r]   Nrp  ræ   s   @r   rs  rs  Û  rq  r   rs  c                   ó<   a € ] tR tRt o RtRtRtRtR tR t	Rt
V tR# )ÚMySQLConnectori÷  ÚMySQLFc                óÞ   €  ^ RI p TP                  T P                  T P                  T P
                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   NF)Údbrf  ÚpasswdT)ÚMySQLdbri  r½   r:  r;  r<  r$   )r   r�  r9   s   &  r   r   ÚMySQLConnector.can_connectþ  sj   € ð	Ûð	Ø—?‘?Ø—<‘< d§l¡l¸4¿<¹<ð #ó ˆDð �J‰JŒLÙøô ô 	Úð	ûô ô 	Úð	úrx  c                óX   € RpRV P                   RV P                  RV P                  /pW3# )r�  r  rf  r€  )r�  rn  rS  s   &  r   r.  ÚMySQLConnector.getPoolArgs  s,   € ØˆØ�D—L‘L &¨$¯,©,¸À$Ç,Á,ÐOˆØˆxˆr   r]   N)rÜ   rÝ   rÞ   rß   r!  r>  rË   rø   r   r.  rä   rå   ræ   s   @r   r|  r|  ÷  s)   ø‡ € Ø€KàÐØ€LØ€Oò÷ð r   r|  c                   óP   a € ] tR tRt o RtRtRtRtRt^t	R t
R tR tR tR	tV tR# )
ÚFirebirdConnectori  ÚFirebirdFNc                óŠ   € \        R 4      f   R#  V P                  4        V P                  4        R#   \         d     R# i ; i)ÚkinterbasdbFT)r   r   r,   ri  r   s   &r   r   ÚFirebirdConnector.can_connect  s<   € Ü˜Ó'Ò/Ùð	Ø�L‰LŒNØ�K‰KŒMÙøÜô 	Úð	ús   ‘ 3 ³AÁAc                óÒ  € ^ RI p\        P                  P                  V P                  \
        P                  4      V n        \        P                  ! V P                  \        P                  \        P                  ,           \        P                  ,           4       RpW P                  V P                  V P                  3,          pVP                  V4      pVP                  4        R# )r}   Nz,create database "%s" user "%s" password "%s")r‰  r  rI  rJ  r  r  r:  ÚchmodÚstatÚS_IRWXUÚS_IRWXGÚS_IRWXOr;  r<  Úcreate_databaser$   )r   r‰  r…   r9   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                ó\   € RpRV P                   RRRV P                  RV P                  /pW3# )r‰  rK  Úhostú	127.0.0.1rf  rg  )r‰  rn  rS  s   &  r   r.  ÚFirebirdConnector.getPoolArgs0  s7   € Øˆà˜Ÿ™Ø�KØ�D—L‘LØ˜Ÿ™ð	
ˆð ˆxˆr   c                ó”   € ^ RI pVP                  V P                  RV P                  V P                  R7      pVP                  4        R# )r}   Nr•  )rK  r”  rf  rg  )r‰  r½   r:  r;  r<  Údrop_database)r   r‰  r9   s   &  r   r,   ÚFirebirdConnector.stopDB:  s@   € Ûà×"Ñ"Ø—\‘\ØØ—‘Ø—\‘\ð	 #ó 
ˆð 	×ÑÖr   )r:  )rÜ   rÝ   rÞ   rß   r!  rE   r?  rí   r@  r�   r   r   r.  r,   rä   rå   ræ   s   @r   r†  r†    s<   ø‡ € Ø€Kà€MØ€NØ€HØ€Ià€Nòòò÷	ð 	r   r†  c                óŒ  a€ \         \        \        \        \        \
        .p/ pV F‰  oSP                  V,           p ! V3R lRSV \        P                  4      pWVn	        \        SR4      '       d:   RP                  SP                  P                  4       ^ R V.,           4      Vn        WdV&   K‹  	  VP                  V4       R# )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                   ó2   <€ ] tR tRt Z P                  tRtR# )ÚmakeSQLTests.<locals>.testcasei[  r]   N)rÜ   rÝ   rÞ   rß   rä   )Ú	connclasss   €r   Útestcaserœ  [  s   ø† Ù"×-Ñ-ŒJr   rž  rÞ   Ú.Néÿÿÿÿ)rW  rB  ra  rs  r|  r†  r!  r   ÚTestCaserÜ   ÚhasattrrJ  rÞ   Úsplitr0  )Ú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                   ó>   a € ] tR tRt o RtRtRtR tR tR t	Rt
V tR# )	Ú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                ó   € Wn         R # r"   ©ÚconnectionFactory)r   r±  s   &&r   Ú__init__ÚFakePool.__init__}  s   € Ø!2Ör   c                ó"   € V P                  4       # )z2
Return an instance of C{self.connectionFactory}.
r°  r   s   &r   r½   ÚFakePool.connect€  s   € ð ×%Ñ%Ó'Ð'r   c                ó   € R# )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æ   s   @r   r®  r®  q  s*   ø‡ € ñð €IØ€Eò3ò(÷ð r   r®  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚConnectionTestsiŒ  z$
Tests for the L{Connection} class.
c                óN  €  ! R R4      p\        V4      p\        V4      pV P                  \        VP                  4       V P                  \        4      pV P                  \        V4      ^4       V P                  V^ ,          P                  P                  ^ ,          R4       R# )zd
If an error happens during rollback, L{ConnectionLost} is raised but
the original error is logged.
c                   ó&   a € ] tR tRt o R tRtV tR# )ÚIConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaisei—  c                ó   € \        R 4      h©úproblem!©ÚRuntimeErrorr   s   &r   ÚrollbackÚRConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaise.rollback˜  ó   € Ü" :Ó.Ð.r   r]   N)rÜ   rÝ   rÞ   rß   rÅ  rä   rå   ræ   s   @r   ÚConnectionRollbackRaiser¿  —  ó   ø‡ € ÷/ð /r   rÈ  rÂ  N)r®  r   ÚassertRaisesr   rÅ  rB   rÄ  r�   rŽ   Úvaluer2  )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æ   s   @r   r¼  r¼  Œ  s   ø‡ € ñ÷>ð >r   r¼  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚTransactionTestsi£  z%
Tests for the L{Transaction} class.
c                ó8  €  ! R R4      p\        R4      p\        W!! 4       4      pVP                  4        V P                  \        4      pV P                  \        V4      ^4       V P                  V^ ,          P                  P                  ^ ,          R4       R# )zl
If the cursor creation raises an error in L{Transaction.reopen}, it
reconnects but log the error occurred.
c                   ó0   a € ] tR tRt o ^ tR tR tRtV tR# )ÚNTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaisei®  c                ó   € R # r"   r]   r   s   &r   r¹  ÚXTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.reconnect±  ó   € Ùr   c                óp   € V P                   ^ 8X  d%   V ;P                   ^,          un         \        R4      hR# )r}   rÂ  N)Ú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æ   s   @r   ÚConnectionCursorRaiserÔ  ®  s   ø‡ € ØˆEò÷3ð 3r   rÛ  NrÂ  )	r®  r   ÚreopenrB   rÄ  r�   rŽ   rË  r2  )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æ   s   @r   rÑ  rÑ  £  s   ø‡ € ñ÷>ð >r   rÑ  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚNonThreadPooliÁ  c                óf   € R p V! V/ VB pV! WV4       R#   \          d    Rp\        4       p L#i ; i)TFN)Ú	Exceptionr   )r   ÚonResultr_   Úar3  Úsuccessr¯   s   &&&*,  r   ÚcallInThreadWithCallbackÚ&NonThreadPool.callInThreadWithCallbackÂ  s@   € Øˆð	Ù˜�[˜R‘[ˆFñ 	�Ö!øô ô 	ØˆGÜ“YŠFð	ús   „ –0¯0r]   N)rÜ   rÝ   rÞ   rß   ræ  rä   rå   ræ   s   @r   rà  rà  Á  s   ø‡ € ÷"ð "r   rà  c                   ó8   a € ] tR tRt o Rt]! 4       tR tRtV t	R# )ÚDummyConnectionPooliÌ  z
A testable L{ConnectionPool};
c                ó   € \         V n        R# )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æ   s   @r   ré  ré  Ì  s   ø‡ € ññ “€J÷ ð  r   ré  c                   ó<   a € ] tR tRt o RtR tR tR tR tRt	V t
R# )	Ú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                ó    € Wn         . V n        R # r"   ©Ú_runningÚtriggers)r   Úrunnings   &&r   r²  ÚEventReactor.__init__å  s   € ØŒØˆŽr   c                ó^   € V P                   '       d
   V! 4        R# V P                  R RV4      # )ÚafterÚstartupN)rò  ÚaddSystemEventTrigger)r   Úfunctions   &&r   ÚcallWhenRunningÚEventReactor.callWhenRunningé  s%   € Ø�=�=ˆ=ÙŽJà×-Ñ-¨g°yÀ(ÓKÐKr   c                óD   € WV3pV P                   P                  V4       V# r"   )ró  r”   )r   ÚphaseÚeventÚtriggerÚhandles   &&&& r   rù  Ú"EventReactor.addSystemEventTriggerï  s#   € Ø Ð(ˆØ�‰×Ñ˜VÔ$Øˆr   c                ó<   € V P                   P                  V4       R # 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æ   s   @r   rï  rï  Ú  s$   ø‡ € ñòòLò÷
%ð %r   rï  c                   óB   a € ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
ÚConnectionPoolTestsiø  z#
Unit tests for L{ConnectionPool}.
c                ó¾   a €  ! R R4      pR p\        4       pWn        VP                  V4      pS P                  V\        4      pV 3R lpVP                  V4       V# )zy
If rollback fails, L{ConnectionPool.runWithConnection} raises the
original exception and log the error of the rollback.
c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú]ConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaisei  c                ó   € R # r"   r]   ©r   rÌ  s   &&r   r²  ÚfConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__  r×  r   c                ó   € \        R 4      h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æ   s   @r   rÈ  r    ó   ø‡ € ò÷/ð /r   rÈ  c                 ó   € \        R 4      h©Úfoo©Ú
ValueError)r·  s   &r   ÚraisingFunctionÚUConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.raisingFunction
  ó   € Ü˜UÓ#Ð#r   c                 óÐ   <€ SP                  \        4      pSP                  \        V4      ^4       SP                  V^ ,          P                  P
                  ^ ,          R4       R# ©r®   rÂ  N©rB   rÄ  r�   rŽ   rË  r2  ©Ú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±  rw   ÚassertFailurer  r0   )r   rÈ  r  rÌ  r2   r   s   f     r   Ú(test_runWithConnectionRaiseOriginalErrorÚ<ConnectionPoolTests.test_runWithConnectionRaiseOriginalErrorý  s]   ø€ ÷	/ñ 	/ò	$ô #Ó$ˆØ!8ÔØ×"Ñ" ?Ó3ˆØ×Ñ˜q¤*Ó-ˆõ	Bð
 	
�‰�hÔØˆr   c                ó"  €  ! R R4      p\        4       pVP                  V! 4       4       V P                  \        4      pV P	                  \        V4      ^4       V P	                  V^ ,          P                  P                  ^ ,          R4       R# )z+
L{ConnectionPool._close} logs exceptions.
c                   ó&   a € ] tR tRt o R tRtV tR# )ÚDConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaisei  c                ó   € \        R 4      hrÁ  rÃ  r   s   &r   r$   ÚJConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaise.close   rÇ  r   r]   N)rÜ   rÝ   rÞ   rß   r$   rä   rå   ræ   s   @r   ÚConnectionCloseRaiser(    rÉ  r   r+  rÂ  N)ré  Ú_closerB   rÄ  r�   rŽ   rË  r2  )r   r+  rÌ  rÍ  s   &   r   Útest_closeLogErrorÚ&ConnectionPoolTests.test_closeLogError  sm   € ÷
	/ñ 	/ô #Ó$ˆØ�‰Ñ(Ó*Ô+à×'Ñ'¬Ó5ˆØ×Ñœ˜V› aÔ(Ø×Ñ˜ �Ÿ™×-Ñ-¨aÕ0°*Ö=r   c                óÞ   a €  ! R R4      p ! R R4      pR p\        4       pWn        W$n        VP                  V4      pS P	                  V\
        4      pV 3R lpVP                  V4       V# )zv
If rollback fails, L{ConnectionPool.runInteraction} raises the
original exception and log the error of the rollback.
c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú^ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaisei0  c                ó   € R # r"   r]   r  s   &&r   r²  ÚgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__1  r×  r   c                ó   € \        R 4      hrÁ  rÃ  r   s   &r   rÅ  ÚgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback4  rÇ  r   r]   Nr  ræ   s   @r   rÈ  r1  0  r  r   rÈ  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚWConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransactioni7  c                ó   € R # 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æ   s   @r   ÚDummyTransactionr7  7  s   ø‡ € ÷ð r   r:  c                 ó   € \        R 4      hr  r  )rÈ   s   &r   r  ÚVConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.raisingFunction;  r  r   c                 óÐ   <€ SP                  \        4      pSP                  \        V4      ^4       SP                  V^ ,          P                  P
                  ^ ,          R4       R# r  r  r  s   & €r   r   ÚOConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.cbFailedE  r"  r   )ré  r±  ÚtransactionFactoryrp   r#  r  r0   )r   rÈ  r:  r  rÌ  r2   r   s   f      r   Ú)test_runWithInteractionRaiseOriginalErrorÚ=ConnectionPoolTests.test_runWithInteractionRaiseOriginalError*  sm   ø€ ÷	/ñ 	/÷	ñ 	ò	$ô #Ó$ˆØ!8ÔØ"2Ôà×Ñ Ó0ˆØ×Ñ˜q¤*Ó-ˆõ	Bð
 	
�‰�hÔØˆr   c                óà   € \        R4      p\        RVR7      pV P                  VP                  RRVP                  3.4       VP                  4        V P                  VP                  4       R# )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                óà   € \        R4      p\        RVR7      pV P                  VP                  RRVP                  3.4       VP                  4        V P                  VP                  4       R# )z…
If L{ConnectionPool.close} is called after it has been started, but
not by its shutdown trigger, the shutdown trigger is cancelled.
TrC  rD  ÚduringÚshutdownN)rï  r   r�   ró  Ú
finalCloser$   r  rG  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@  rH  rN  rä   rå   ræ   s   @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   rD   r   rè   r  rB  rW  ra  rs  r|  r†  rª  r¦  r®  r¡  r¼  rÑ  rà  ré  rï  r  r]   r   r   Ú<module>rV     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   