+
    Dfj8                        R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
HtHtHtHtHtHtHt ^ RIHtHtHt ^ RIt^ RIHt ^ RIHtHtHtHtHtH t H!t! ^ R	I"H#t# ^R
I$H%t% ^RI&H't' ^RI(H)t)H*t* ^RI%H+t+  ! R R]PX                  PZ                  P\                  4      t/]! RR7       ! R R]+4      4       t0 ! R R])4      t1 ! R R4      t2 ! R R4      t3 ! R R4      t4 ! R R4      t5R# )z2
Tests for L{twisted.application.runner._runner}.
N)StringIO)SIGTERM)TracebackType)	AnyIterableListOptionalTextIOTupleTypeUnioncast)Factoryattribattrs)MemoryReactor)FileLogObserverFilteringLogObserverILogObserverLogBeginnerLogLevelLogLevelFilterPredicateLogPublisher)FilePath)_runner)
ExitStatus)NonePIDFilePIDFile)Runnerc                   ^  a  ] tR t^"t o RtR&V 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! lR" ltR&V 3R# lR$ lltR%tV tR# )'RunnerTestsz
Tests for L{Runner}.
Nc                F   < V ^8  d   QhRS[ S[,          RS[S[,          /# )   contentreturn)r   bytesr   str)format__classdict__s   "M/usr/lib/python3/dist-packages/twisted/application/runner/test/test_runner.py__annotate__RunnerTests.__annotate__'   s#       8C=     c                b    \        V P                  4       4      pVe   VP                  V4       V# N)r   mktemp
setContent)selfr#   filePaths   && r)   r2   RunnerTests.filePath'   s+    DKKM*(r,   c                   < V ^8  d   QhRR/# r"   r$   N )r'   r(   s   "r)   r*   r+   -   s      I  It  Ir,   c                   \        4       V n        \        4       V n        V P	                  \
        R V P                  4       V P	                  \
        RV P                  4       RV n        V P                   R2P                  4       V n        \        4       V n
        \        4       V n        \        V P                  V P                  4      V n        \        4       V n        \!        4       V n        \%        V P"                  V P                  P                  V P                  V P                  4      V n        V P	                  \
        RV P                  4       V P	                  \
        RV P&                  4       R# )exitkilli9  
stderrglobalLogBeginnerN)	DummyExitr8   	DummyKillr9   patchr   pidencodepidFileContentr   stdoutr;   DummyStandardIOstdioDummyWarningsModulewarningsr   globalLogPublisherr   r<   r1   s   &r)   setUpRunnerTests.setUp-   s     K	K	

7FDII.

7FDII. !%
"o446
 jj$T[[$++>
+-"..!,##JJJJMM	"
 	

7Hdkk2

7/1G1GHr,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   O   s     
 
 
r,   c                    \        \        4       R7      pVP                  4        V P                  VP                  . RO4       R# )z4
L{Runner.run} calls the expected methods in order.
reactorN)killIfRequestedstartLoggingstartReactorreactorExited)DummyRunnerr   runassertEqualcalledMethodsr1   runners   & r)   test_runInOrderRunnerTests.test_runInOrderO   s5     ]_5

  	
r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   `   s     ( (T (r,   c                <   \        4       p\        \        4       VR7      pV P                  VP                  4       V P                  VP
                  4       VP                  4        V P                  VP                  4       V P                  VP
                  4       R# )z+
L{Runner.run} uses the provided PID file.
rO   pidFileN)DummyPIDFiler   r   assertFalseenteredexitedrU   
assertTruer1   r_   rY   s   &  r)   test_runUsesPIDFileRunnerTests.test_runUsesPIDFile`   sf     .A)(

('r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   p   s     @ @ @r,   c                \   \        V P                  V P                  4      4      pR Vn        \	        \        4       VR7      pVP                  4        V P                  V P                  P                  \        P                  4       V P                  V P                  P                  R4       R# )z
L{Runner.run} exits with L{ExitStatus.EX_USAGE} and the expected
message if a process is already running that corresponds to the given
PID file.
c                      R # Tr6   r6   r,   r)   <lambda>4RunnerTests.test_runAlreadyRunning.<locals>.<lambda>w   s    Dr,   r^   zAlready running.N)r   r2   rB   	isRunningr   r   rU   rV   r8   statusr   	EX_CONFIGmessagere   s   &  r)   test_runAlreadyRunning"RunnerTests.test_runAlreadyRunningp   sw     $--(;(;<=(A

)):+?+?@**,>?r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     	+ 	+t 	+r,   c                    \        \        4       R7      pVP                  4        V P                  V P                  P
                  . 4       V P                  V P                  P                  4       R# )zj
L{Runner.killIfRequested} when C{kill} is false doesn't exit and
doesn't indiscriminately murder anyone.
rN   N)	r   r   rP   rV   r9   callsra   r8   rc   rX   s   & r)   test_killNotRequested!RunnerTests.test_killNotRequested   sL    
 0 "-))*r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     F F$ Fr,   c                P   \        \        4       RR7      pVP                  4        V P                  V P                  P
                  . 4       V P                  V P                  P                  \        P                  4       V P                  V P                  P                  R4       R# )z
L{Runner.killIfRequested} when C{kill} is true but C{pidFile} is
L{nonePIDFile} exits with L{ExitStatus.EX_USAGE} and the expected
message; and also doesn't indiscriminately murder anyone.
T)rO   r9   zNo PID file specified.N)r   r   rP   rV   r9   rv   r8   ro   r   EX_USAGErq   rX   s   & r)    test_killRequestedWithoutPIDFile,RunnerTests.test_killRequestedWithoutPIDFile   sq     d; "-)):+>+>?**,DEr,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     6 6t 6r,   c                   \        V P                  V P                  4      4      p\        \	        4       RVR7      pVP                  4        V P                  V P                  P                  V P                  \        3.4       V P                  V P                  P                  \        P                  4       V P                  V P                  P                   R4       R# )z
L{Runner.killIfRequested} when C{kill} is true and given a C{pidFile}
performs a targeted killing of the appropriate process.
TrO   r9   r_   N)r   r2   rB   r   r   rP   rV   r9   rv   r@   r   r8   ro   r   EX_OKassertIdenticalrq   re   s   &  r)   test_killRequestedWithPIDFile)RunnerTests.test_killRequestedWithPIDFile   s    
 $--(;(;<=dGL DHHg+>*?@)):+;+;<TYY..5r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     H Ht Hr,   c                R   \        V P                  R4      4      pR R lpW!n        \        \	        4       RVR7      pVP                  4        V P                  V P                  P                  \        P                  4       V P                  V P                  P                  R4       R# )z}
L{Runner.killIfRequested} when C{kill} is true and given a C{pidFile}
that it can't read exits with L{ExitStatus.EX_IOERR}.
Nc                $    V ^8  d   QhR\         /# )r"   r$   int)r'   s   "r)   r*   GRunnerTests.test_killRequestedWithPIDFileCantRead.<locals>.__annotate__   s     	= 	=c 	=r,   c                  6    \        \        P                  R 4      h)zPermission denied)OSErrorerrnoEACCESr6   r,   r)   read?RunnerTests.test_killRequestedWithPIDFileCantRead.<locals>.read   s    %,,(;<<r,   Tr   zUnable to read PID file.)r   r2   r   r   r   rP   rV   r8   ro   r   EX_IOERRrq   )r1   r_   r   rY   s   &   r)   %test_killRequestedWithPIDFileCantRead1RunnerTests.test_killRequestedWithPIDFileCantRead   sz    
 $---.	= dGL )):+>+>?**,FGr,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     
A 
AD 
Ar,   c                :   \        V P                  R4      4      p\        \        4       RVR7      pVP	                  4        V P                  V P                  P                  \        P                  4       V P                  V P                  P                  R4       R# )z
L{Runner.killIfRequested} when C{kill} is true and given a C{pidFile}
containing no value exits with L{ExitStatus.EX_DATAERR}.
r,   Tr   Invalid PID file.Nr   r2   r   r   rP   rV   r8   ro   r   
EX_DATAERRrq   re   s   &  r)   "test_killRequestedWithPIDFileEmpty.RunnerTests.test_killRequestedWithPIDFileEmpty   sn    
 $--,-dGL )):+@+@A**,?@r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     
A 
At 
Ar,   c                :   \        V P                  R4      4      p\        \        4       RVR7      pVP	                  4        V P                  V P                  P                  \        P                  4       V P                  V P                  P                  R4       R# )z
L{Runner.killIfRequested} when C{kill} is true and given a C{pidFile}
containing a non-integer value exits with L{ExitStatus.EX_DATAERR}.
s    ** totally not a number, dude **Tr   r   Nr   re   s   &  r)   %test_killRequestedWithPIDFileNotAnInt1RunnerTests.test_killRequestedWithPIDFileNotAnInt   so    
 $--(KLMdGL )):+@+@A**,?@r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+      s     K8 K84 K8r,   c                  aaa \        4       p ! V3R lR4      oV P                  \        RS! 4       4        ! V3R lR\        4      oV P                  \        RS4        ! V3R lR\        4      o\        \        4       \        P                  VSR	7      pVP                  4        V P                  \        SP                  4      ^4       V P                  SP                  ^ ,          \        4       V P                  \        SP                  4      ^4       V P                  SP                  ^ ,          \        4       V P!                  SP                  ^ ,          P"                  \        P                  4       \%        SSP&                  4      pV P                  VS4       V P!                  VP(                  V4       R
# )z
L{Runner.startLogging} sets up a filtering observer with a log level
predicate set to the given log level that contains a file observer of
the given type which writes to the given file.
c                   J   <a  ] tR t^t o . tV 3R lV3R lltV 3R ltRtV tR# )2RunnerTests.test_startLogging.<locals>.LogBeginnerc                4   < V ^8  d   QhRS[ S[,          RR/# )r"   	observersr$   N)r   r   )r'   r(   s   "r)   r*   ?RunnerTests.test_startLogging.<locals>.LogBeginner.__annotate__   s      8 80F 84 8r,   c                (   < \        V4      Sn        R # r.   )listr   )r1   r   r   s   &&r)   beginLoggingToARunnerTests.test_startLogging.<locals>.LogBeginner.beginLoggingTo   s    (,Y%r,   c                6   < V ^8  d   Qh/ S[ S[,          ;R&   # )r"   r   )r   r   )r'   r(   s   "r)   r*   r      s     L). r,   r6   N)	__name__
__module____qualname____firstlineno__r   r   __annotate_func____static_attributes____classdictcell__)r(   r   s   @r)   r   r      s     ,.I8 8  r,   r   r<   c                   d   <a  ] tR t^t o Rt. t]! ]R 4      3V 3R lV3R llltV 3R lt	Rt
V tR# )?RunnerTests.test_startLogging.<locals>.MockFilteringLogObserverNc                    R # r.   r6   )events   &r)   rl   HRunnerTests.test_startLogging.<locals>.MockFilteringLogObserver.<lambda>   s    RVr,   c                @   < V ^8  d   QhRS[ RS[S[,          RS[ RR/# )r"   observer
predicatesnegativeObserverr$   N)r   r   r   )r'   r(   s   "r)   r*   LRunnerTests.test_startLogging.<locals>.MockFilteringLogObserver.__annotate__   s9     
 
&
 %%<=
 #/	

 
r,   c                d   < VSn         \        V4      Sn        \        P                  ! WW#4       R # r.   )r   r   r   r   __init__)r1   r   r   r   MockFilteringLogObservers   &&&&r)   r   HRunnerTests.test_startLogging.<locals>.MockFilteringLogObserver.__init__   s/     5=(16::6F(3$--Jr,   c                R   < V ^8  d   Qh/ S[ S[,          ;R&   S[S[,          ;R&   # )r"   r   r   )r   r   r   r   )r'   r(   s   "r)   r*   r      s&     |,3 45: r,   r6   )r   r   r   r   r   r   r   r   r   r   r   r   )r(   r   s   @r)   r   r      s-     /3H8:J 26lDV1W	
 
	  r,   r   r   c                   J   <a  ] tR t^t o RtV 3R lV3R lltV 3R ltRtV tR# ):RunnerTests.test_startLogging.<locals>.MockFileLogObserverNc                $   < V ^8  d   QhRS[ RR/# )r"   outFiler$   Nr	   )r'   r(   s   "r)   r*   GRunnerTests.test_startLogging.<locals>.MockFileLogObserver.__annotate__   s     = = =4 =r,   c                L   < VSn         \        P                  ! W\        4       R # r.   )r   r   r   r&   )r1   r   MockFileLogObservers   &&r)   r   CRunnerTests.test_startLogging.<locals>.MockFileLogObserver.__init__   s    .5#+((<r,   c                6   < V ^8  d   Qh/ S[ S[,          ;R&   # )r"   r   )r   r	   )r'   r(   s   "r)   r*   r      s     f%, r,   r6   )	r   r   r   r   r   r   r   r   r   )r(   r   s   @r)   r   r      s     (,G= =  r,   r   )rO   defaultLogLevellogFilefileLogObserverFactoryN)r   r?   r   r   r   r   r   r   criticalrQ   rV   lenr   assertIsInstancer   r   r   r   r   r   r   )r1   r   rY   r   r   r   r   s   &   @@@r)   test_startLoggingRunnerTests.test_startLogging   sg    *
	8 	8 	

7/?	'; 	  	

724LM	=/ 	= !O$--#6	
 	 	[223Q7k33A68LM 	5@@A1E$//24K	
 	$//2BBHDUDU	

 +-E-N-NOh(;< 	X--w7r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+     s     	( 	(d 	(r,   c                    \        4       p\        VR7      pVP                  4        V P                  VP                  4       R# )zM
L{Runner.startReactor} with the C{reactor} argument runs the given
reactor.
rN   N)r   r   rR   rd   hasRun)r1   rO   rY   s   &  r)   test_startReactorWithReactor(RunnerTests.test_startReactorWithReactor  s1    
  /('r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   &  s     6 6d 6r,   c                *    V P                  RR4       R# )zx
L{Runner.startReactor} ensures that C{whenRunning} is called with
C{whenRunningArguments} when the reactor is running.
whenRunningrR   N	_testHookrI   s   &r)   test_startReactorWhenRunning(RunnerTests.test_startReactorWhenRunning&  s    
 	}n5r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   -  s     & &t &r,   c                (    V P                  R4       R# )zJ
L{Runner.whenRunning} calls C{whenRunning} with
C{whenRunningArguments}.
r   Nr   rI   s   &r)   test_whenRunningWithArguments)RunnerTests.test_whenRunningWithArguments-  s    
 	}%r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r+   4  s     ( ( (r,   c                (    V P                  R4       R# )zN
L{Runner.whenRunning} calls C{reactorExited} with
C{reactorExitedArguments}.
rS   Nr   rI   s   &r)   test_reactorExitedWithArguments+RunnerTests.test_reactorExitedWithArguments4  s    
 	'r,   c                :   < V ^8  d   QhRS[ RS[S[ ,          RR/# )r"   
methodName
callerNamer$   N)r&   r   )r'   r(   s   "r)   r*   r+   ;  s&     "6 "6C "6Xc] "6d "6r,   c                X  a Vf   Tp\        \        4       \        4       \        4       R7      p. oR V3R llpWV R2VP                  4       /p\        RR\	        4       /VB p\        Wb4      pV! 4        V P                  \        S4      ^4       V P                  S^ ,          V4       R# )a  
Verify that the named hook is run with the expected arguments as
specified by the arguments used to create the L{Runner}, when the
specified caller is invoked.

@param methodName: The name of the hook to verify.

@param callerName: The name of the method that is expected to cause the
    hook to be called.
    If C{None}, use the L{Runner} method with the same name as the
    hook.
N)abcc                (    V ^8  d   QhR\         RR/# )r"   	argumentsr$   N)object)r'   s   "r)   r*   +RunnerTests._testHook.<locals>.__annotate__N  s     	, 	,f 	, 	,r,   c                  *   < SP                  V 4       R # r.   )append)r   argumentsSeens   ,r)   hook#RunnerTests._testHook.<locals>.hookN  s      +r,   	ArgumentsrO   r6   )dictr   copyr   r   getattrrV   r   )	r1   r   r   r   r   runnerArgumentsrY   
hookCallerr   s	   &&&     @r)   r   RunnerTests._testHook;  s     #J68vx68<		, 	, l)$inn&6
  
!O
'6
 V0
]+Q/q)95r,   )
r8   r<   rH   r9   r@   rB   r;   rE   rC   rG   r.   )r   r   r   r   __doc__r2   rJ   rZ   rf   rr   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r(   s   @r)   r    r    "   s       I  ID
 
"( ( @ @	+ 	+F F6 6H H$
A 
A
A 
AK8 K8Z	( 	(6 6& &( ("6 "6 "6r,   r    T)frozenc                      a  ] tR tRt o Rt]! ]],          ]! ]	4      R7      t
V 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR ltRtV tR# )rT   i`  z[
Stub for L{Runner}.

Keep track of calls to some methods without actually doing anything.
)typedefaultc                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   DummyRunner.__annotate__j  s     5 5 5r,   c                <    V P                   P                  R 4       R# )rP   NrW   r   rI   s   &r)   rP   DummyRunner.killIfRequestedj  s    !!"34r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r  m       2 2d 2r,   c                <    V P                   P                  R 4       R# )rQ   Nr  rI   s   &r)   rQ   DummyRunner.startLoggingm      !!.1r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r  p  r
  r,   c                <    V P                   P                  R 4       R# )rR   Nr  rI   s   &r)   rR   DummyRunner.startReactorp  r  r,   c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   r  s  s     3 3t 3r,   c                <    V P                   P                  R 4       R# )rS   Nr  rI   s   &r)   rS   DummyRunner.reactorExiteds  s    !!/2r,   r6   N)r   r   r   r   r   r   r   r&   r   r   rW   rP   rQ   rR   rS   r   r   r   s   @r)   rT   rT   `  sH      S	74=AM5 52 22 23 3r,   rT   c                   Z   a  ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )r`   iw  zQ
Stub for L{PIDFile}.

Tracks context manager entry/exit without doing anything.
c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   DummyPIDFile.__annotate__~  s      $ r,   c                N    \         P                  ! V 4       R V n        R V n        R# FN)r   r   rb   rc   rI   s   &r)   r   DummyPIDFile.__init__~  s    T"r,   c                   < V ^8  d   QhRR/# )r"   r$   r`   r6   )r'   r(   s   "r)   r*   r    s      > r,   c                    R V n         V # rk   )rb   rI   s   &r)   	__enter__DummyPIDFile.__enter__  s    r,   c                p   < V ^8  d   QhRS[ S[S[,          ,          RS[ S[,          RS[ S[,          RR/# )r"   excTypeexcValue	tracebackr$   N)r   r   BaseExceptionr   )r'   r(   s   "r)   r*   r    sG      $}-. =) M*	
 
r,   c                    R V n         R# TNrc   )r1   r  r   r!  s   &&&&r)   __exit__DummyPIDFile.__exit__  s     r,   )rb   rc   N)
r   r   r   r   r   r   r  r&  r   r   r   s   @r)   r`   r`   w  s(        r,   r`   c                   L   a  ] tR tRt o RtV 3R lR ltR	V 3R lR lltRtV tR# )
r=   i  zm
Stub for L{_exit.exit} that remembers whether it's been called and, if it has,
what arguments it was given.
c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   DummyExit.__annotate__  s      $ r,   c                    R V n         R# r  r%  rI   s   &r)   r   DummyExit.__init__  s	    r,   Nc                P   < V ^8  d   QhRS[ S[S[3,          RS[S[,          RR/# )r"   ro   rq   r$   N)r   r   r   r   r&   )r'   r(   s   "r)   r*   r*    s2      CO,7?}	r,   c                T    V P                   '       d   Q hWn        W n        R V n         R# r$  )rc   ro   rq   )r1   ro   rq   s   &&&r)   __call__DummyExit.__call__  s#     ;;;r,   )rc   rq   ro   r.   	r   r   r   r   r   r   r/  r   r   r   s   @r)   r=   r=     s#     
   r,   r=   c                   H   a  ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	r>   i  zj
Stub for L{os.kill} that remembers whether it's been called and, if it has,
what arguments it was given.
c                   < V ^8  d   QhRR/# r5   r6   )r'   r(   s   "r)   r*   DummyKill.__annotate__  s     / /$ /r,   c                    . V n         R # r.   rv   rI   s   &r)   r   DummyKill.__init__  s	    ,.
r,   c                *   < V ^8  d   QhRS[ RS[ RR/# )r"   r@   sigr$   Nr   )r'   r(   s   "r)   r*   r4    s"     & &C &c &d &r,   c                >    V P                   P                  W34       R # r.   )rv   r   )r1   r@   r9  s   &&&r)   r/  DummyKill.__call__  s    

3*%r,   r6  Nr1  r   s   @r)   r>   r>     s     
/ /& &r,   r>   c                   6   a  ] tR tRt o RtV 3R lR ltRtV tR# )rD   i  zJ
Stub for L{sys} which provides L{StringIO} streams as stdout and stderr.
c                *   < V ^8  d   QhRS[ RS[ RR/# )r"   rC   r;   r$   Nr   )r'   r(   s   "r)   r*   DummyStandardIO.__annotate__  s"      v v $ r,   c                    Wn         W n        R # r.   )rC   r;   )r1   rC   r;   s   &&&r)   r   DummyStandardIO.__init__  s    r,   )r;   rC   N)r   r   r   r   r   r   r   r   r   s   @r)   rD   rD     s      r,   rD   c                   6   a  ] tR tRt o RtV 3R lR ltRtV tR# )rF   i  zN
Stub for L{warnings} which provides a C{showwarning} method that is a no-op.
c                *   < V ^8  d   QhRS[ RS[ RR/# )r"   argskwargsr$   N)r   )r'   r(   s   "r)   r*    DummyWarningsModule.__annotate__  s"      3 # $ r,   c                     R# )z<
Do nothing.

@param args: ignored.
@param kwargs: ignored.
Nr6   )rC  rD  s   *,r)   showwarningDummyWarningsModule.showwarning  s    r,   r6   N)r   r   r   r   r   rG  r   r   r   s   @r)   rF   rF     s      r,   rF   )6r   r   ior   signalr   typesr   typingr   r   r   r   r	   r
   r   r   r   attrr   r   r   twisted.trial.unittesttwistedtwisted.internet.testingr   twisted.loggerr   r   r   r   r   r   r   twisted.python.filepathr   rY   r   _exitr   _pidfiler   r   r   trialunittestTestCaser    rT   r`   r=   r>   rD   rF   r6   r,   r)   <module>rX     s        R R R ' '  2   -   + {6'--((11 {6|	 d3& 3 3,; 4 &
& 
&  r,   