§
    Ètºfße  ã                   óª  — d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZ ddlmZ d	Z G d
„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ Z eed e ¦   «         ¦  «          eed e ¦   «         ¦  «          G d„ d ¦  «        Z! G d!„ d"ej"        ¦  «        Z# G d#„ d$ej"        ¦  «        Z$ G d%„ d&¦  «        Z% G d'„ d(e	¦  «        Z& G d)„ d*¦  «        Z' G d+„ d,ej"        ¦  «        Z(dS )-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                   óä   — e Zd ZU dZi Zeeef         ed<    e	j
        ed¦  «        €dZd„ Zd„ Zd„ Zdd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#dS )ÚADBAPITestBasez,
    Test the asynchronous DB-API code.
    Úopenfun_calledNú5ADB-API requires threads, no way to test without themc                 ó    — |                       ¦   «          |                      | j        ¬¦  «        | _        | j                             ¦   «          dS )zR
        Set up the database and create a connection pool pointing at it.
        )Ú
cp_openfunN)ÚstartDBÚmakePoolÚopenfunÚdbpoolÚstart©Úselfs    úW/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_adbapi.pyÚ
extraSetUpzADBAPITestBase.extraSetUp(   sB   € ð 	�Š‰ŒˆØ—m’m¨t¬|�mÑ<Ô<ˆŒØŒ×ÒÑÔÐÐÐó    c                 óœ   ‡ — ‰ j                              d¦  «        }|                     ˆ fd„¦  «         |                     ˆ fd„¦  «         |S )NúDROP TABLE simplec                 ó6   •— ‰j                              ¦   «         S ©N©r   Úclose©Úresr   s    €r   ú<lambda>z)ADBAPITestBase.tearDown.<locals>.<lambda>2   ó   ø€  $¤+×"3Ò"3Ñ"5Ô"5€ r   c                 ó,   •— ‰                      ¦   «         S r#   ©ÚstopDBr&   s    €r   r(   z)ADBAPITestBase.tearDown.<locals>.<lambda>3   ó   ø€  $§+¢+¡-¤-€ r   ©r   ÚrunOperationÚaddCallback©r   Úds   ` r   ÚtearDownzADBAPITestBase.tearDown0   óV   ø€ ØŒK×$Ò$Ð%8Ñ9Ô9ˆØ	�ŠÐ5Ð5Ð5Ð5Ñ6Ô6Ð6Ø	�ŠÐ/Ð/Ð/Ð/Ñ0Ô0Ð0Øˆr   c                 ó   — d| j         |<   d S )NT)r   ©r   Úconns     r   r   zADBAPITestBase.openfun6   s   € Ø$(ˆÔ˜DÑ!Ð!Ð!r   c                 óx   — |s|                       | j        ¦  «         d S |                      || j        ¦  «         d S r#   )Ú
assertTruer   ÚassertInr6   s     r   ÚcheckOpenfunCalledz!ADBAPITestBase.checkOpenfunCalled9   sB   € Øð 	5Ø�OŠO˜DÔ/Ñ0Ô0Ð0Ð0Ð0à�MŠM˜$ Ô 3Ñ4Ô4Ð4Ð4Ð4r   c                 óô  ‡ — ‰ j                              t          ¦  «        }‰ j        r€|                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ˆ fd„¦  «         |                     ‰ j	        ¦  «         |                     ‰ j
        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |S )Nc                 ó,   •— ‰                      ¦   «         S r#   )ÚflushLoggedErrorsr&   s    €r   r(   z*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   ` r   Ú	test_poolzADBAPITestBase.test_pool?   sB  ø€ ØŒK×$Ò$Õ%8Ñ9Ô9ˆØÔð 	@Ø�MŠM˜$Ô,Ñ-Ô-Ð-Ø�MŠM˜$Ô,Ñ-Ô-Ð-Ø�MŠM˜$Ô,Ñ-Ô-Ð-Ø�MŠM˜$Ô,Ñ-Ô-Ð-Ø�MŠMÐ>Ð>Ð>Ð>Ñ?Ô?Ð?Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Øˆr   c                 óz   ‡ — t          j        ‰ j        j        d¦  «        }|                     ˆ fd„d„ ¦  «         |S )Núselect * from NOTABLEc                 ó.   •— ‰                      d¦  «        S ©Nzno exception©Úfailr&   s    €r   r(   z.ADBAPITestBase._testPool_1_1.<locals>.<lambda>S   ó   ø€  4§9¢9¨^Ñ#<Ô#<€ r   c                 ó   — d S r#   © ©Úfs    r   r(   z.ADBAPITestBase._testPool_1_1.<locals>.<lambda>S   ó   € È€ r   ©r	   ÚmaybeDeferredr   ÚrunQueryÚaddCallbacks©r   r'   r2   s   `  r   rA   zADBAPITestBase._testPool_1_1Q   s@   ø€ ÝÔ ¤Ô 4Ð6MÑNÔNˆØ	�ŠÐ<Ð<Ð<Ð<¸n¸nÑMÔMÐMØˆr   c                 óz   ‡ — t          j        ‰ j        j        d¦  «        }|                     ˆ fd„d„ ¦  «         |S )Nzdeletexxx from NOTABLEc                 ó.   •— ‰                      d¦  «        S rQ   rR   r&   s    €r   r(   z.ADBAPITestBase._testPool_1_2.<locals>.<lambda>X   rT   r   c                 ó   — d S r#   rV   rW   s    r   r(   z.ADBAPITestBase._testPool_1_2.<locals>.<lambda>X   rY   r   )r	   r[   r   r/   r]   r^   s   `  r   rB   zADBAPITestBase._testPool_1_2V   s@   ø€ ÝÔ ¤Ô 8Ð:RÑSÔSˆØ	�ŠÐ<Ð<Ð<Ð<¸n¸nÑMÔMÐMØˆr   c                 ó„   ‡ — t          j        ‰ j        j        ‰ j        ¦  «        }|                     ˆ fd„d„ ¦  «         |S )Nc                 ó.   •— ‰                      d¦  «        S rQ   rR   r&   s    €r   r(   z.ADBAPITestBase._testPool_1_3.<locals>.<lambda>]   rT   r   c                 ó   — d S r#   rV   rW   s    r   r(   z.ADBAPITestBase._testPool_1_3.<locals>.<lambda>]   rY   r   )r	   r[   r   ÚrunInteractionÚbad_interactionr]   r^   s   `  r   rC   zADBAPITestBase._testPool_1_3[   sB   ø€ ÝÔ ¤Ô :¸DÔ<PÑQÔQˆØ	�ŠÐ<Ð<Ð<Ð<¸n¸nÑMÔMÐMØˆr   c                 ó„   ‡ — t          j        ‰ j        j        ‰ j        ¦  «        }|                     ˆ fd„d„ ¦  «         |S )Nc                 ó.   •— ‰                      d¦  «        S rQ   rR   r&   s    €r   r(   z.ADBAPITestBase._testPool_1_4.<locals>.<lambda>b   rT   r   c                 ó   — d S r#   rV   rW   s    r   r(   z.ADBAPITestBase._testPool_1_4.<locals>.<lambda>b   rY   r   )r	   r[   r   ÚrunWithConnectionÚbad_withConnectionr]   r^   s   `  r   rD   zADBAPITestBase._testPool_1_4`   sB   ø€ ÝÔ ¤Ô =¸tÔ?VÑWÔWˆØ	�ŠÐ<Ð<Ð<Ð<¸n¸nÑMÔMÐMØˆr   c                 ót   ‡ — d}‰ j                              |¦  «        }ˆ fd„}|                     |¦  «         |S )Núselect count(1) from simplec                 ó–   •— ‰                      t          | d         d         ¦  «        dk    d¦  «         ‰                     ¦   «          d S )Nr   zInteraction not rolled back)r9   Úintr;   ©Úrowr   s    €r   Ú_checkz*ADBAPITestBase._testPool_2.<locals>._checkj   sC   ø€ Ø�OŠO�C  A¤ q¤	™NœN¨aÒ/Ð1NÑOÔOÐOØ×#Ò#Ñ%Ô%Ð%Ð%Ð%r   ©r   r\   r0   ©r   r'   Úsqlr2   rr   s   `    r   rE   zADBAPITestBase._testPool_2e   sO   ø€ à+ˆØŒK× Ò  Ñ%Ô%ˆð	&ð 	&ð 	&ð 	&ð 	&ð 	
�Š�fÑÔÐØˆr   c                 ó2  ‡ — d}g }t          ‰ j        ¦  «        D ]4}d|z  }|                     ‰ j                             |¦  «        ¦  «         Œ5t          j        |¦  «        }ˆ fd„}|                     |¦  «         ˆ fd„}|                     |¦  «         |S )Nrm   z insert into simple(x) values(%d)c                 ó@   •— d}‰j                              |¦  «        }|S )Núselect x from simple order by x)r   r\   )r'   ru   r2   r   s      €r   Ú_selectz+ADBAPITestBase._testPool_3.<locals>._selectz   s"   ø€ à3ˆCØ”×$Ò$ SÑ)Ô)ˆAØˆHr   c                 ó4  •— ‰                      t          | ¦  «        ‰j        k    d¦  «         t          ‰j        ¦  «        D ]U}‰                      t          | |         ¦  «        dk    d¦  «         ‰                      | |         d         |k    d¦  «         ŒVd S )NzWrong number of rowsé   úWrong size rowr   zValues not returned.)r9   ÚlenÚnum_iterationsÚrange)ÚrowsÚir   s     €r   rr   z*ADBAPITestBase._testPool_3.<locals>._check‚   s–   ø€ Ø�OŠO�C ™IœI¨Ô)<Ò<Ð>TÑUÔUÐUÝ˜4Ô.Ñ/Ô/ð Ið I�Ø—’¥ D¨¤G¡¤°Ò 1Ð3CÑDÔDÐDØ—’  Q¤¨¤
¨a¢Ð1GÑHÔHÐHÐHðIð Ir   )r   r~   Úappendr   r/   r	   ÚgatherResultsr0   )r   r'   ru   Úinsertsr�   r2   ry   rr   s   `       r   rF   zADBAPITestBase._testPool_3q   sÊ   ø€ Ø+ˆØˆå�tÔ*Ñ+Ô+ð 	:ð 	:ˆAØ4°qÑ8ˆCØ�NŠN˜4œ;×3Ò3°CÑ8Ô8Ñ9Ô9Ð9Ð9ÝÔ Ñ(Ô(ˆð	ð 	ð 	ð 	ð 	ð 	
�Š�gÑÔÐð	Ið 	Ið 	Ið 	Ið 	Ið 	
�Š�fÑÔÐàˆr   c                 óv   ‡ — ‰ j                              ‰ j        ¦  «        }|                     ˆ fd„¦  «         |S )Nc                 ó0   •— ‰                      | d¦  «        S ©NÚdone©ÚassertEqualr&   s    €r   r(   z,ADBAPITestBase._testPool_4.<locals>.<lambda>�   ó   ø€  $×"2Ò"2°3¸Ñ"?Ô"?€ r   )r   re   Úinteractionr0   r^   s   `  r   rG   zADBAPITestBase._testPool_4Œ   s<   ø€ àŒK×&Ò& tÔ'7Ñ8Ô8ˆØ	�ŠÐ?Ð?Ð?Ð?Ñ@Ô@Ð@Øˆr   c                 óv   ‡ — ‰ j                              ‰ j        ¦  «        }|                     ˆ fd„¦  «         |S )Nc                 ó0   •— ‰                      | d¦  «        S r‡   r‰   r&   s    €r   r(   z,ADBAPITestBase._testPool_5.<locals>.<lambda>•   r‹   r   )r   rj   ÚwithConnectionr0   r^   s   `  r   rH   zADBAPITestBase._testPool_5’   s<   ø€ àŒK×)Ò)¨$Ô*=Ñ>Ô>ˆØ	�ŠÐ?Ð?Ð?Ð?Ñ@Ô@Ð@Øˆr   c                 óD   — | j                              | j        ¦  «        }|S r#   )r   rj   Úclose_withConnectionr^   s      r   rI   zADBAPITestBase._testPool_6˜   s   € àŒK×)Ò)¨$Ô*CÑDÔDˆØˆr   c                 óþ   ‡ — g }t          ‰ j        ¦  «        D ]4}d|z  }|                     ‰ j                             |¦  «        ¦  «         Œ5t          j        |d¬¦  «        }ˆ fd„}|                     |¦  «         |S )Nz!select x from simple where x = %dT©ÚfireOnOneErrbackc                 óš   •— t          ‰j        ¦  «        D ]4}‰                     | |         d         d         d         |k    d¦  «         Œ5d S )Nr{   r   zValue not returned)r   r~   r9   )Úresultr�   r   s     €r   rr   z*ADBAPITestBase._testPool_7.<locals>._check¥   sY   ø€ Ý˜4Ô.Ñ/Ô/ð Oð O�Ø—’  q¤	¨!¤¨Q¤°Ô 2°aÒ 7Ð9MÑNÔNÐNÐNðOð Or   )r   r~   r‚   r   r\   r	   ÚDeferredListr0   )r   r'   Údsr�   ru   Údlistrr   s   `      r   rJ   zADBAPITestBase._testPool_7�   sŸ   ø€ àˆÝ�tÔ*Ñ+Ô+ð 	1ð 	1ˆAØ5¸Ñ9ˆCØ�IŠI�d”k×*Ò*¨3Ñ/Ô/Ñ0Ô0Ð0Ð0ÝÔ" 2¸Ð=Ñ=Ô=ˆð	Oð 	Oð 	Oð 	Oð 	Oð 	×Ò˜&Ñ!Ô!Ð!Øˆr   c                 óÈ   — g }t          | j        ¦  «        D ]4}d|z  }|                     | j                             |¦  «        ¦  «         Œ5t          j        |d¬¦  «        }|S )Nzdelete from simple where x = %dTr“   )r   r~   r‚   r   r/   r	   r—   )r   r'   r˜   r�   ru   r™   s         r   rK   zADBAPITestBase._testPool_8¬   sj   € àˆÝ�tÔ*Ñ+Ô+ð 	5ð 	5ˆAØ3°aÑ7ˆCØ�IŠI�d”k×.Ò.¨sÑ3Ô3Ñ4Ô4Ð4Ð4ÝÔ" 2¸Ð=Ñ=Ô=ˆØˆr   c                 ót   ‡ — d}‰ j                              |¦  «        }ˆ fd„}|                     |¦  «         |S )Nrm   c                 ó–   •— ‰                      t          | d         d         ¦  «        dk    d¦  «         ‰                     ¦   «          d S )Nr   z)Didn't successfully delete table contents)r9   ro   ÚcheckConnectrp   s    €r   rr   z*ADBAPITestBase._testPool_9.<locals>._checkº   sL   ø€ Ø�OŠOÝ�C˜”F˜1”I‘” !Ò#Ð%Pñô ð ð ×ÒÑÔÐÐÐr   rs   rt   s   `    r   rL   zADBAPITestBase._testPool_9µ   sO   ø€ à+ˆØŒK× Ò  Ñ%Ô%ˆð	 ð 	 ð 	 ð 	 ð 	 ð 	
�Š�fÑÔÐØˆr   c                 óü  — | j                              ¦   «         }|                      |¦  «         |                     ¦   «         }|                     d¦  «         |                     d¦  «         |                     ¦   «         }|                      t          |¦  «        d¦  «         |                      t          |d         ¦  «        d¦  «         |                      |d         d         d¦  «         |                     d¦  «         |                     d¦  «         |                      t          |                     ¦   «         ¦  «        d¦  «         |                     ¦   «          | j          	                    |¦  «         dS )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   r7   Úcursr'   s       r   r�   zADBAPITestBase.checkConnectÃ   s8  € àŒ{×"Ò"Ñ$Ô$ˆØ×Ò Ñ%Ô%Ð%Ø�{Š{‰}Œ}ˆØ�ŠÐ6Ñ7Ô7Ð7Ø�ŠÐ+Ñ,Ô,Ð,Ø�mŠm‰oŒoˆØ×Ò�˜S™œ 1Ñ%Ô%Ð%Ø×Ò�˜S œV™œ aÑ(Ô(Ð(Ø×Ò˜˜Qœ œ AÑ&Ô&Ð&Ø�ŠÐ)Ñ*Ô*Ð*Ø�ŠÐ+Ñ,Ô,Ð,Ø×Ò�˜TŸ]š]™_œ_Ñ-Ô-¨qÑ1Ô1Ð1Ø�
Š
‰ŒˆØŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   c                 ód  — |                      d¦  «         t          | j        ¦  «        D ]]}|                     ¦   «         }|                      t          |¦  «        dk    d¦  «         |                      |d         |k    d¦  «         Œ^|                      |                     ¦   «         d¦  «         dS )Nrx   r{   r|   r   úValue not returned.zToo many rowsrˆ   )r¡   r   r~   Úfetchoner9   r}   ÚassertIsNone)r   Útransactionr�   rq   s       r   rŒ   zADBAPITestBase.interactionÔ   sª   € Ø×ÒÐ=Ñ>Ô>Ð>Ý�tÔ*Ñ+Ô+ð 	@ð 	@ˆAØ×&Ò&Ñ(Ô(ˆCØ�OŠO�C ™HœH¨šMÐ+;Ñ<Ô<Ð<Ø�OŠO˜C œF ašKÐ)>Ñ?Ô?Ð?Ð?Ø×Ò˜+×.Ò.Ñ0Ô0°/ÑBÔBÐBØˆvr   c                 óh   — | j         r|                     d¦  «         |                     d¦  «         d S )Nzinsert into simple(x) values(0)rO   )Úcan_rollbackr¡   )r   r©   s     r   rf   zADBAPITestBase.bad_interactionÝ   s>   € ØÔð 	CØ×ÒÐ AÑBÔBÐBà×ÒÐ3Ñ4Ô4Ð4Ð4Ð4r   c                 óœ  — |                      ¦   «         }	 |                     d¦  «         t          | j        ¦  «        D ]]}|                     ¦   «         }|                      t          |¦  «        dk    d¦  «         |                      |d         |k    d¦  «         Œ^	 |                     ¦   «          n# |                     ¦   «          w xY wdS )Nrx   r{   r|   r   r¦   rˆ   )r    r¡   r   r~   r§   r9   r}   r%   )r   r7   r¤   r�   rq   s        r   r�   zADBAPITestBase.withConnectionã   s½   € Ø�{Š{‰}Œ}ˆð	Ø�LŠLÐ:Ñ;Ô;Ð;Ý˜4Ô.Ñ/Ô/ð Dð D�Ø—m’m‘o”o�Ø—’¥ C¡¤¨A¢Ð/?Ñ@Ô@Ð@Ø—’  A¤¨!¢Ð-BÑCÔCÐCÐCðDð
 �JŠJ‰LŒLˆLˆLøˆD�JŠJ‰LŒLˆLˆLøøøØˆvs   –BB3 Â3C	c                 ó.   — |                      ¦   «          d S r#   )r%   r6   s     r   r‘   z#ADBAPITestBase.close_withConnectionï   s   € Ø�
Š
‰Œˆˆˆr   c                 ó´   — |                      ¦   «         }	 |                     d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)NrO   )r    r¡   r%   )r   r7   r¤   s      r   rk   z!ADBAPITestBase.bad_withConnectionò   sJ   € Ø�{Š{‰}Œ}ˆð	Ø�LŠLÐ0Ñ1Ô1Ð1à�JŠJ‰LŒLˆLˆLˆLøˆD�JŠJ‰LŒLˆLˆLøøøs   –A ÁAr#   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚobjectÚboolÚ__annotations__r
   ÚIReactorThreadsr   Úskipr   r3   r   r;   rM   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r�   rŒ   rf   r�   r‘   rk   rV   r   r   r   r      s³  € € € € € € ðð ð *,€N�D˜ ˜Ô&Ð+Ð+Ñ+à!€zÔ! '¨4Ñ0Ô0Ð8ØFˆðð ð ðð ð ð)ð )ð )ð5ð 5ð 5ð 5ðð ð ð$ð ð ð
ð ð ð
ð ð ð
ð ð ð

ð 
ð 
ðð ð ð6ð ð ðð ð ðð ð ð
ð ð ðð ð ðð ð ð%ð %ð %ð"ð ð ð5ð 5ð 5ð
ð 
ð 
ðð ð ðð ð ð ð r   r   c                   óh   — e Zd ZdZ ej        ed¦  «        €dZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ ZdS )ÚReconnectTestBasez;
    Test the asynchronous DB-API code with reconnect.
    Nr   c                 ó  — | j         €t          j        d¦  «        ‚|                      ¦   «          |                      dd| j         ¬¦  «        | _        | j                             ¦   «          | j                             t          ¦  «        S )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.
        Nzno good sql for reconnect testr{   T)Úcp_maxÚcp_reconnectÚcp_good_sql)	Úgood_sqlr   ÚSkipTestr   r   r   r   r/   r?   r   s    r   r   zReconnectTestBase.extraSetUp  s{   € ð Œ=Ð ÝÔ#Ð$DÑEÔEÐEØ�Š‰ŒˆØ—m’mØ 4°T´]ð $ñ 
ô 
ˆŒð 	Œ×ÒÑÔÐØŒ{×'Ò'Õ(;Ñ<Ô<Ð<r   c                 óœ   ‡ — ‰ j                              d¦  «        }|                     ˆ fd„¦  «         |                     ˆ fd„¦  «         |S )Nr!   c                 ó6   •— ‰j                              ¦   «         S r#   r$   r&   s    €r   r(   z,ReconnectTestBase.tearDown.<locals>.<lambda>  r)   r   c                 ó,   •— ‰                      ¦   «         S r#   r+   r&   s    €r   r(   z,ReconnectTestBase.tearDown.<locals>.<lambda>  r-   r   r.   r1   s   ` r   r3   zReconnectTestBase.tearDown  r4   r   c                 ó@  — t          j        d ¦  «        }|                     | j        ¦  «         |                     | j        ¦  «         | j        s|                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |S r#   )	r	   Úsucceedr0   Ú_testPool_1rE   Úearly_reconnectrF   rG   rH   r1   s     r   rM   zReconnectTestBase.test_pool  sŠ   € ÝŒM˜$ÑÔˆØ	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'ØÔ#ð 	,Ø�MŠM˜$Ô*Ñ+Ô+Ð+Ø	�Š�dÔ&Ñ'Ô'Ð'Ø	�Š�dÔ&Ñ'Ô'Ð'Øˆr   c                 ót   ‡ — d}‰ j                              |¦  «        }ˆ fd„}|                     |¦  «         |S )Nrm   c                 ón   •— ‰                      t          | d         d         ¦  «        dk    d¦  «         d S ©Nr   zTable not empty©r9   ro   rp   s    €r   rr   z-ReconnectTestBase._testPool_1.<locals>._check%  ó1   ø€ Ø�OŠO�C  A¤ q¤	™NœN¨aÒ/Ð1BÑCÔCÐCÐCÐCr   rs   rt   s   `    r   rÅ   zReconnectTestBase._testPool_1!  óT   ø€ Ø+ˆØŒK× Ò  Ñ%Ô%ˆð	Dð 	Dð 	Dð 	Dð 	Dð 	
�Š�fÑÔÐØˆr   c                 óŒ   — t          | j        j                             ¦   «         ¦  «        d                              ¦   «          d S )Nr   )Úlistr   ÚconnectionsÚvaluesr%   )r   r'   s     r   rE   zReconnectTestBase._testPool_2+  s8   € åˆTŒ[Ô$×+Ò+Ñ-Ô-Ñ.Ô.¨qÔ1×7Ò7Ñ9Ô9Ð9Ð9Ð9r   c                 ó~   ‡ — d}t          j        ‰ j        j        |¦  «        }|                     ˆ fd„d„ ¦  «         |S )Nrm   c                 ó.   •— ‰                      d¦  «        S rQ   rR   r&   s    €r   r(   z/ReconnectTestBase._testPool_3.<locals>.<lambda>2  rT   r   c                 ó   — d S r#   rV   rW   s    r   r(   z/ReconnectTestBase._testPool_3.<locals>.<lambda>2  rY   r   rZ   ©r   r'   ru   r2   s   `   r   rF   zReconnectTestBase._testPool_3/  sD   ø€ Ø+ˆÝÔ ¤Ô 4°cÑ:Ô:ˆØ	�ŠÐ<Ð<Ð<Ð<¸n¸nÑMÔMÐMØˆr   c                 ót   ‡ — d}‰ j                              |¦  «        }ˆ fd„}|                     |¦  «         |S )Nrm   c                 ón   •— ‰                      t          | d         d         ¦  «        dk    d¦  «         d S rÉ   rÊ   rp   s    €r   rr   z-ReconnectTestBase._testPool_4.<locals>._check9  rË   r   rs   rt   s   `    r   rG   zReconnectTestBase._testPool_45  rÌ   r   c                 óª   ‡ — ‰                       ¦   «          d}t          j        ‰ j        j        |¦  «        }|                     ˆ fd„ˆ fd„¦  «         |S )NrO   c                 ó.   •— ‰                      d¦  «        S rQ   rR   r&   s    €r   r(   z/ReconnectTestBase._testPool_5.<locals>.<lambda>D  s   ø€ ˜Ÿ	š	 .Ñ1Ô1€ r   c                 ó^   •— ‰                      |                      t          ¦  «        ¦  «        S r#   )ÚassertFalseÚcheckr   )rX   r   s    €r   r(   z/ReconnectTestBase._testPool_5.<locals>.<lambda>E  s!   ø€ �d×&Ò& q§w¢w­~Ñ'>Ô'>Ñ?Ô?€ r   )r>   r	   r[   r   r\   r]   rÔ   s   `   r   rH   zReconnectTestBase._testPool_5?  sf   ø€ Ø×ÒÑ Ô Ð Ø%ˆÝÔ ¤Ô 4°cÑ:Ô:ˆØ	�ŠØ1Ð1Ð1Ð1Ø?Ð?Ð?Ð?ñ	
ô 	
ð 	
ð ˆr   )r¯   r°   r±   r²   r
   r¶   r   r·   r   r3   rM   rÅ   rE   rF   rG   rH   rV   r   r   r¹   r¹   ú   s²   € € € € € ðð ð "€zÔ! '¨4Ñ0Ô0Ð8ØFˆð=ð =ð =ðð ð ðð ð ðð ð ð:ð :ð :ðð ð ðð ð ðð ð ð ð r   r¹   c                   ó¦   — e Zd ZU dZdZee         ed<   dZdZ	dZ
dZdZdZdZdZdZej        Zee         ed<   dZdZdZd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚDBTestConnectora>  
    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                 óî   — |                       ¦   «         | _        t          j        | j        ¦  «         |                      ¦   «         st          j        d| j        z  ¦  «        ‚|                      ¦   «         S )Nz%s: Cannot access db)	ÚmktempÚDB_DIRÚosÚmkdirÚcan_connectr   r¿   rÞ   r   r   s    r   ÚsetUpzDBTestConnector.setUpi  sb   € Ø—k’k‘m”mˆŒÝ
Œ�”ÑÔÐØ×ÒÑ!Ô!ð 	OÝÔ#Ð$:¸TÔ=MÑ$MÑNÔNÐNØ�ŠÑ Ô Ð r   c                 ó   — t          ¦   «         ‚)zXReturn true if this database is present on the system
        and can be used in a test.©ÚNotImplementedErrorr   s    r   ræ   zDBTestConnector.can_connectp  s   € õ "Ñ#Ô#Ð#r   c                 ó   — dS )z+Take any steps needed to bring database up.NrV   r   s    r   r   zDBTestConnector.startDBu  ó   € àˆr   c                 ó   — dS )zBring database down, if needed.NrV   r   s    r   r,   zDBTestConnector.stopDBy  rì   r   c                 óš   — |                       ¦   «         \  }}|                     ¦   «         }|                     |¦  «         t          |i |¤ŽS )z;Create a connection pool with additional keyword arguments.)ÚgetPoolArgsÚcopyÚupdater   )r   ÚnewkwÚargsÚkws       r   r   zDBTestConnector.makePool}  sI   € à×#Ò#Ñ%Ô%‰ˆˆbØ�WŠW‰YŒYˆØ
�	Š	�%ÑÔÐÝ˜tÐ* rÐ*Ð*Ð*r   c                 ó   — t          ¦   «         ‚)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ï   zDBTestConnector.getPoolArgs„  s   € õ "Ñ#Ô#Ð#r   )r¯   r°   r±   r²   rÞ   r   Ústrrµ   ÚDB_NAMEÚDB_USERÚDB_PASSrã   Únulls_okÚtrailing_spaces_okr«   r@   Úescape_slashesr   r¾   rÆ   Ú	can_clearr~   rç   ræ   r   r,   r   rï   rV   r   r   rÝ   rÝ   J  sæ   € € € € € € ðð ð "&€K�˜#”Ð%Ð%Ñ%à€GØ€GØ€Gà€Fà€HØÐØ€LØ€MØ€NØ,Ô5€Hˆh�sŒmÐ5Ð5Ñ5Ø€OØ€Ið €Nð!ð !ð !ð$ð $ð $ð
ð ð ðð ð ð+ð +ð +ð$ð $ð $ð $ð $r   rÝ   c                   ó0   — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	dS )	ÚSQLite3ConnectorzB
    Connector that uses the stdlib SQLite3 database support.
    ÚSQLite3Fr{   c                 ó(   — t          d¦  «        €dS dS )NÚsqlite3FTr   r   s    r   ræ   zSQLite3Connector.can_connect”  s   € Ý˜Ñ#Ô#Ð+Ø�5à�4r   c                 óâ   — t           j                             | j        | j        ¦  «        | _        t           j                             | j        ¦  «        rt          j        | j        ¦  «         d S d S r#   ©rä   ÚpathÚjoinrã   r÷   ÚdatabaseÚexistsÚunlinkr   s    r   r   zSQLite3Connector.startDBš  óW   € ÝœŸš T¤[°$´,Ñ?Ô?ˆŒÝŒ7�>Š>˜$œ-Ñ(Ô(ð 	%ÝŒI�d”mÑ$Ô$Ð$Ð$Ð$ð	%ð 	%r   c                 ó$   — d}| j         dddœ}||fS )N)r  r{   F©r  r»   Úcheck_same_thread©r  ©r   ró   rô   s      r   rï   zSQLite3Connector.getPoolArgsŸ  s!   € ØˆØœ-°1È5ÐQÐQˆØ�Rˆxˆr   N©
r¯   r°   r±   r²   rÞ   rü   r~   ræ   r   rï   rV   r   r   rÿ   rÿ   ‹  s\   € € € € € ðð ð €KØ€NØ€Nðð ð ð%ð %ð %ð
ð ð ð ð r   rÿ   c                   ó0   — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	dS )	ÚPySQLite2ConnectorzA
    Connector that uses pysqlite's SQLite database support.
    Ú	pysqlite2Fr{   c                 ó(   — t          d¦  «        €dS dS )Núpysqlite2.dbapi2FTr   r   s    r   ræ   zPySQLite2Connector.can_connect®  s   € ÝÐ+Ñ,Ô,Ð4Ø�5à�4r   c                 óâ   — t           j                             | j        | j        ¦  «        | _        t           j                             | j        ¦  «        rt          j        | j        ¦  «         d S d S r#   r  r   s    r   r   zPySQLite2Connector.startDB´  r
  r   c                 ó$   — d}| j         dddœ}||fS )N)r  r{   Fr  r  r  s      r   rï   zPySQLite2Connector.getPoolArgs¹  s!   € Ø$ˆØœ-°1È5ÐQÐQˆØ�Rˆxˆr   Nr  rV   r   r   r  r  ¥  s\   € € € € € ðð ð €KØ€NØ€Nðð ð ð%ð %ð %ð
ð ð ð ð r   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚPyPgSQLConnectorÚPyPgSQLc                 óÒ   — 	 ddl m} n# t          $ r Y dS w xY w	 |                     | j        | j        | j        ¬¦  «        }|                     ¦   «          dS # t          $ r Y dS w xY w)Nr   )ÚPgSQLF©r  ÚuserÚpasswordT)ÚpyPgSQLr  ÚBaseExceptionrŸ   r÷   rø   rù   r%   )r   r  r7   s      r   ræ   zPyPgSQLConnector.can_connectÂ  sž   € ð	Ø%Ð%Ð%Ð%Ð%Ð%Ð%øÝð 	ð 	ð 	Ø�5�5ð	øøøð	Ø—=’=Øœ¨D¬LÀ4Ä<ð !ñ ô ˆDð �JŠJ‰LŒLˆLØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚	 ‰
–›;A Á
A&Á%A&c                 ó:   — d}| j         | j        | j        ddœ}||fS )N)zpyPgSQL.PgSQLr   ©r  r  r  Úcp_min©r÷   rø   rù   r  s      r   rï   zPyPgSQLConnector.getPoolArgsÐ  s0   € Ø!ˆàœØ”LØœØð	
ð 
ˆð �Rˆxˆr   N©r¯   r°   r±   rÞ   ræ   rï   rV   r   r   r  r  ¿  ó7   € € € € € Ø€Kðð ð ðð ð ð ð r   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚPsycopgConnectorÚPsycopgc                 óÎ   — 	 dd l }n# t          $ r Y dS w xY w	 |                     | j        | j        | j        ¬¦  «        }|                     ¦   «          dS # t          $ r Y dS w xY w)Nr   Fr  T)Úpsycopgr!  rŸ   r÷   rø   rù   r%   )r   r,  r7   s      r   ræ   zPsycopgConnector.can_connectÞ  s”   € ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ø�5�5ð	øøøð	Ø—?’?Øœ¨D¬LÀ4Ä<ð #ñ ô ˆDð �JŠJ‰LŒLˆLØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøó   ‚ ‡
”™;A Á
A$Á#A$c                 ó:   — d}| j         | j        | j        ddœ}||fS )N)r,  r   r#  r%  r  s      r   rï   zPsycopgConnector.getPoolArgsì  s0   € ØˆàœØ”LØœØð	
ð 
ˆð �Rˆxˆr   Nr&  rV   r   r   r)  r)  Û  r'  r   r)  c                   ó*   — e Zd ZdZdZdZdZd„ Zd„ ZdS )ÚMySQLConnectorÚMySQLFc                 óÎ   — 	 dd l }n# t          $ r Y dS w xY w	 |                     | j        | j        | j        ¬¦  «        }|                     ¦   «          dS # t          $ r Y dS w xY w)Nr   F©Údbr  ÚpasswdT)ÚMySQLdbr!  rŸ   r÷   rø   rù   r%   )r   r6  r7   s      r   ræ   zMySQLConnector.can_connectþ  s”   € ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ø�5�5ð	øøøð	Ø—?’?Ø”< d¤l¸4¼<ð #ñ ô ˆDð �JŠJ‰LŒLˆLØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøør-  c                 ó8   — d}| j         | j        | j        dœ}||fS )N)r6  r3  r%  r  s      r   rï   zMySQLConnector.getPoolArgs  s%   € ØˆØ”L¨$¬,À$Ä,ÐOÐOˆØ�Rˆxˆr   N)	r¯   r°   r±   rÞ   rû   r«   rÆ   ræ   rï   rV   r   r   r0  r0  ÷  sG   € € € € € Ø€KàÐØ€LØ€Oðð ð ðð ð ð ð r   r0  c                   ó>   — e Zd ZdZdZdZdZdZdZd„ Z	d„ Z
d„ Zd„ ZdS )	ÚFirebirdConnectorÚFirebirdFNé   c                 óœ   — t          d¦  «        €dS 	 |                      ¦   «          |                      ¦   «          dS # t          $ r Y dS w xY w)NÚkinterbasdbFT)r   r   r,   r!  r   s    r   ræ   zFirebirdConnector.can_connect  s[   € Ý˜Ñ'Ô'Ð/Ø�5ð	Ø�LŠL‰NŒNˆNØ�KŠK‰MŒMˆMØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   “(= ½
AÁ
Ac                 óv  — dd l }t          j                             | j        t
          j        ¦  «        | _        t          j        | j        t          j	        t          j
        z   t          j        z   ¦  «         d}|| j        | j        | j        fz  }|                     |¦  «        }|                     ¦   «          d S )Nr   z,create database "%s" user "%s" password "%s")r=  rä   r  r  rã   rÝ   r÷   ÚchmodÚstatÚS_IRWXUÚS_IRWXGÚS_IRWXOrø   rù   Úcreate_databaser%   )r   r=  ru   r7   s       r   r   zFirebirdConnector.startDB&  sŽ   € ØÐÐÐå”w—|’| D¤KµÔ1HÑIÔIˆŒÝ
Œ�”�dœl­T¬\Ñ9½D¼LÑHÑIÔIÐIØ<ˆØ�”˜dœl¨D¬LÐ9Ñ9ˆØ×*Ò*¨3Ñ/Ô/ˆØ�
Š
‰Œˆˆˆr   c                 ó:   — d}| j         d| j        | j        dœ}||fS )N)r=  ú	127.0.0.1©r  Úhostr  r  r%  r  s      r   rï   zFirebirdConnector.getPoolArgs0  s0   € ØˆàœØØ”LØœð	
ð 
ˆð �Rˆxˆr   c                 ó†   — dd l }|                     | j        d| j        | j        ¬¦  «        }|                     ¦   «          d S )Nr   rF  rG  )r=  rŸ   r÷   rø   rù   Údrop_database)r   r=  r7   s      r   r,   zFirebirdConnector.stopDB:  sT   € ØÐÐÐà×"Ò"Ø”\ØØ”Ø”\ð	 #ñ 
ô 
ˆð 	×ÒÑÔÐÐÐr   )r¯   r°   r±   rÞ   r@   rü   r¾   rý   r~   ræ   r   rï   r,   rV   r   r   r9  r9    sn   € € € € € Ø€Kà€MØ€NØ€HØ€Ià€Nðð ð ðð ð ðð ð ð	ð 	ð 	ð 	ð 	r   r9  c                 óŠ  ‡— t           t          t          t          t          t
          g}i }|D ]�Š‰j        |z   } G ˆfd„d‰| t          j        ¦  «        }||_	        t          ‰d¦  «        r=d                     ‰j                             ¦   «         dd…         |gz   ¦  «        |_        |||<   Œ‚|                     |¦  «         dS )aQ  
    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                   ó   •— e Zd Z” j        ZdS )úmakeSQLTests.<locals>.testcaseN)r¯   r°   r±   )Ú	connclasss   €r   ÚtestcaserM  [  s   ø€ € € € € Ø"Ô-ˆJˆJˆJr   rO  r±   ú.r   éÿÿÿÿN)r  rÿ   r  r)  r0  r9  rÞ   r   ÚTestCaser¯   Úhasattrr  r±   Úsplitrñ   )ÚbaseÚsuffixÚglobalsÚ
connectorsÚtestsÚnamerO  rN  s          @r   ÚmakeSQLTestsr[  F  sõ   ø€ õ 	ÝÝÝÝÝð€Jð €EØð ð ˆ	ØÔ$ vÑ-ˆð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.�y $­Ô(9ñ 	.ô 	.ð 	.ð !ˆÔÝ�9˜nÑ-Ô-ð 	Ø$'§H¢HØÔ&×,Ò,Ñ.Ô.¨q°¨tÔ4¸°vÑ=ñ%ô %ˆHÔ!ð ˆˆd‰ˆà‡N‚N�5ÑÔÐÐÐr   ÚADBAPITestsÚReconnectTestsc                   ó,   — e Zd ZdZdZdZd„ Zd„ Zd„ ZdS )ÚFakePoolz¿
    A fake L{ConnectionPool} for tests.

    @ivar connectionFactory: factory for making connections returned by the
        C{connect} method.
    @type connectionFactory: any callable
    Tc                 ó   — || _         d S r#   ©ÚconnectionFactory)r   rb  s     r   Ú__init__zFakePool.__init__}  s   € Ø!2ˆÔÐÐr   c                 ó*   — |                       ¦   «         S )zB
        Return an instance of C{self.connectionFactory}.
        ra  r   s    r   rŸ   zFakePool.connect€  s   € ð ×%Ò%Ñ'Ô'Ð'r   c                 ó   — dS )z
        Do nothing.
        NrV   )r   Ú
connections     r   r£   zFakePool.disconnect†  s   € € € r   N)	r¯   r°   r±   r²   Ú	reconnectÚnoisyrc  rŸ   r£   rV   r   r   r_  r_  q  sW   € € € € € ðð ð €IØ€Eð3ð 3ð 3ð(ð (ð (ðð ð ð ð r   r_  c                   ó   — e Zd ZdZd„ ZdS )ÚConnectionTestsz,
    Tests for the L{Connection} class.
    c                 ón  —  G d„ d¦  «        }t          |¦  «        }t          |¦  «        }|                      t          |j        ¦  «         |                      t          ¦  «        }|                      t          |¦  «        d¦  «         |                      |d         j	        j
        d         d¦  «         dS )z|
        If an error happens during rollback, L{ConnectionLost} is raised but
        the original error is logged.
        c                   ó   — e Zd Zd„ ZdS )úIConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaisec                 ó    — t          d¦  «        ‚©Núproblem!©ÚRuntimeErrorr   s    r   ÚrollbackzRConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaise.rollback˜  ó   € Ý" :Ñ.Ô.Ð.r   N)r¯   r°   r±   rs  rV   r   r   ÚConnectionRollbackRaiserm  —  ó#   € € € € € ð/ð /ð /ð /ð /r   ru  r{   r   rp  N)r_  r   ÚassertRaisesr   rs  r>   rr  rŠ   r}   Úvalueró   )r   ru  Úpoolrf  Úerrorss        r   Útest_rollbackErrorLoggedz(ConnectionTests.test_rollbackErrorLogged‘  s¹   € ð	/ð 	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/õ Ð/Ñ0Ô0ˆÝ Ñ%Ô%ˆ
Ø×Ò�.¨*Ô*=Ñ>Ô>Ð>Ø×'Ò'­Ñ5Ô5ˆØ×Ò�˜V™œ aÑ(Ô(Ð(Ø×Ò˜ œœÔ-¨aÔ0°*Ñ=Ô=Ð=Ð=Ð=r   N)r¯   r°   r±   r²   r{  rV   r   r   rj  rj  Œ  s-   € € € € € ðð ð>ð >ð >ð >ð >r   rj  c                   ó   — e Zd ZdZd„ ZdS )ÚTransactionTestsz-
    Tests for the L{Transaction} class.
    c                 óh  —  G d„ d¦  «        }t          d¦  «        }t          | |¦   «         ¦  «        }|                     ¦   «          |                      t          ¦  «        }|                      t          |¦  «        d¦  «         |                      |d         j        j        d         d¦  «         dS )z„
        If the cursor creation raises an error in L{Transaction.reopen}, it
        reconnects but log the error occurred.
        c                   ó   — e Zd ZdZd„ Zd„ ZdS )úNTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaiser   c                 ó   — d S r#   rV   r   s    r   rg  zXTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.reconnect±  ó   € Ø�r   c                 óZ   — | j         dk    r| xj         dz  c_         t          d¦  «        ‚d S )Nr   r{   rp  )Úcountrr  r   s    r   r    zUTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.cursor´  s1   € Ø”: ’?�?Ø�J”J !‘O�J”JÝ& zÑ2Ô2Ð2ð #�?r   N)r¯   r°   r±   r„  rg  r    rV   r   r   ÚConnectionCursorRaiser€  ®  s7   € € € € € ØˆEðð ð ð3ð 3ð 3ð 3ð 3r   r…  Nr{   r   rp  )	r_  r   Úreopenr>   rr  rŠ   r}   rx  ró   )r   r…  ry  r©   rz  s        r   Útest_reopenLogErrorIfReconnectz/TransactionTests.test_reopenLogErrorIfReconnect¨  s»   € ð		3ð 		3ð 		3ð 		3ð 		3ñ 		3ô 		3ð 		3õ ˜‰~Œ~ˆÝ! $Ð(=Ð(=Ñ(?Ô(?Ñ@Ô@ˆØ×ÒÑÔÐØ×'Ò'­Ñ5Ô5ˆØ×Ò�˜V™œ aÑ(Ô(Ð(Ø×Ò˜ œœÔ-¨aÔ0°*Ñ=Ô=Ð=Ð=Ð=r   N)r¯   r°   r±   r²   r‡  rV   r   r   r}  r}  £  s-   € € € € € ðð ð>ð >ð >ð >ð >r   r}  c                   ó   — e Zd Zd„ ZdS )ÚNonThreadPoolc                 óv   — d}	  ||i |¤Ž}n # t           $ r d}t          ¦   «         }Y nw xY w |||¦  «         d S )NTF)Ú	Exceptionr   )r   ÚonResultrX   Úarô   Úsuccessr–   s          r   ÚcallInThreadWithCallbackz&NonThreadPool.callInThreadWithCallbackÂ  sf   € Øˆð	Ø�Q˜�[˜R�[�[ˆFˆFøÝð 	ð 	ð 	ØˆGÝ‘Y”YˆFˆFˆFð	øøøð 	ˆ�˜&Ñ!Ô!Ð!Ð!Ð!s   „ �*©*N)r¯   r°   r±   r�  rV   r   r   r‰  r‰  Á  s#   € € € € € ð"ð "ð "ð "ð "r   r‰  c                   ó,   — e Zd ZdZ e¦   «         Zd„ ZdS )ÚDummyConnectionPoolz'
    A testable L{ConnectionPool};
    c                 ó   — t           | _        dS )z*
        Don't forward init call.
        N)r   Ú_reactorr   s    r   rc  zDummyConnectionPool.__init__Ó  s   € õ  ˆŒˆˆr   N)r¯   r°   r±   r²   r‰  Ú
threadpoolrc  rV   r   r   r‘  r‘  Ì  s:   € € € € € ðð ð �‘”€Jð ð  ð  ð  ð  r   r‘  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚEventReactora  
    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                 ó"   — || _         g | _        d S r#   )Ú_runningÚtriggers)r   Úrunnings     r   rc  zEventReactor.__init__å  s   € ØˆŒØˆŒˆˆr   c                 óV   — | j         r |¦   «          d S |                      dd|¦  «        S )NÚafterÚstartup)r˜  ÚaddSystemEventTrigger)r   Úfunctions     r   ÚcallWhenRunningzEventReactor.callWhenRunningé  s4   € ØŒ=ð 	LØˆH‰JŒJˆJˆJˆJà×-Ò-¨g°yÀ(ÑKÔKÐKr   c                 óD   — |||f}| j                              |¦  «         |S r#   )r™  r‚   )r   ÚphaseÚeventÚtriggerÚhandles        r   rž  z"EventReactor.addSystemEventTriggerï  s)   € Ø˜ Ð(ˆØŒ×Ò˜VÑ$Ô$Ð$Øˆr   c                 ó:   — | j                              |¦  «         d S r#   )r™  Úremove)r   r¥  s     r   ÚremoveSystemEventTriggerz%EventReactor.removeSystemEventTriggerô  s   € ØŒ×Ò˜VÑ$Ô$Ð$Ð$Ð$r   N)r¯   r°   r±   r²   rc  r   rž  r¨  rV   r   r   r–  r–  Ú  s]   € € € € € ðð ðð ð ðLð Lð Lðð ð ð
%ð %ð %ð %ð %r   r–  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚConnectionPoolTestsz+
    Unit tests for L{ConnectionPool}.
    c                 óæ   ‡ —  G d„ d¦  «        }d„ }t          ¦   «         }||_        |                     |¦  «        }‰                      |t          ¦  «        }ˆ fd„}|                     |¦  «         |S )z‘
        If rollback fails, L{ConnectionPool.runWithConnection} raises the
        original exception and log the error of the rollback.
        c                   ó   — e Zd Zd„ Zd„ ZdS )ú]ConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaisec                 ó   — d S r#   rV   ©r   ry  s     r   rc  zfConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__  r‚  r   c                 ó    — t          d¦  «        ‚ro  rq  r   s    r   rs  zfConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback  rt  r   N©r¯   r°   r±   rc  rs  rV   r   r   ru  r­    ó2   € € € € € ðð ð ð/ð /ð /ð /ð /r   ru  c                 ó    — t          d¦  «        ‚©NÚfoo©Ú
ValueError)rf  s    r   ÚraisingFunctionzUConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.raisingFunction
  ó   € Ý˜UÑ#Ô#Ð#r   c                 óÚ   •— ‰                      t          ¦  «        }‰                     t          |¦  «        d¦  «         ‰                     |d         j        j        d         d¦  «         d S ©Nr{   r   rp  ©r>   rr  rŠ   r}   rx  ró   ©Úignoredrz  r   s     €r   ÚcbFailedzNConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.cbFailed  ó\   ø€ Ø×+Ò+­LÑ9Ô9ˆFØ×Ò�S ™[œ[¨!Ñ,Ô,Ð,Ø×Ò˜V AœYœ_Ô1°!Ô4°jÑAÔAÐAÐAÐAr   )r‘  rb  rj   ÚassertFailurer·  r0   )r   ru  r¸  ry  r2   r¿  s   `     r   Ú(test_runWithConnectionRaiseOriginalErrorz<ConnectionPoolTests.test_runWithConnectionRaiseOriginalErrorý  s®   ø€ ð	/ð 	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð	$ð 	$ð 	$õ #Ñ$Ô$ˆØ!8ˆÔØ×"Ò" ?Ñ3Ô3ˆØ×Ò˜q¥*Ñ-Ô-ˆð	Bð 	Bð 	Bð 	Bð 	Bð
 	
�Š�hÑÔÐØˆr   c                 óH  —  G d„ d¦  «        }t          ¦   «         }|                      |¦   «         ¦  «         |                      t          ¦  «        }|                      t          |¦  «        d¦  «         |                      |d         j        j        d         d¦  «         dS )z;
        L{ConnectionPool._close} logs exceptions.
        c                   ó   — e Zd Zd„ ZdS )úDConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaisec                 ó    — t          d¦  «        ‚ro  rq  r   s    r   r%   zJConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaise.close   rt  r   N)r¯   r°   r±   r%   rV   r   r   ÚConnectionCloseRaiserÅ    rv  r   rÇ  r{   r   rp  N)r‘  Ú_closer>   rr  rŠ   r}   rx  ró   )r   rÇ  ry  rz  s       r   Útest_closeLogErrorz&ConnectionPoolTests.test_closeLogError  s¬   € ð
	/ð 	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/õ #Ñ$Ô$ˆØ�ŠÐ(Ð(Ñ*Ô*Ñ+Ô+Ð+à×'Ò'­Ñ5Ô5ˆØ×Ò�˜V™œ aÑ(Ô(Ð(Ø×Ò˜ œœÔ-¨aÔ0°*Ñ=Ô=Ð=Ð=Ð=r   c                 ó  ‡ —  G d„ d¦  «        } G d„ d¦  «        }d„ }t          ¦   «         }||_        ||_        |                     |¦  «        }‰                      |t
          ¦  «        }ˆ fd„}|                     |¦  «         |S )zŽ
        If rollback fails, L{ConnectionPool.runInteraction} raises the
        original exception and log the error of the rollback.
        c                   ó   — e Zd Zd„ Zd„ ZdS )ú^ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaisec                 ó   — d S r#   rV   r¯  s     r   rc  zgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__1  r‚  r   c                 ó    — t          d¦  «        ‚ro  rq  r   s    r   rs  zgConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback4  rt  r   Nr±  rV   r   r   ru  rÌ  0  r²  r   ru  c                   ó   — e Zd Zd„ ZdS )úWConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransactionc                 ó   — d S r#   rV   )r   ry  rf  s      r   rc  z`ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransaction.__init__8  r‚  r   N)r¯   r°   r±   rc  rV   r   r   ÚDummyTransactionrÐ  7  s#   € € € € € ðð ð ð ð r   rÒ  c                 ó    — t          d¦  «        ‚r´  r¶  )r©   s    r   r¸  zVConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.raisingFunction;  r¹  r   c                 óÚ   •— ‰                      t          ¦  «        }‰                     t          |¦  «        d¦  «         ‰                     |d         j        j        d         d¦  «         d S r»  r¼  r½  s     €r   r¿  zOConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.cbFailedE  rÀ  r   )r‘  rb  ÚtransactionFactoryre   rÁ  r·  r0   )r   ru  rÒ  r¸  ry  r2   r¿  s   `      r   Ú)test_runWithInteractionRaiseOriginalErrorz=ConnectionPoolTests.test_runWithInteractionRaiseOriginalError*  sÞ   ø€ ð	/ð 	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð	$ð 	$ð 	$õ #Ñ$Ô$ˆØ!8ˆÔØ"2ˆÔà×Ò Ñ0Ô0ˆØ×Ò˜q¥*Ñ-Ô-ˆð	Bð 	Bð 	Bð 	Bð 	Bð
 	
�Š�hÑÔÐØˆr   c                 óê   — t          d¦  «        }t          d|¬¦  «        }|                      |j        dd|j        fg¦  «         |                     ¦   «          |                      |j        ¦  «         dS )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   ry  s      r   Útest_unstartedClosez'ConnectionPoolTests.test_unstartedCloseM  ss   € õ
 ˜uÑ%Ô%ˆÝÐ8ÀWÐMÑMÔMˆà×Ò˜Ô)¨W°iÀÄÐ,MÐ+NÑOÔOÐOØ�
Š
‰Œˆà×Ò˜Ô)Ñ*Ô*Ð*Ð*Ð*r   c                 óê   — t          d¦  «        }t          d|¬¦  «        }|                      |j        dd|j        fg¦  «         |                     ¦   «          |                      |j        ¦  «         dS )z�
        If L{ConnectionPool.close} is called after it has been started, but
        not by its shutdown trigger, the shutdown trigger is cancelled.
        TrØ  rÙ  ÚduringÚshutdownN)r–  r   rŠ   r™  Ú
finalCloser%   rÚ   rÜ  s      r   Útest_startedClosez%ConnectionPoolTests.test_startedCloseZ  ss   € õ
 ˜tÑ$Ô$ˆÝÐ8ÀWÐMÑMÔMˆà×Ò˜Ô)¨X°zÀ4Ä?Ð,SÐ+TÑUÔUÐUØ�
Š
‰Œˆà×Ò˜Ô)Ñ*Ô*Ð*Ð*Ð*r   N)	r¯   r°   r±   r²   rÂ  rÉ  rÖ  rÝ  râ  rV   r   r   rª  rª  ø  sj   € € € € € ðð ðð ð ð:>ð >ð >ð !ð !ð !ð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   r?   r   r¹   rÝ   rÿ   r  r  r)  r0  r9  r[  rW  r_  rR  rj  r}  r‰  r‘  r–  rª  rV   r   r   ú<module>ré     sä  ððð ð 
€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø *Ð *Ð *Ð *Ð *Ð *Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø "Ð "Ð "Ð "Ð "Ð "ðÐ ðYð Yð Yð Yð Yñ Yô Yð YðxMð Mð Mð Mð Mñ Mô Mð Mð`>$ð >$ð >$ð >$ð >$ñ >$ô >$ð >$ðBð ð ð ð �ñ ô ð ð4ð ð ð ð ˜ñ ô ð ð4ð ð ð ð �ñ ô ð ð8ð ð ð ð �ñ ô ð ð8ð ð ð ð �_ñ ô ð ð61ð 1ð 1ð 1ð 1˜ñ 1ô 1ð 1ðhð ð ðH €ˆ^˜]¨G¨G©I¬IÑ 6Ô 6Ð 6ð €ÐÐ 0°'°'±)´)Ñ <Ô <Ð <ðð ð ð ð ñ ô ð ð6>ð >ð >ð >ð >�hÔ'ñ >ô >ð >ð.>ð >ð >ð >ð >�xÔ(ñ >ô >ð >ð<"ð "ð "ð "ð "ñ "ô "ð "ð ð  ð  ð  ð  ˜.ñ  ô  ð  ð%ð %ð %ð %ð %ñ %ô %ð %ð<m+ð m+ð m+ð m+ð m+˜(Ô+ñ m+ô m+ð m+ð m+ð m+r   