§
    Ètºfp8  ã                   óÚ  — d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9  ed¬¦  «         G d„ de:¦  «        ¦   «         Z; G d„ de¦  «        Z< G d„ de¦  «        Z= e
d ¦  «        Z>ee=gee>         f         Z? G d!„ d"e!¦  «        Z@ G d#„ d$e!¦  «        ZA ee¦  «         G d%„ d&¦  «        ¦   «         ZB ee¦  «         G d'„ d(¦  «        ¦   «         ZC G d)„ d*e:¦  «        ZD G d+„ d,e¦  «        ZEdS )-z:
This module implements the worker classes.

@since: 12.3
é    N)ÚAnyÚ	AwaitableÚCallableÚDictÚListÚOptionalÚTextIOÚTypeVar)ÚTestCase)Úimplementer)Úfrozen)ÚProtocolÚ	TypedDict)ÚDeferredÚDeferredList)ÚProcessDone)ÚIAddressÚ
ITransport)ÚProcessProtocol)ÚLogger)ÚAMP)ÚFailure)ÚFilePath)ÚnamedObject)Ú_WORKER_AMP_STDINÚ_WORKER_AMP_STDOUTÚmanagercommandsÚworkercommands)ÚWorkerReporter)Ú
TestResult)Ú
TestLoaderÚ
TrialSuite)ÚTodoé   )Ú
StreamOpenÚStreamReceiverÚStreamWriteF)Úauto_excc                   ó   — e Zd ZU dZeed<   dS )ÚWorkerExceptionz‰
    An exception was reported by a test running in a worker process.

    @ivar message: An error message describing the exception.
    ÚmessageN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__© ó    úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/trial/_dist/worker.pyr*   r*   +   s%   € € € € € € ðð ð €L€L�L€L€Lr3   r*   c                   ó   — e Zd ZU dZeed<   dS )Ú	RunResultzB
    Represent the result of a L{workercommands.Run} command.
    ÚsuccessN)r,   r-   r.   r/   Úboolr1   r2   r3   r4   r6   r6   6   s%   € € € € € € ðð ð €M€M�M€M€Mr3   r6   c                   ó&   — e Zd ZdZdededefd„ZdS )ÚWorkerz)
    An object that can run actions.
    ÚcaseÚresultÚreturnc              ƒ   ó
   K  — dS )z"
        Run a test case.
        Nr2   )Úselfr;   r<   s      r4   Úrunz
Worker.runC   s
   è è € € € r3   N)r,   r-   r.   r/   r   r    r6   r@   r2   r3   r4   r:   r:   >   sG   € € € € € ðð ð˜hð °
ð ¸yð ð ð ð ð ð r3   r:   Ú_Tc                   óŒ   — e Zd ZdZ e¦   «         Zd	d„Zej        j	        de
defd„¦   «         Zej        j	        d„ ¦   «         ZdS )
ÚWorkerProtocolz5
    The worker-side trial distributed protocol.
    Fc                 ób   — t          ¦   «         | _        t          | ¦  «        | _        || _        d S ©N)r!   Ú_loaderr   Ú_resultÚ_forceGarbageCollection)r?   ÚforceGarbageCollections     r4   Ú__init__zWorkerProtocol.__init__T   s*   € Ý!‘|”|ˆŒÝ% dÑ+Ô+ˆŒØ'=ˆÔ$Ð$Ð$r3   ÚtestCaser=   c              ƒ   ó  K  — | j                              ¦   «         5 }| j                             |¦  «        }t	          |g| j        ¦  «        }|                     | j         ¦  «         ddd¦  «         n# 1 swxY w Y   d}t          |d¬¦  «        ƒ d{V —†D ]s\  }}|rŒd}| j         	                    d||¬¦  «         	 | j          
                    ||¦  «        ƒ d{V —† ŒJ# t          $ r | j         	                    d¦  «         Y Œpw xY wd|iS )	z*
        Run a test case by name.
        NT)ÚconsumeErrorsFz Result reporting for {id} failed)ÚfailureÚidz5Additionally, reporting the reporting failure failed.r7   )rG   ÚgatherReportingResultsrF   Ú
loadByNamer"   rH   r@   r   ÚloggerrN   ÚaddErrorFallibleÚBaseException)r?   rK   Úresultsr;   ÚsuiteÚallSucceededr7   r<   s           r4   r@   zWorkerProtocol.runY   s»  è è € ð
 Œ\×0Ò0Ñ2Ô2ð 	$°gØ”<×*Ò*¨8Ñ4Ô4ˆDÝ ˜v tÔ'CÑDÔDˆEØ�IŠI�d”lÑ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð
 ˆÝ%1°'ÈÐ%NÑ%NÔ%NÐNÐNÐNÐNÐNÐNð 	ð 	‰OˆG�VØð àð !ˆLð ŒK×ÒØ2àØð	  ñ ô ð ðØ”l×3Ò3Øàñô ð ð ð ð ð ð ð ð øõ
 !ð ð ð ð ”×#Ò#ØKñô ð ð ð ð	øøøð ˜<Ð(Ð(s$   œAA3Á3A7Á:A7Â?!C!Ã!$DÄDc                 ó2   — t          j        |¦  «         ddiS )zb
        Set up the worker, moving into given directory for tests to run in
        them.
        r7   T)ÚosÚchdir)r?   Ú	directorys     r4   ÚstartzWorkerProtocol.start†   s   € õ 	Œ�ÑÔÐØ˜4Ð Ð r3   N)F)r,   r-   r.   r/   r   rR   rJ   r   ÚRunÚ	responderr0   r6   r@   ÚStartr\   r2   r3   r4   rC   rC   M   s—   € € € € € ðð ð ˆV‰XŒX€Fð>ð >ð >ð >ð
 ÔÔ!ð*) #ð *)¨)ð *)ð *)ð *)ñ "Ô!ð*)ðX ÔÔ#ð!ð !ñ $Ô#ð!ð !ð !r3   rC   c                   óB  ‡ — e Zd ZdZdˆ fd„	Zej        d„ ¦   «         Zej        d„ ¦   «         Z	e
j        j        d„ ¦   «         Zdeded	ee         d
efd„Ze
j        j        dedededed
eeef         f
d„¦   «         Ze
j        j        dedededed
eeef         f
d„¦   «         Ze
j        j        d„ ¦   «         Ze
j        j        dededee         d
eeef         fd„¦   «         Ze
j        j        d„ ¦   «         Ze
j         j        d„ ¦   «         Z!de"de#d
e$fd„Z%d„ Z&ˆ xZ'S )ÚLocalWorkerAMPz7
    Local implementation of the manager commands.
    Nc                 ór   •— t          ¦   «                              ||¦  «         t          ¦   «         | _        d S rE   )ÚsuperrJ   r&   Ú_streams)r?   ÚboxReceiverÚlocatorÚ	__class__s      €r4   rJ   zLocalWorkerAMP.__init__•   s.   ø€ Ý‰Œ×Ò˜ gÑ.Ô.Ð.Ý&Ñ(Ô(ˆŒˆˆr3   c                 ó8   — d| j                              ¦   «         iS )NÚstreamId)rd   Úopen©r?   s    r4   Ú
streamOpenzLocalWorkerAMP.streamOpen™   s   € à˜DœM×.Ò.Ñ0Ô0Ð1Ð1r3   c                 ó<   — | j                              ||¦  «         i S rE   )rd   Úwrite)r?   ri   Údatas      r4   ÚstreamWritezLocalWorkerAMP.streamWrite�   s   € àŒ×Ò˜H dÑ+Ô+Ð+Øˆ	r3   c                 óH   — | j                              | j        ¦  «         ddiS )z0
        Add a success to the reporter.
        r7   T)rG   Ú
addSuccessÚ	_testCase)r?   ÚtestNames     r4   rr   zLocalWorkerAMP.addSuccess¢   s'   € ð
 	Œ×Ò ¤Ñ/Ô/Ð/Ø˜4Ð Ð r3   ÚerrorÚ
errorClassÚframesr=   c           
      ó  — t          |¦  «        }t          ||¦  «        }t          dt          |¦  «        d¦  «        D ]F}|j                             ||         ||dz            t          ||dz            ¦  «        g g f¦  «         ŒG|S )a   
        Helper to build a C{Failure} with some traceback.

        @param error: An C{Exception} instance.

        @param errorClass: The class name of the C{error} class.

        @param frames: A flat list of strings representing the information need
            to approximatively rebuild C{Failure} frames.

        @return: A L{Failure} instance with enough information about a test
           error.
        r   é   r$   é   )r   r   ÚrangeÚlenrw   ÚappendÚint)r?   ru   rv   rw   Ú	errorTyperN   Úis          r4   Ú_buildFailurezLocalWorkerAMP._buildFailureª   s‘   € õ&   
Ñ+Ô+ˆ	Ý˜% Ñ+Ô+ˆÝ�q�#˜f™+œ+ qÑ)Ô)ð 	ð 	ˆAØŒN×!Ò!Ø˜”˜F 1 q¡5œM­3¨v°a¸!±e¬}Ñ+=Ô+=¸rÀ2ÐFñô ð ð ð ˆr3   rt   ÚerrorStreamIdÚframesStreamIdc                 óZ  — d                      | j                             |¦  «        ¦  «                             d¦  «        }d„ | j                             |¦  «        D ¦   «         }|                      t          |¦  «        ||¦  «        }| j                             | j        |¦  «         ddiS )a¯  
        Add an error to the reporter.

        @param errorStreamId: The identifier of a stream over which the text
            of this error was previously completely sent to the peer.

        @param framesStreamId: The identifier of a stream over which the lines
            of the traceback for this error were previously completely sent to
            the peer.

        @param error: A message describing the error.
        r3   úutf-8c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©r…   ©Údecode©Ú.0Úframes     r4   ú
<listcomp>z+LocalWorkerAMP.addError.<locals>.<listcomp>Ú   ó1   € ð 
ð 
ð 
Ø&+ˆE�LŠL˜Ñ!Ô!ð
ð 
ð 
r3   r7   T)	Újoinrd   Úfinishr‰   r�   r*   rG   ÚaddErrorrs   )r?   rt   rv   r‚   rƒ   ru   rw   rN   s           r4   r‘   zLocalWorkerAMP.addErrorÅ   s§   € ð( —’˜œ×-Ò-¨mÑ<Ô<Ñ=Ô=×DÒDÀWÑMÔMˆð
ð 
Ø/3¬}×/CÒ/CÀNÑ/SÔ/Sð
ñ 
ô 
ˆð ×$Ò$¥_°UÑ%;Ô%;¸ZÈÑPÔPˆØŒ×Ò˜dœn¨gÑ6Ô6Ð6Ø˜4Ð Ð r3   ÚfailStreamIdÚ	failClassc                 óZ  — d                      | j                             |¦  «        ¦  «                             d¦  «        }d„ | j                             |¦  «        D ¦   «         }|                      t          |¦  «        ||¦  «        }| j                             | j        |¦  «         ddiS )az  
        Add a failure to the reporter.

        @param failStreamId: The identifier of a stream over which the text of
            this failure was previously completely sent to the peer.

        @param framesStreamId: The identifier of a stream over which the lines
            of the traceback for this error were previously completely sent to the
            peer.
        r3   r…   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS r‡   rˆ   rŠ   s     r4   r�   z-LocalWorkerAMP.addFailure.<locals>.<listcomp>ø   rŽ   r3   r7   T)	r�   rd   r�   r‰   r�   r*   rG   Ú
addFailurers   )r?   rt   r’   r“   rƒ   Úfailrw   rN   s           r4   r–   zLocalWorkerAMP.addFailureå   s§   € ð$ �xŠx˜œ×,Ò,¨\Ñ:Ô:Ñ;Ô;×BÒBÀ7ÑKÔKˆð
ð 
Ø/3¬}×/CÒ/CÀNÑ/SÔ/Sð
ñ 
ô 
ˆð ×$Ò$¥_°TÑ%:Ô%:¸IÀvÑNÔNˆØŒ×Ò ¤°Ñ8Ô8Ð8Ø˜4Ð Ð r3   c                 óJ   — | j                              | j        |¦  «         ddiS )z-
        Add a skip to the reporter.
        r7   T)rG   ÚaddSkiprs   )r?   rt   Úreasons      r4   r™   zLocalWorkerAMP.addSkip   s)   € ð
 	Œ×Ò˜Tœ^¨VÑ4Ô4Ð4Ø˜4Ð Ð r3   Útodoc                 óò   — d                      | j                             |¦  «        ¦  «                             d¦  «        }t	          |€dn|¦  «        }| j                             | j        ||¦  «         ddiS )zÎ
        Add an expected failure to the reporter.

        @param errorStreamId: The identifier of a stream over which the text
            of this error was previously completely sent to the peer.
        r3   r…   Nz	<unknown>r7   T)r�   rd   r�   r‰   r#   rG   ÚaddExpectedFailurers   )r?   rt   r‚   r›   ru   Ú_todos         r4   r�   z!LocalWorkerAMP.addExpectedFailure  so   € ð —’˜œ×-Ò-¨mÑ<Ô<Ñ=Ô=×DÒDÀWÑMÔMˆÝ D L�[�[°dÑ;Ô;ˆØŒ×'Ò'¨¬¸¸uÑEÔEÐEØ˜4Ð Ð r3   c                 óJ   — | j                              | j        |¦  «         ddiS )z<
        Add an unexpected success to the reporter.
        r7   T)rG   ÚaddUnexpectedSuccessrs   )r?   rt   r›   s      r4   r    z#LocalWorkerAMP.addUnexpectedSuccess  s)   € ð
 	Œ×)Ò)¨$¬.¸$Ñ?Ô?Ð?Ø˜4Ð Ð r3   c                 óv   — | j                              |dz   ¦  «         | j                              ¦   «          ddiS )z4
        Print test output from the worker.
        ú
r7   T)Ú_testStreamrn   Úflush)r?   Úouts     r4   Ú	testWritezLocalWorkerAMP.testWrite  s?   € ð
 	Ô×Ò˜s T™zÑ*Ô*Ð*ØÔ×ÒÑ Ô Ð Ø˜4Ð Ð r3   rK   r<   c              ƒ   óB  K  — || _         || _        | j                             |¦  «         |                     ¦   «         }	 |                      t
          j        |¬¦  «        ƒ d{V —†	 | j                             |¦  «         S # | j                             |¦  «         w xY w)z
        Run a test.
        )rK   N)rs   rG   Ú	startTestrO   Ú
callRemoter   r]   ÚstopTest)r?   rK   r<   Ú
testCaseIds       r4   r@   zLocalWorkerAMP.run(  sž   è è € ð "ˆŒØˆŒØŒ×Ò˜xÑ(Ô(Ð(Ø—[’[‘]”]ˆ
ð	,ØŸš­Ô);Àj˜ÑQÔQÐQÐQÐQÐQÐQÐQÐQàŒL×!Ò! (Ñ+Ô+Ð+Ð+øˆDŒL×!Ò! (Ñ+Ô+Ð+Ð+øøøs   Á &B ÂBc                 ó   — || _         dS )z?
        Set the stream used to log output from tests.
        N)r£   )r?   Ústreams     r4   ÚsetTestStreamzLocalWorkerAMP.setTestStream5  s   € ð "ˆÔÐÐr3   )NN)(r,   r-   r.   r/   rJ   r%   r^   rl   r'   rp   r   Ú
AddSuccessrr   r*   r0   r   r   r�   ÚAddErrorr~   r   r8   r‘   Ú
AddFailurer–   ÚAddSkipr™   ÚAddExpectedFailurer   r�   ÚAddUnexpectedSuccessr    Ú	TestWriter¦   r   r    r6   r@   r®   Ú__classcell__)rg   s   @r4   ra   ra   �   s”  ø€ € € € € ðð ð)ð )ð )ð )ð )ð )ð Ôð2ð 2ñ Ôð2ð Ôðð ñ Ôðð ÔÔ)ð!ð !ñ *Ô)ð!ðàðð ðð �S”	ð	ð
 
ðð ð ð ð6 ÔÔ'ð!àð!ð ð!ð ð	!ð
 ð!ð 
ˆc�4ˆiŒð!ð !ð !ñ (Ô'ð!ð> ÔÔ)ð!àð!ð ð!ð ð	!ð
 ð!ð 
ˆc�4ˆiŒð!ð !ð !ñ *Ô)ð!ð4 ÔÔ&ð!ð !ñ 'Ô&ð!ð Ô'Ô1ð!Øð!Ø,/ð!Ø7?À´}ð!à	ˆc�4ˆiŒð!ð !ð !ñ 2Ô1ð!ð Ô)Ô3ð!ð !ñ 4Ô3ð!ð ÔÔ(ð!ð !ñ )Ô(ð!ð, (ð ,°Jð ,À9ð ,ð ,ð ,ð ,ð"ð "ð "ð "ð "ð "ð "r3   ra   c                   ó   — e Zd ZdZdS )ÚLocalWorkerAddressz
    A L{IAddress} implementation meant to provide stub addresses for
    L{ITransport.getPeer} and L{ITransport.getHost}.
    N©r,   r-   r.   r/   r2   r3   r4   r¸   r¸   <  s   € € € € € ðð ð ð r3   r¸   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚLocalWorkerTransportzi
    A stub transport implementation used to support L{AMP} over a
    L{ProcessProtocol} transport.
    c                 ó   — || _         d S rE   )Ú
_transport)r?   Ú	transports     r4   rJ   zLocalWorkerTransport.__init__K  s   € Ø#ˆŒˆˆr3   c                 óF   — | j                              t          |¦  «         dS )z,
        Forward data to transport.
        N©r½   ÚwriteToChildr   ©r?   ro   s     r4   rn   zLocalWorkerTransport.writeN  s#   € ð 	Œ×$Ò$Õ%6¸Ñ=Ô=Ð=Ð=Ð=r3   c                 óP   — |D ]"}| j                              t          |¦  «         Œ#dS )zP
        Emulate C{writeSequence} by iterating data in the C{sequence}.
        NrÀ   )r?   Úsequencero   s      r4   ÚwriteSequencez"LocalWorkerTransport.writeSequenceT  s=   € ð ð 	Bð 	BˆDØŒO×(Ò(Õ):¸DÑAÔAÐAÐAð	Bð 	Br3   c                 ó8   — | j                              ¦   «          dS )z'
        Closes the transport.
        N)r½   ÚloseConnectionrk   s    r4   rÇ   z#LocalWorkerTransport.loseConnection[  s   € ð 	Œ×&Ò&Ñ(Ô(Ð(Ð(Ð(r3   c                 ó   — t          ¦   «         S ©z:
        Return a L{LocalWorkerAddress} instance.
        ©r¸   rk   s    r4   ÚgetHostzLocalWorkerTransport.getHosta  ó   € õ "Ñ#Ô#Ð#r3   c                 ó   — t          ¦   «         S rÉ   rÊ   rk   s    r4   ÚgetPeerzLocalWorkerTransport.getPeerg  rÌ   r3   N)
r,   r-   r.   r/   rJ   rn   rÅ   rÇ   rË   rÎ   r2   r3   r4   r»   r»   D  s{   € € € € € ðð ð
$ð $ð $ð>ð >ð >ðBð Bð Bð)ð )ð )ð$ð $ð $ð$ð $ð $ð $ð $r3   r»   c                   ó   — e Zd ZdZdS )Ú
NotRunningzN
    An operation was attempted on a worker process which is not running.
    Nr¹   r2   r3   r4   rÐ   rÐ   n  s   € € € € € ðð ð ð r3   rÐ   c                   óh   — e Zd ZdZdedee         defd„Zdd„Z	d	„ Z
d
„ Zdeddfd„Zd„ Zd„ Zd„ ZdS )ÚLocalWorkeraL  
    Local process worker protocol. This worker runs as a local process and
    communicates via stdin/out.

    @ivar _ampProtocol: The L{AMP} protocol instance used to communicate with
        the worker.

    @ivar _logDirectory: The directory where logs will reside.

    @ivar _logFile: The main log file for tests output.
    ÚampProtocolÚlogDirectoryÚlogFilec                 óV   — || _         || _        || _        t          ¦   «         | _        d S rE   )Ú_ampProtocolÚ_logDirectoryÚ_logFiler   ÚendDeferred)r?   rÓ   rÔ   rÕ   s       r4   rJ   zLocalWorker.__init__�  s-   € ð (ˆÔØ)ˆÔØˆŒÝ+3©:¬:ˆÔÐÐr3   r=   Nc              ƒ   ó´   K  — | j         €t          ¦   «         ‚| j        }| j                              t          ¦  «         	 |ƒ d{V —† dS # t
          $ r Y dS w xY w)z3
        Cause the worker process to exit.
        N)r¾   rÐ   rÚ   ÚcloseChildFDr   r   )r?   rÚ   s     r4   ÚexitzLocalWorker.exitŒ  s~   è è € ð Œ>Ð!Ý‘,”,ÐàÔ&ˆØŒ×#Ò#Õ$5Ñ6Ô6Ð6ð	ØÐÐÐÐÐÐÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøs   ¿A	 Á	
AÁAc                 ó&  — | j                              t          | j        ¦  «        ¦  «         | j                             d¬¦  «         | j                             d¦  «                             d¦  «        | _        | j                             d¦  «                             d¦  «        | _	        | j          
                    | j        ¦  «         | j                              t          j        | j        j        ¬¦  «        }|                     d„ ¦  «         dS )	zL
        When connection is made, create the AMP protocol instance.
        T)ÚignoreExistingDirectoryzout.logÚwzerr.log)r[   c                 ó   — d S rE   r2   )Úxs    r4   ú<lambda>z,LocalWorker.connectionMade.<locals>.<lambda>©  s   € ˜t€ r3   N)r×   ÚmakeConnectionr»   r¾   rØ   ÚmakedirsÚchildrj   Ú_outLogÚ_errLogr®   rÙ   r©   r   r_   ÚpathÚ
addErrback)r?   Úds     r4   ÚconnectionMadezLocalWorker.connectionMadeš  sí   € ð 	Ô×(Ò(Õ)=¸d¼nÑ)MÔ)MÑNÔNÐNØÔ×#Ò#¸DÐ#ÑAÔAÐAØÔ)×/Ò/°	Ñ:Ô:×?Ò?ÀÑDÔDˆŒØÔ)×/Ò/°	Ñ:Ô:×?Ò?ÀÑDÔDˆŒØÔ×'Ò'¨¬Ñ6Ô6Ð6ØÔ×(Ò(ÝÔ ØÔ(Ô-ð )ñ 
ô 
ˆð 	
�Š�^�^Ñ$Ô$Ð$Ð$Ð$r3   c                 óx   — | j                              ¦   «          | j                             ¦   «          d| _        dS )zk
        On connection lost, close the log files that we're managing for stdin
        and stdout.
        N)rç   Úcloserè   r¾   ©r?   rš   s     r4   ÚconnectionLostzLocalWorker.connectionLost«  s7   € ð
 	Œ×ÒÑÔÐØŒ×ÒÑÔÐØˆŒˆˆr3   rš   c                 ó˜   — |                       |¦  «         | j                              |¦  «         | j                             |¦  «         dS )z’
        When the process closes, call C{connectionLost} for cleanup purposes
        and forward the information to the C{_ampProtocol}.
        N)rð   r×   rÚ   Úcallbackrï   s     r4   ÚprocessEndedzLocalWorker.processEnded´  sL   € ð
 	×Ò˜FÑ#Ô#Ð#ØÔ×(Ò(¨Ñ0Ô0Ð0ØÔ×!Ò! &Ñ)Ô)Ð)Ð)Ð)r3   c                 ó:   — | j                              |¦  «         dS )z8
        Send data received from stdout to log.
        N)rç   rn   rÂ   s     r4   ÚoutReceivedzLocalWorker.outReceived½  s    € ð
 	Œ×Ò˜4Ñ Ô Ð Ð Ð r3   c                 ó:   — | j                              |¦  «         dS )z*
        Write error data to log.
        N)rè   rn   rÂ   s     r4   ÚerrReceivedzLocalWorker.errReceivedÄ  s    € ð 	Œ×Ò˜4Ñ Ô Ð Ð Ð r3   c                 ó€   — |t           k    r| j                             |¦  «         dS t          j        | ||¦  «         dS )zT
        Handle data received on the specific pipe for the C{_ampProtocol}.
        N)r   r×   ÚdataReceivedr   ÚchildDataReceived)r?   ÚchildFDro   s      r4   rú   zLocalWorker.childDataReceivedÊ  sH   € ð Õ(Ò(Ð(ØÔ×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0åÔ-¨d°G¸TÑBÔBÐBÐBÐBr3   )r=   N)r,   r-   r.   r/   ra   r   r   r	   rJ   rÝ   rì   rð   r   ró   rõ   r÷   rú   r2   r3   r4   rÒ   rÒ   t  sØ   € € € € € ð
ð 
ð	6à#ð	6ð ˜s”mð	6ð ð		6ð 	6ð 	6ð 	6ðð ð ð ð%ð %ð %ð"ð ð ð* 7ð *¨tð *ð *ð *ð *ð!ð !ð !ð!ð !ð !ðCð Cð Cð Cð Cr3   rÒ   )Fr/   rY   Útypingr   r   r   r   r   r   r	   r
   Úunittestr   Úzope.interfacer   Úattrsr   Útyping_extensionsr   r   Útwisted.internet.deferr   r   Útwisted.internet.errorr   Útwisted.internet.interfacesr   r   Útwisted.internet.protocolr   Útwisted.loggerr   Útwisted.protocols.ampr   Útwisted.python.failurer   Útwisted.python.filepathr   Útwisted.python.reflectr   Útwisted.trial._distr   r   r   r   Ú"twisted.trial._dist.workerreporterr   Útwisted.trial.reporterr    Útwisted.trial.runnerr!   r"   Útwisted.trial.unittestr#   r­   r%   r&   r'   Ú	Exceptionr*   r6   r:   rA   ÚWorkerActionrC   ra   r¸   r»   rÐ   rÒ   r2   r3   r4   ú<module>r     s  ððð ð 
€	€	€	Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ð €�ÐÑÔðð ð ð ð �iñ ô ñ Ôððð ð ð ð �	ñ ô ð ðð ð ð ð ˆXñ ô ð ð €WˆT�]„]€Ø˜˜ )¨B¤-Ð/Ô0€ð@!ð @!ð @!ð @!ð @!�Sñ @!ô @!ð @!ðFi"ð i"ð i"ð i"ð i"�Sñ i"ô i"ð i"ðX €ˆXÑÔðð ð ð ð ñ ô ñ Ôðð €ˆZÑÔð&$ð &$ð &$ð &$ð &$ñ &$ô &$ñ Ôð&$ðRð ð ð ð �ñ ô ð ð]Cð ]Cð ]Cð ]Cð ]C�/ñ ]Cô ]Cð ]Cð ]Cð ]Cr3   