
    	h              	       
   d Z ddlZddlZddlZddlZddlZddl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 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 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  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+ erddl,m-Z- dd l,m.Z. e.d!         Z/d"e"d#dfd$Z0d\d%Z1d&ed#dfd'Z2 e d()          d*efd+            Z3 G d, d-ej4                  Z5 G d. d/ej4                  Z6 G d0 d1e6          Z7 G d2 d3e          Z8 G d4 d5ej9        ee                   Z:d6d7d8d9Z; G d: d;e:e<                   Z= G d< d=e:e                   Z> G d> d?e>e?                   Z@ G d@ dAe>e<                   ZA G dB dCe:e                   ZB G dD dEeBe?                   ZC G dF dGeBe<                   ZDejE        dHk    sere G dI dJeee                               ZFn& G dK dJ ejG        dJdLdMg          ee                   ZF G dN dOee                   ZHdPdQd#eHe<         fdRZI G dS dT          ZJ G dU dVee                   ZKe&dWe'd#eeKe<         ddf         fdX            ZLe&dWe'd#eeKe?         ddf         fdY            ZMe&dWe'd#eeKe<         ddf         fdZ            ZNe&dWe'd#eeKe?         ddf         fd[            ZOdS )]z+Per-test stdout/stderr capturing mechanism.    NUnsupportedOperation)TemporaryFile)TracebackType)Any)AnyStr)BinaryIO)	Generator)Generic)Iterable)Iterator)List)
NamedTuple)Optional)TextIO)Tuple)Type)TYPE_CHECKING)Union)final)Config)hookimpl)Parser)check_ispytest)fixture)
SubRequest)	Collector)File)Item)Final)Literalfdsysnotee-sysparserreturnc                     |                      d          }|                    ddddg dd           |                    d	d
ddd           d S )Ngeneralz	--capturestorer#   methodr"   z3Per-test capturing method: one of fd|sys|no|tee-sys)actiondefaultmetavarchoiceshelpz-sstore_constr%   capturezShortcut for --capture=no)r-   constdestr1   )getgroup
_addoption)r'   groups     \/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/_pytest/capture.pypytest_addoptionr:   -   s    OOI&&E	...B     
(          c                  t    t           j                            d          r	 ddl} dS # t          $ r Y dS w xY wdS )a  Ensure colorama is imported so that it attaches to the correct stdio
    handles on Windows.

    colorama uses the terminal on import time. So if something does the
    first import of colorama while I/O capture is active, colorama will
    fail in various ways.
    win32r   N)r$   platform
startswithcoloramaImportError)r@   s    r9   _colorama_workaroundrB   @   sZ     |w'' 	OOOOO 	 	 	DD	 s   ' 
55streamc                    t           j                            d          rt          t           d          rdS t          | d          sdS t          | j        d          r| j        j        n| j        }t          |t          j                  sdS fd} |t           j	        d          t           _	         |t           j
        d          t           _
         |t           j        d          t           _        dS )	a  Workaround for Windows Unicode console handling.

    Python 3.6 implemented Unicode console handling for Windows. This works
    by reading/writing to the raw console handle using
    ``{Read,Write}ConsoleW``.

    The problem is that we are going to ``dup2`` over the stdio file
    descriptors when doing ``FDCapture`` and this will ``CloseHandle`` the
    handles used by Python to write to the console. Though there is still some
    weirdness and the console handle seems to only be closed randomly and not
    on the first call to ``CloseHandle``, or maybe it gets reopened with the
    same handle value when we suspend capturing.

    The workaround in this case will reopen stdio with a different fd which
    also means a different handle by replicating the logic in
    "Py_lifecycle.c:initstdio/create_stdio".

    :param stream:
        In practice ``sys.stdout`` or ``sys.stderr``, but given
        here as parameter for unittesting purposes.

    See https://github.com/pytest-dev/py/issues/103.
    r=   pypy_version_infoNbufferrawc                     s|d         dk    rd}nd}t          j        t          t          j        |                                           ||          | j        | j        | j        | j	                  S )Nr   w)
ioTextIOWrapperopenosdupfilenoencodingerrorsnewlinesline_buffering)fmode	bufferingbuffereds      r9   _reopen_stdioz3_windowsconsoleio_workaround.<locals>._reopen_stdiot   sn     	DGsNNIII

##T955JHJ
 
 	
r;   rbwb)r$   r>   r?   hasattrrF   rG   
isinstancerK   _WindowsConsoleIOstdinstdoutstderr)rC   
raw_stdoutrY   rX   s      @r9   _windowsconsoleio_workaroundrc   O   s    0 <""7++ ws<O/P/P  68$$ v}e,,H&.A""FMJj""677 
 
 
 
 
 ci..CIsz400CJsz400CJJJr;   Thookwrapperearly_configc              #   &  K   | j         }|j        dk    rt          t          j                   t                       | j        }t          |j                  }|                    |d           | 	                    |j
                   |                                 d V }|                                 |j        W|                                \  }}t          j                            |           t          j                            |           d S d S )Nr#   capturemanager)known_args_namespacer3   rc   r$   r`   rB   pluginmanagerCaptureManagerregisteradd_cleanupstop_global_capturingstart_global_capturingsuspend_global_captureexcinforead_global_capturewritera   )rf   nsrj   capmanoutcomeouterrs          r9   pytest_load_initial_conftestsry      s     		*B	zT$SZ000 .MBJ''F6#3444 V9::: !!###eeG
!!###"--//S

 #"r;   c                   J    e Zd ZdZedefd            Zedefd            ZdS )EncodedFile r(   c                 *    t          | j                  S N)reprrF   selfs    r9   namezEncodedFile.name   s     DK   r;   c                 B    | j         j                            dd          S )Nb )rF   rV   replacer   s    r9   rV   zEncodedFile.mode   s     {''R000r;   N)__name__
__module____qualname__	__slots__propertystrr   rV   r|   r;   r9   r{   r{      se        I!c ! ! ! X!
 1c 1 1 1 X1 1 1r;   r{   c                   ,     e Zd Zd fdZdefdZ xZS )	CaptureIOr(   Nc                 t    t                                          t          j                    ddd           d S )NUTF-8r   T)rQ   newlinewrite_through)super__init__rK   BytesIO)r   	__class__s    r9   r   zCaptureIO.__init__   s1    SWXXXXXr;   c                     t          | j        t          j                  sJ | j                                                            d          S )Nr   )r]   rF   rK   r   getvaluedecoder   s    r9   r   zCaptureIO.getvalue   s>    $+rz22222{##%%,,W555r;   r(   N)r   r   r   r   r   r   __classcell__r   s   @r9   r   r      s^        Y Y Y Y Y Y6# 6 6 6 6 6 6 6 6r;   r   c                   <     e Zd Zdeddf fdZdedef fdZ xZS )TeeCaptureIOotherr(   Nc                 V    || _         t                                                       d S r~   )_otherr   r   )r   r   r   s     r9   r   zTeeCaptureIO.__init__   s&    r;   sc                 z    t                                          |           | j                            |          S r~   )r   rs   r   )r   r   r   s     r9   rs   zTeeCaptureIO.write   s/    a{  ###r;   )	r   r   r   r   r   r   intrs   r   r   s   @r9   r   r      sw        f       $s $s $ $ $ $ $ $ $ $ $ $r;   r   c                      e Zd Zedefd            Zd"dedefdZeZdefdZ	d"de
e         dee         fdZdee         fd	Zdefd
Zd#dZdefdZd#dZdefdZd$dededefdZdefdZdefdZd%de
e         defdZdedefdZdee         ddfdZdefdZd&dZde
ee                  de
e         de
e          ddfd Z!ede"fd!            Z#dS )'DontReadFromInputr(   c                 $    t           j        j        S r~   )r$   	__stdin__rQ   r   s    r9   rQ   zDontReadFromInput.encoding   s    }%%r;   rJ   sizec                      t          d          NzJpytest: reading from stdin while output is captured!  Consider using `-s`.OSErrorr   r   s     r9   readzDontReadFromInput.read       X
 
 	
r;   c                 *    |                                  S r~   )readliner   s    r9   __next__zDontReadFromInput.__next__   s    }}r;   hintc                      t          d          r   r   )r   r   s     r9   	readlineszDontReadFromInput.readlines   r   r;   c                     | S r~   r|   r   s    r9   __iter__zDontReadFromInput.__iter__       r;   c                      t          d          )Nz/redirected stdin is pseudofile, has no fileno()r   r   s    r9   rP   zDontReadFromInput.fileno   s    "#TUUUr;   Nc                      t          d          )Nz.redirected stdin is pseudofile, has no flush()r   r   s    r9   flushzDontReadFromInput.flush   s    "#STTTr;   c                     dS NFr|   r   s    r9   isattyzDontReadFromInput.isatty       ur;   c                     d S r~   r|   r   s    r9   closezDontReadFromInput.close       r;   c                     dS r   r|   r   s    r9   readablezDontReadFromInput.readable   r   r;   r   offsetwhencec                      t          d          )Nz0redirected stdin is pseudofile, has no seek(int)r   )r   r   r   s      r9   seekzDontReadFromInput.seek   s    "#UVVVr;   c                     dS r   r|   r   s    r9   seekablezDontReadFromInput.seekable   r   r;   c                      t          d          )Nz-redirected stdin is pseudofile, has no tell()r   r   s    r9   tellzDontReadFromInput.tell   s    "#RSSSr;   c                      t          d          )Nzcannot truncate stdinr   r   s     r9   truncatezDontReadFromInput.truncate       "#:;;;r;   datac                      t          d          )Nzcannot write to stdinr   r   r   s     r9   rs   zDontReadFromInput.write   r   r;   linesc                      t          d          )NzCannot write to stdinr   )r   r   s     r9   
writelineszDontReadFromInput.writelines   r   r;   c                     dS r   r|   r   s    r9   writablezDontReadFromInput.writable   r   r;   c                     | S r~   r|   r   s    r9   	__enter__zDontReadFromInput.__enter__   r   r;   typevalue	tracebackc                     d S r~   r|   )r   r   r   r   s       r9   __exit__zDontReadFromInput.__exit__  s	     	r;   c                     | S r~   r|   r   s    r9   rF   zDontReadFromInput.buffer
  s	     r;   )rJ   r   )r   r~   )r(   r   )$r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r   rP   r   boolr   r   r   r   r   r   r   rs   r   r   r   r   r   BaseExceptionr   r   r	   rF   r|   r;   r9   r   r      s       &# & & & X&
 
 
c 
 
 
 

 H#    
 
hsm 
T#Y 
 
 
 

(3-    V V V V VU U U U       $    W W3 W WC W W W W$    Tc T T T T< <Xc] <c < < < <<# <# < < < << <$ < < < <$       tM*+ & M*	
 
        X  r;   r   c                      e Zd ZU eed<   ej        deddfd            Zej        dd            Z	ej        dd            Z
ej        dd            Zej        dd	            Zej        d
eddfd            Zej        defd            ZdS )CaptureBaseEMPTY_BUFFERr#   r(   Nc                     t                      r~   NotImplementedErrorr   r#   s     r9   r   zCaptureBase.__init__      !###r;   c                     t                      r~   r   r   s    r9   startzCaptureBase.start  r   r;   c                     t                      r~   r   r   s    r9   donezCaptureBase.done  r   r;   c                     t                      r~   r   r   s    r9   suspendzCaptureBase.suspend"  r   r;   c                     t                      r~   r   r   s    r9   resumezCaptureBase.resume&  r   r;   r   c                     t                      r~   r   r   s     r9   writeorgzCaptureBase.writeorg*  r   r;   c                     t                      r~   r   r   s    r9   snapzCaptureBase.snap.  r   r;   r   )r   r   r   r   __annotations__abcabstractmethodr   r   r   r   r   r   r   r   r|   r;   r9   r   r     s?        $3 $4 $ $ $ $ 	$ $ $ $ 	$ $ $ $ 	$ $ $ $ 	$ $ $ $ 	$V $ $ $ $ $ 	$f $ $ $ $ $ $r;   r   r_   r`   ra   )r         c                   ^    e Zd ZdZdeddfdZddZddZddZdd	Z	de
fd
Zde
ddfdZdS )	NoCapturer   r#   r(   Nc                     d S r~   r|   r   s     r9   r   zNoCapture.__init__9  r   r;   c                     d S r~   r|   r   s    r9   r   zNoCapture.start<  r   r;   c                     d S r~   r|   r   s    r9   r   zNoCapture.done?  r   r;   c                     d S r~   r|   r   s    r9   r   zNoCapture.suspendB  r   r;   c                     d S r~   r|   r   s    r9   r   zNoCapture.resumeE  r   r;   c                     dS Nr   r|   r   s    r9   r   zNoCapture.snapH  s    rr;   r   c                     d S r~   r|   r   s     r9   r   zNoCapture.writeorgK  r   r;   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r|   r;   r9   r   r   6  s        L3 4                c    S T      r;   r   c            
           e Zd Z	 ddddedee         deddfdZd	edefd
Z	defdZ
dedeedf         ddfdZddZddZddZddZdS )SysCaptureBaseNFteer#   tmpfiler	  r(   c                    t           |         }t          t          |          | _        || _        |9|dk    rt                      }n$|st                      nt          | j                  }|| _        d| _	        d S )Nr_   initialized)
patchsysdictgetattrr$   _oldr   r   r   r   r
  _state)r   r#   r
  r	  r   s        r9   r   zSysCaptureBase.__init__P  so     B#C..		?w+---0M)+++l496M6M#r;   
class_namec                     d                     || j        t          | d          rt          | j                  pd| j        | j                  S Nz(<{} {} _old={} _state={!r} tmpfile={!r}>r  z<UNSET>)formatr   r\   r   r  r  r
  )r   r  s     r9   r   zSysCaptureBase.repr^  sK    9@@ID&!!5d49ooBKL
 
 	
r;   c                     d                     | j        j        | j        t	          | d          rt          | j                  pd| j        | j                  S r  )	r  r   r   r   r\   r   r  r  r
  r   s    r9   __repr__zSysCaptureBase.__repr__g  sP    9@@N#ID&!!5d49ooBKL
 
 	
r;   opstates.c                     | j         |v s7J d                    || j         d                    |                                d S Nz+cannot {} in state {!r}: expected one of {}z, r  r  joinr   r  r  s      r9   _assert_statezSysCaptureBase._assert_statep  K    K6!!!8??TYYv..
 
 "!!!!r;   c                     |                      dd           t          t          | j        | j                   d| _        d S )Nr   r  started)r  setattrr$   r   r
  r  r   s    r9   r   zSysCaptureBase.startw  s:    7$4555TY---r;   c                     |                      dd           | j        dk    rd S t          t          | j        | j                   | `| j                                         d| _        d S )Nr   r  r"  	suspendedr   )r  r  r#  r$   r   r  r
  r   r   s    r9   r   zSysCaptureBase.done|  se    6#RSSS;&  FTY	***Ir;   c                     |                      dd           t          t          | j        | j                   d| _        d S Nr   r"  r&  r&  )r  r#  r$   r   r  r  r   s    r9   r   zSysCaptureBase.suspend  s:    9&>???TY	***!r;   c                     |                      dd           | j        dk    rd S t          t          | j        | j                   d| _        d S Nr   r)  r"  )r  r  r#  r$   r   r
  r   s    r9   r   zSysCaptureBase.resume  sL    8%=>>>;)##FTY---r;   r~   r   )r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r   r|   r;   r9   r  r  O  s        37$HM$ $ $$ ( 0$AE$	$ $ $ $
s 
s 
 
 
 

# 
 
 
 

 
U38_ 
 
 
 
 
       
   " " " "
           r;   r  c                   .    e Zd ZdZdefdZdeddfdZdS )SysCaptureBinaryr;   r(   c                    |                      dd           | j                            d           | j        j                                        }| j                            d           | j                                         |S Nr   r)  r   r  r
  r   rF   r   r   r   ress     r9   r   zSysCaptureBinary.snap  t    6#;<<<!l!&&((!
r;   r   Nc                     |                      dd           | j                                         | j        j                            |           | j        j                                         d S Nr   r)  )r  r  r   rF   rs   r   s     r9   r   zSysCaptureBinary.writeorg  sa    :'?@@@		t$$$	     r;   )r   r   r   r   bytesr   r   r|   r;   r9   r-  r-    sV        Le    !U !t ! ! ! ! ! !r;   r-  c                   .    e Zd ZdZdefdZdeddfdZdS )
SysCapturer   r(   c                    |                      dd           t          | j        t                    sJ | j                                        }| j                            d           | j                                         |S r/  )r  r]   r
  r   r   r   r   r1  s     r9   r   zSysCapture.snap  ss    6#;<<<$,	22222l##%%!
r;   r   Nc                     |                      dd           | j                            |           | j                                         d S r5  )r  r  rs   r   r   s     r9   r   zSysCapture.writeorg  sE    :'?@@@		r;   )r   r   r   r   r   r   r   r|   r;   r9   r8  r8    sV        Lc    S T      r;   r8  c                   n    e Zd ZdeddfdZdefdZdedeedf         ddfd	Zdd
Z	ddZ
ddZddZdS )FDCaptureBasetargetfdr(   Nc                 r   || _         	 t          j        |           d | _        nX# t          $ rK t          j        t          j        t          j                  | _        t          j        | j        |           Y nw xY wt          j	        |          | _
        |dk    r5t          t          j        d          | _        t          |          | _        n_t          t          d          dddd          | _        |t           v rt          || j                  | _        nt#          |          | _        d	| _        d S )
Nr   utf-8)rQ   )rW   r   r   T)rQ   rR   r   r   r  )r=  rN   fstattargetfd_invalidr   rM   devnullO_RDWRdup2rO   targetfd_saver
  r8  
syscapturer{   r   r  r   r  )r   r=  s     r9   r   zFDCaptureBase.__init__  s-    	)HX  %)D!!  	5 	5 	5 4672:ry3Q3QD!GD)844444	5   VH--q==
W===DL0:80D0DDOO&***  "  DL <''",Xt|"D"D"+H"5"5#s   % AA:9A:c                 p    d                     | j        j        | j        | j        | j        | j                  S )Nz)<{} {} oldfd={} _state={!r} tmpfile={!r}>)r  r   r   r=  rE  r  r
  r   s    r9   r  zFDCaptureBase.__repr__  s7    :AAN#MKL
 
 	
r;   r  r  .c                     | j         |v s7J d                    || j         d                    |                                d S r  r  r  s      r9   r  zFDCaptureBase._assert_state  r  r;   c                     |                      dd           t          j        | j                                        | j                   | j                                         d| _        dS )z4Start capturing on targetfd using memorized tmpfile.r   r!  r"  N)	r  rN   rD  r
  rP   r=  rF  r   r  r   s    r9   r   zFDCaptureBase.start  sZ    7$4555
##%%t}555r;   c                    |                      dd           | j        dk    rdS t          j        | j        | j                   t          j        | j                   | j        B| j        | j        k    rt          j        | j                   t          j        | j                   | j        	                                 | j
                                         d| _        dS )z_Stop capturing, restore streams, return original capture file,
        seeked to position zero.r   r%  N)r  r  rN   rD  rE  r=  r   rA  rF  r   r
  r   s    r9   r   zFDCaptureBase.done  s     	6#RSSS;&  F
"DM222
#$$$ ,$55'''HT*+++r;   c                     |                      dd           | j        dk    rd S | j                                         t	          j        | j        | j                   d| _        d S r(  )r  r  rF  r   rN   rD  rE  r=  r   s    r9   r   zFDCaptureBase.suspend  sa    9&>???;+%%F!!!
"DM222!r;   c                     |                      dd           | j        dk    rd S | j                                         t	          j        | j                                        | j                   d| _        d S r+  )	r  r  rF  r   rN   rD  r
  rP   r=  r   s    r9   r   zFDCaptureBase.resume  sl    8%=>>>;)##F   
##%%t}555r;   r   )r   r   r   r   r   r   r  r   r  r   r   r   r   r|   r;   r9   r<  r<    s        '$ '$ '$ '$ '$ '$R
# 
 
 
 

 
U38_ 
 
 
 
 
           " " " "           r;   r<  c                   2    e Zd ZdZdZdefdZdeddfdZdS )FDCaptureBinaryzWCapture IO to/from a given OS-level file descriptor.

    snap() produces `bytes`.
    r;   r(   c                    |                      dd           | j                            d           | j        j                                        }| j                            d           | j                                         |S r/  r0  r1  s     r9   r   zFDCaptureBinary.snap  r3  r;   r   Nc                 f    |                      dd           t          j        | j        |           dS )"Write to original file descriptor.r   r)  N)r  rN   rs   rE  r   s     r9   r   zFDCaptureBinary.writeorg'  s4    :'?@@@
#T*****r;   )r   r   r   __doc__r   r6  r   r   r|   r;   r9   rN  rN    sb         
 Le    +U +t + + + + + +r;   rN  c                   2    e Zd ZdZdZdefdZdeddfdZdS )	FDCapturezTCapture IO to/from a given OS-level file descriptor.

    snap() produces text.
    r   r(   c                     |                      dd           | j                            d           | j                                        }| j                            d           | j                                         |S r/  )r  r
  r   r   r   r1  s     r9   r   zFDCapture.snap5  sq    6#;<<<!l!!!
r;   r   Nc                     |                      dd           t          j        | j        |                    d                     dS )rQ  r   r)  r?  N)r  rN   rs   rE  encoder   s     r9   r   zFDCapture.writeorg=  s@    :'?@@@
#T[[%9%9:::::r;   )r   r   r   rR  r   r   r   r   r|   r;   r9   rT  rT  -  sb         
 Lc    ;S ;T ; ; ; ; ; ;r;   rT  )      c                   (    e Zd ZU dZeed<   eed<   dS )CaptureResult2The result of :method:`CaptureFixture.readouterr`.rw   rx   N)r   r   r   rR  r   r   r|   r;   r9   r[  r[  J  s(         @@r;   r[  c                       e Zd ZdZdZdS )r[  r\  r|   N)r   r   r   rR  r   r|   r;   r9   r[  r[  S  s         	A@			r;   rw   rx   c                       e Zd ZdZdZdeee                  deee                  deee                  ddfdZde	fdZ
dd	Zdeeef         fd
ZddeddfdZddZddZdefdZdee         fdZdS )MultiCaptureNFin_rw   rx   r(   c                 0    || _         || _        || _        d S r~   r`  rw   rx   )r   r`  rw   rx   s       r9   r   zMultiCapture.__init___  s     362525r;   c                 f    d                     | j        | j        | j        | j        | j                  S )NzH<MultiCapture out={!r} err={!r} in_={!r} _state={!r} _in_suspended={!r}>)r  rw   rx   r`  r  _in_suspendedr   s    r9   r  zMultiCapture.__repr__i  s4    Y``HHHK
 
 	
r;   c                     d| _         | j        r| j                                         | j        r| j                                         | j        r| j                                         d S d S )Nr"  )r  r`  r   rw   rx   r   s    r9   start_capturingzMultiCapture.start_capturingr  sm    8 	HNN8 	HNN8 	HNN	 	r;   c                     |                                  \  }}|r#| j        J | j                            |           |r#| j        J | j                            |           ||fS )z?Pop current snapshot out/err capture and flush to orig streams.)
readouterrrw   r   rx   r   rw   rx   s      r9   pop_outerr_to_origzMultiCapture.pop_outerr_to_orig{  sv    ??$$S 	#8'''Hc""" 	#8'''Hc"""Cxr;   c                     d| _         | j        r| j                                         | j        r| j                                         |r)| j        r$| j                                         d| _        d S d S d S )Nr&  T)r  rw   r   rx   r`  rd  r   r`  s     r9   suspend_capturingzMultiCapture.suspend_capturing  s    !8 	H8 	H 	&48 	&H!%D	& 	& 	& 	&r;   c                     d| _         | j        r| j                                         | j        r| j                                         | j        r+| j        J | j                                         d| _        d S d S )Nr"  F)r  rw   r   rx   rd  r`  r   s    r9   resume_capturingzMultiCapture.resume_capturing  s    8 	HOO8 	HOO 	'8'''HOO!&D	' 	'r;   c                    | j         dk    rt          d          d| _         | j        r| j                                         | j        r| j                                         | j        r| j                                         dS dS )z+Stop capturing and reset capturing streams.stoppedzwas already stoppedN)r  
ValueErrorrw   r   rx   r`  r   s    r9   stop_capturingzMultiCapture.stop_capturing  s~    ;)##23338 	HMMOOO8 	HMMOOO8 	HMMOOOOO	 	r;   c                     | j         dk    S )z7Whether actively capturing -- not suspended or stopped.r"  )r  r   s    r9   
is_startedzMultiCapture.is_started  s    {i''r;   c                     | j         r| j                                         nd}| j        r| j                                        nd}t          ||          S r  )rw   r   rx   r[  ri  s      r9   rh  zMultiCapture.readouterr  sF    !%1dhmmooor!%1dhmmooorS#&&&r;   r   F)r   r   r   r  rd  r   r   r   r   r   r  rf  r   rj  r   rm  ro  rs  ru  r[  rh  r|   r;   r9   r_  r_  [  sS       FM6k&)*6 k&)*6 k&)*	6
 
6 6 6 6
# 
 
 
 
   	E&&.$9 	 	 	 	& &T &d & & & &	' 	' 	' 	'
 
 
 
(D ( ( ( ('M&1 ' ' ' ' ' 'r;   r_  r,   _CaptureMethodc                    | dk    r9t          t          d          t          d          t          d                    S | dk    r9t          t          d          t          d          t          d                    S | dk    rt          d d d           S | dk    r0t          d t          dd	
          t          dd	
                    S t          d|           )Nr#   r   r   r   rb  r$   r%   r&   Tr  zunknown capturing method: )r_  rT  r8  rr  )r,   s    r9   _get_multicapturerz    s    ~~	!)A,,IaLLQQQQ	5
1:a==jQRmmTTTT	4$D9999	9		*QD111z!7N7N7N
 
 
 	
 <&<<
=
==r;   c                      e Zd ZdZd*dZdefdZdeeef         fdZ	defd	Z
d+d
Zd+dZd+dZd,deddfdZd,deddfdZd+dZdee         fdZd-dZd+dZd+dZd+dZd+dZd+dZej        ded         fd            Zej        dededed         fd            Z ed !          d"e fd#            Z! ed !          deded         fd$            Z" ed !          deded         fd%            Z# ed !          deded         fd&            Z$ ed '          d+d(            Z% ed '          d+d)            Z&dS ).rk   a  The capture plugin.

    Manages that the appropriate capture method is enabled/disabled during
    collection and each test phase (setup, call, teardown). After each of
    those points, the captured output is obtained and attached to the
    collection/runtest report.

    There are two levels of capture:

    * global: enabled by default and can be suppressed by the ``-s``
      option. This is always enabled/disabled during collection and each test
      phase.

    * fixture: when a test function or one of its fixture depend on the
      ``capsys`` or ``capfd`` fixtures. In this case special handling is
      needed to ensure the fixtures take precedence over the global capture.
    r,   rx  r(   Nc                 0    || _         d | _        d | _        d S r~   )_method_global_capturing_capture_fixture)r   r,   s     r9   r   zCaptureManager.__init__  s    $>B?Cr;   c                 N    d                     | j        | j        | j                  S )NzJ<CaptureManager _method={!r} _global_capturing={!r} _capture_fixture={!r}>)r  r}  r~  r  r   s    r9   r  zCaptureManager.__repr__  s)    [bbL$0$2G
 
 	
r;   c                 h    |                                  rdS | j        rd| j        j        j        z  S dS )Nglobalz
fixture %sF)is_globally_capturingr  requestfixturenamer   s    r9   is_capturingzCaptureManager.is_capturing  s@    %%'' 	8  	L$"7"?"KKKur;   c                     | j         dk    S )Nr%   )r}  r   s    r9   r  z$CaptureManager.is_globally_capturing  s    |t##r;   c                 |    | j         J t          | j                  | _         | j                                          d S r~   )r~  rz  r}  rf  r   s    r9   ro   z%CaptureManager.start_global_capturing  s>    %---!24<!@!@..00000r;   c                     | j         ;| j                                          | j                                          d | _         d S d S r~   )r~  rj  rs  r   s    r9   rn   z$CaptureManager.stop_global_capturing  sK    !-"55777"11333%)D""" .-r;   c                 J    | j         | j                                          d S d S r~   )r~  ro  r   s    r9   resume_global_capturez$CaptureManager.resume_global_capture  s0     !-"3355555 .-r;   Fr`  c                 N    | j         | j                             |           d S d S )Nr`  )r~  rm  rl  s     r9   rp   z%CaptureManager.suspend_global_capture  s3    !-"444===== .-r;   c                 X    |                                   |                     |           d S r~   )suspend_fixturerp   rl  s     r9   r   zCaptureManager.suspend  s.    ##C(((((r;   c                 V    |                                   |                                  d S r~   )r  resume_fixturer   s    r9   r   zCaptureManager.resume  s,    ""$$$r;   c                 F    | j         J | j                                         S r~   )r~  rh  r   s    r9   rr   z"CaptureManager.read_global_capture
  s&    %111%00222r;   capture_fixtureCaptureFixture[Any]c                     | j         rK| j         j        j        }|j        j        }|j                            d                    ||                     || _         d S )Nz%cannot use {} and {} at the same time)r  r  r  
raiseerrorr  )r   r  current_fixturerequested_fixtures       r9   set_fixturezCaptureManager.set_fixture  sj      	"3;GO / 7 C#..7>>%   
 !0r;   c                     d | _         d S r~   )r  r   s    r9   unset_fixturezCaptureManager.unset_fixture  s     $r;   c                 J    | j         r| j                                          dS dS )z|If the current item is using ``capsys`` or ``capfd``, activate
        them so they take precedence over the global capture.N)r  _startr   s    r9   activate_fixturezCaptureManager.activate_fixture  s4       	+!((*****	+ 	+r;   c                 J    | j         r| j                                          dS dS )zDDeactivate the ``capsys`` or ``capfd`` fixture of this item, if any.N)r  r   r   s    r9   deactivate_fixturez!CaptureManager.deactivate_fixture$  s2      	*!'')))))	* 	*r;   c                 J    | j         r| j                                          d S d S r~   )r  _suspendr   s    r9   r  zCaptureManager.suspend_fixture)  s2      	-!**,,,,,	- 	-r;   c                 J    | j         r| j                                          d S d S r~   )r  _resumer   s    r9   r  zCaptureManager.resume_fixture-  s2      	,!))+++++	, 	,r;   NNNc              #     K   | j         o| j                                         }|r|                                  | j        o| j                                        }|r|                                  	 dV  |r|                                  |r|                                  dS dS # |r|                                  |r|                                  w w xY w)zLContext manager to temporarily disable global and current fixture capturing.N)r  _is_startedr  r~  ru  rp   r  r  )r   
do_fixture	do_globals      r9   global_and_fixture_disabledz*CaptureManager.global_and_fixture_disabled3  s      *Rt/D/P/P/R/R
 	#  """*Rt/E/P/P/R/R	 	*'')))	&EEE -**,,, &##%%%%%& &  -**,,, &##%%%%&s   0B$ $/Cwhenitemc              #     K   |                                   |                                  	 d V  |                                  |                     d           n/# |                                  |                     d           w xY w|                                 \  }}|                    |d|           |                    |d|           d S )NFr  r`   ra   )r  r  r  rp   rr   add_report_section)r   r  r  rw   rx   s        r9   item_capturezCaptureManager.item_captureD  s      ""$$$	3EEE##%%%''E'2222 ##%%%''E'2222++--Sh444h44444s   A ,BTrd   	collectorc              #   j  K   t          |t                    r|                                  d V }|                                  |                                 \  }}|                                }|r|j                            d|f           |r|j                            d|f           d S d S d V  d S )NzCaptured stdoutzCaptured stderr)r]   r   r  rp   rr   
get_resultsectionsappend)r   r  rv   rw   rx   reps         r9   pytest_make_collect_reportz)CaptureManager.pytest_make_collect_reportT  s      i&& 	&&(((eeG'')))//11HC$$&&C >##%6$<=== >##%6$<=====> > EEEEEr;   c              #   p   K   |                      d|          5  d V  d d d            d S # 1 swxY w Y   d S )Nsetupr  r   r  s     r9   pytest_runtest_setupz#CaptureManager.pytest_runtest_setupc  s      w-- 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   +//c              #   p   K   |                      d|          5  d V  d d d            d S # 1 swxY w Y   d S )Ncallr  r  s     r9   pytest_runtest_callz"CaptureManager.pytest_runtest_callh  s      vt,, 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c              #   p   K   |                      d|          5  d V  d d d            d S # 1 swxY w Y   d S )Nteardownr  r  s     r9   pytest_runtest_teardownz&CaptureManager.pytest_runtest_teardownm  s      z400 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  )tryfirstc                 .    |                                   d S r~   rn   r   s    r9   pytest_keyboard_interruptz(CaptureManager.pytest_keyboard_interruptr      ""$$$$$r;   c                 .    |                                   d S r~   r  r   s    r9   pytest_internalerrorz#CaptureManager.pytest_internalerrorv  r  r;   )r,   rx  r(   Nr   rw  )r  r  r(   N)'r   r   r   rR  r   r   r  r   r   r  r  ro   rn   r  rp   r   r   r[  rr   r  r  r  r  r  r  
contextlibcontextmanagerr
   r  r   r  r   r   r  r  r  r  r  r  r|   r;   r9   rk   rk     s        $D D D D

# 
 
 
 

eCI.    $t $ $ $ $1 1 1 1
* * * *6 6 6 6> >$ >4 > > > >) )4 )D ) ) ) )
   3]3%7 3 3 3 3	0 	0 	0 	0% % % %+ + + +* * * *
- - - -, , , , &Y7G-H & & & &  5 5D 5Y?O5P 5 5 5 5 X$I      X$ )<L2M      X$ ;K1L      X$D Y?O5P      Xt% % % % Xt% % % % % %r;   rk   c            	           e Zd ZdZdddeee                  dededdfd	Z	dd
Z
ddZdee         fdZddZddZdefdZej        ded         fd            ZdS )CaptureFixturez|Object returned by the :fixture:`capsys`, :fixture:`capsysbinary`,
    :fixture:`capfd` and :fixture:`capfdbinary` fixtures.F	_ispytestcaptureclassr  r  r(   Nc                    t          |           || _        || _        d | _        | j        j        | _        | j        j        | _        d S r~   )r   r  r  _capturer   _captured_out_captured_err)r   r  r  r  s       r9   r   zCaptureFixture.__init__  sJ     	y!!!7C8<%)%6%C%)%6%Cr;   c                     | j         Xt          d |                     d          |                     d                    | _         | j                                          d S d S )Nr   r   rb  )r  r_  r  rf  r   s    r9   r  zCaptureFixture._start  si    = (%%a((%%a((  DM
 M))+++++ ! r;   c                     | j         ^| j                                         \  }}| xj        |z  c_        | xj        |z  c_        | j                                          d | _         d S d S r~   )r  rj  r  r  rs  ri  s      r9   r   zCaptureFixture.close  sp    =$}7799HC#%#%M((*** DMMM %$r;   c                     | j         | j        }}| j        &| j                                        \  }}||z  }||z  }| j        j        | _         | j        j        | _        t          ||          S )zRead and return the captured output so far, resetting the internal
        buffer.

        :returns:
            The captured content as a namedtuple with ``out`` and ``err``
            string attributes.
        )r  r  r  rh  r  r   r[  )r   captured_outcaptured_errrw   rx   s        r9   rh  zCaptureFixture.readouterr  sr     &*%79Kl=$}//11HCCLCL!.;!.;\<888r;   c                 J    | j         | j                                          dS dS )z1Suspend this fixture's own capturing temporarily.N)r  rm  r   s    r9   r  zCaptureFixture._suspend  s,    =$M++----- %$r;   c                 J    | j         | j                                          dS dS )z0Resume this fixture's own capturing temporarily.N)r  ro  r   s    r9   r  zCaptureFixture._resume  s,    =$M**,,,,, %$r;   c                 F    | j         | j                                         S dS )z5Whether actively capturing -- not disabled or closed.NF)r  ru  r   s    r9   r  zCaptureFixture._is_started  s#    =$=++---ur;   r  c              #      K   | j         j        j                            d          }|                                5  dV  ddd           dS # 1 swxY w Y   dS )z>Temporarily disable capturing while inside the ``with`` block.rh   N)r  configrj   	getpluginr  )r   
capmanagers     r9   disabledzCaptureFixture.disabled  s       &*\%8%F%P%P&
 &

 3355 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAr   )r   r   r   rR  r   r   r   r   r   r   r  r   r[  rh  r  r  r  r  r  r
   r  r|   r;   r9   r  r  {  s7       = =  D D D;v./D D
 D 
D D D D, , , ,! ! ! !9M&1 9 9 9 9". . . .
- - - -
T     )$45      r;   r  r  c              #      K   | j         j                            d          }t          t          | d          }|                    |           |                                 |V  |                                 |                                 dS )a  Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``.

    The captured output is made available via ``capsys.readouterr()`` method
    calls, which return a ``(out, err)`` namedtuple.
    ``out`` and ``err`` will be ``text`` objects.

    Returns an instance of :class:`CaptureFixture[str] <pytest.CaptureFixture>`.

    Example:

    .. code-block:: python

        def test_output(capsys):
            print("hello")
            captured = capsys.readouterr()
            assert captured.out == "hello\n"
    rh   Tr  N)	r  rj   r  r  r8  r  r  r   r  r  ru   r  s      r9   capsysr    s      & %^9CCDTUUF$ZDIIIO
'''

r;   c              #      K   | j         j                            d          }t          t          | d          }|                    |           |                                 |V  |                                 |                                 dS )a'  Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``.

    The captured output is made available via ``capsysbinary.readouterr()``
    method calls, which return a ``(out, err)`` namedtuple.
    ``out`` and ``err`` will be ``bytes`` objects.

    Returns an instance of :class:`CaptureFixture[bytes] <pytest.CaptureFixture>`.

    Example:

    .. code-block:: python

        def test_output(capsysbinary):
            print("hello")
            captured = capsysbinary.readouterr()
            assert captured.out == b"hello\n"
    rh   Tr  N)	r  rj   r  r  r-  r  r  r   r  r  s      r9   capsysbinaryr    s      & %^9CCDTUUF$%5w$OOOO
'''

r;   c              #      K   | j         j                            d          }t          t          | d          }|                    |           |                                 |V  |                                 |                                 dS )a  Enable text capturing of writes to file descriptors ``1`` and ``2``.

    The captured output is made available via ``capfd.readouterr()`` method
    calls, which return a ``(out, err)`` namedtuple.
    ``out`` and ``err`` will be ``text`` objects.

    Returns an instance of :class:`CaptureFixture[str] <pytest.CaptureFixture>`.

    Example:

    .. code-block:: python

        def test_system_echo(capfd):
            os.system('echo "hello"')
            captured = capfd.readouterr()
            assert captured.out == "hello\n"
    rh   Tr  N)	r  rj   r  r  rT  r  r  r   r  r  s      r9   capfdr    s      & %^9CCDTUUF$Y4HHHO
'''

r;   c              #      K   | j         j                            d          }t          t          | d          }|                    |           |                                 |V  |                                 |                                 dS )a-  Enable bytes capturing of writes to file descriptors ``1`` and ``2``.

    The captured output is made available via ``capfd.readouterr()`` method
    calls, which return a ``(out, err)`` namedtuple.
    ``out`` and ``err`` will be ``byte`` objects.

    Returns an instance of :class:`CaptureFixture[bytes] <pytest.CaptureFixture>`.

    Example:

    .. code-block:: python

        def test_system_echo(capfdbinary):
            os.system('echo "hello"')
            captured = capfdbinary.readouterr()
            assert captured.out == b"hello\n"

    rh   Tr  N)	r  rj   r  r  rN  r  r  r   r  r  s      r9   capfdbinaryr     s      ( %^9CCDTUUF$_gNNNO
'''

r;   r   )PrR  r   collectionsr  rK   rN   r$   r   tempfiler   typesr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   _pytest.compatr   _pytest.configr   r   _pytest.config.argparsingr   _pytest.deprecatedr   _pytest.fixturesr   r   _pytest.nodesr   r   r   typing_extensionsr    r!   rx  r:   rB   rc   ry   rL   r{   r   r   r   ABCr   r  r   r   r  r6  r-  r8  r<  rN  rT  version_infor[  
namedtupler_  rz  rk   r  r  r  r  r  r|   r;   r9   <module>r     s   1 1 



         				 				 



 # # # # # # " " " " " "                                                                                                                   ! ! ! ! ! ! # # # # # # , , , , , , - - - - - - $ $ $ $ $ $ ' ' ' ' ' ' # # # # # #             ;''''''))))))9:NV     &   51 51D 51 51 51 51p 
d    21 1 1 1 1"" 1 1 1 6 6 6 6 6  6 6 6$ $ $ $ $9 $ $ $I I I I I I I I^$ $ $ $ $#'76? $ $ $@ xH55    C    2@  @  @  @  @ [( @  @  @ F! ! ! ! !~e, ! ! !$    $   "_  _  _  _  _ K' _  _  _ D+ + + + +mE* + + +,; ; ; ; ;c" ; ; ;6 w-
    
GFO   U     ??  T' T' T' T' T'76? T' T' T'n>. ><3D > > > >"u% u% u% u% u% u% u% u%pK K K K KWV_ K K Kb 	J 9^C-@$-L#M    	6 	* >%3H$PT3T)U    	6 	: )N3,?t,K"L    	6 	 	.2Gt2S(T    	  r;   