
    8 fZ                     p   U 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
mZmZmZmZmZm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mZmZ dd	lmZmZ dd
lm Z  dZ!dZ"dZ#da$da%ee&         e'd<   ej(         G d d                      Z) e)            a*e)e'd<   g dZ+ee,         e'd<   d Z-deddfdZ. G d d          Z/dee         ddfdZ0deddfdZ1deddfdZ2de,de,fd Z3d!e,de&fd"Z4d#a5 ej6        d$%          d&             Z7d'edeee,e,e,f                  fd(Z8 G d) d*e          Z9dS )+z
pytest_sugar
~~~~~~~~~~~~

pytest-sugar is a plugin for pytest that changes the default look
and feel of pytest (e.g. progressbar, show tests that fail instantly).

:copyright: see LICENSE for details
:license: BSD, see LICENSE for more details.
    N)ConfigParser)AnyDictListOptionalSequenceTupleUnion)Parser)Session)Item)
BaseReportCollectReport
TestReport)TerminalReporterformat_session_duration)coloredz0.9.7   10LEN_PROGRESS_BARc                      e Zd ZU dZee         ed<   dZee         ed<   dZee         ed<   dZ	ee         ed<   d	Z
ee         ed
<   d	Zee         ed<   dZee         ed<   d	Zee         ed<   dZee         ed<   d	Zee         ed<   dZee         ed<   dZee         ed<   dZdZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed <   d!Zeed"<   dZee         ed#<   d$Zee         ed%<   dZee         ed&<   d' ZdS )(Thememagentaheaderblueskippedgreensuccessyellowwarningredfailerrorxfailedxpassedprogressbarprogressbar_failgreyprogressbar_backgroundcyanpathNu   ✓symbol_passedssymbol_skippedu   ⨯symbol_failedu   ₓsymbol_failed_not_callxsymbol_xfailed_skippedXsymbol_xfailed_failed?symbol_unknownunknownRsymbol_rerunrerunc                 "    t          | |          S N)getattr)selfr1   s     B/var/www/equiseq/venv/lib/python3.11/site-packages/pytest_sugar.py__getitem__zTheme.__getitem__?   s    tQ    )__name__
__module____qualname__r   r   str__annotations__r   r   r    r"   r#   r$   r%   r&   r'   r)   r+   namer,   r.   r/   r0   r2   r4   r6   r7   r9   r:   r@    rA   r?   r   r   %   s        %FHSM%%%#GXc]###$GXc]$$$%GXc]%%%D(3- E8C=   $GXc]$$$"GXc]"""!(K#(((&+hsm+++,2HSM222 D(3-   DM3NCM3"'C'''"%C%%%!$3$$$NC#GXc]###"%L(3-%%%!E8C=!!!         rA   r   THEME) u   ▏   ▎rK      ▍rL      ▌rM      ▋rN      ▊rO      ▉rP   u   █PROGRESS_BAR_BLOCKSc              #      K   | D ]8}t          |t          t          f          rt          |          E d {V  4|V  9d S r<   )
isinstancelisttupleflatten)seqr1   s     r?   rV   rV   W   sa        a$'' 	qzz!!!!!!!!GGGG	 rA   sessionreturnc                 ~    | j         j                            d          }|rt          | j                  |_        d S d S Nterminalreporter)configpluginmanager	getpluginlenitemstests_count)rX   reporters     r?   pytest_collection_finishrd   _   sE    ~+556HIIH 2"7=112 2rA   c                       e Zd Zd ZdS )DeferredXdistPluginc                 t    |j         j                            d          }|rt          |          |_        d S d S r[   )r]   r^   r_   r`   rb   )r>   nodeidsterminal_reporters       r?   %pytest_xdist_node_collection_finishedz9DeferredXdistPlugin.pytest_xdist_node_collection_finishedf   sC     K5??@RSS 	5,/HH)))	5 	5rA   N)rB   rC   rD   rk   rH   rA   r?   rf   rf   e   s#        5 5 5 5 5rA   rf   ra   c                     t          |           dk    ra| d         j        j        }|                    d          }t	          |d          r,|j        dk    r#|xj        t          |           z  c_        dS dS dS dS )z2Update tests_count to not include deselected testsr   r\   rb   N)r`   r]   r^   r_   hasattrrb   )ra   r^   rj   s      r?   pytest_deselectedrn   l   s    
5zzA~~a5)334FGG%}55	8!-11))SZZ7)))) ~	8 	811rA   parserc                     |                      ddd          }|                    ddddd	
           |                    ddddd
           d S )Nzterminal reporting	reportinggeneral)afterz--old-summary
store_true
tb_summaryFz5Show tests that failed instead of one-line tracebacks)actiondestdefaulthelpz--force-sugarforce_sugarz8Force pytest-sugar output even when not in real terminal)getgroup
_addoption)ro   groups     r?   pytest_addoptionr~   x   s~    OO0+YOOOE	E     
H      rA   c                    t                      }|                    dt          j                            d          g           i }t          j        t                    }|D ]U}|j        }|	                    d|          s |
                    d|                                          }|}|dv rd }|||<   V|	                    dd          r|
                    dd          at          di |ad S )Nzpytest-sugar.confz~/.pytest-sugar.conftheme) nonesugarprogressbar_lengthrH   )r   readosr+   
expanduserdataclassesfieldsr   rG   
has_optiongetlowerLEN_PROGRESS_BAR_SETTINGrI   )rX   r]   theme_attributesr   fieldkey	value_strvalues           r?   pytest_sessionstartr      s   ^^F
KK$bg&8&89O&P&PQRRR13,7,>u,E,EF 
& 
&j  #.. 	GS117799	(L  E %"677 M#)::g7K#L#L %%$%%EEErA   textc                 Z    t          j        d          }|                    d|           }|S )Nz
\x1b[^m]*mr   )recompilesub)r   ansi_escapestrippeds      r?   strip_colorsr      s)    *]++Kr4((HOrA   stringc                 :    t          t          |                     S r<   )r`   r   )r   s    r?   real_string_lengthr      s    |F##$$$rA   FT)trylastc                    t           j                                        s|                     d          rda| j                            d          ru	 dd l}ddlm	} |
                    |j                  }||
                    d          k    r&| j                            t                                 n# t          $ r Y nw xY wt          rqt          | dd           sb| j                            d          }t#          |          }| j                            |           | j                            |d           d S d S d S )	Nrz   Txdistr   )versionz1.14
slaveinputr\   )sysstdoutisattygetvalueIS_SUGAR_ENABLEDr^   	haspluginr   	packagingr   Version__version__registerrf   ImportErrorr=   r_   SugarTerminalReporter
unregister)r]   r   r   xdist_versionstandard_reportersugar_reporters         r?   pytest_configurer      sq    z  foom<<  %%g.. 
E		ELLL *)))))#OOE,=>>M 7 777$--.A.C.CDDD  	 	 	D	  Jd C C J"0::;MNN./@AA''(9:::%%n6HIIIIIJ J J Js   B5 5
CCreportc                 <   t           sd S | j        r%t          t          j        t          j                  }n| j        r%t          t          j        t          j                  }n| j        rTt          t          j	        t          j
                  }| j        dk    r$t          t          j        t          j
                  }nT| j        dk    r%t          t          j        t          j                  }n$t          t          j        t          j                  }t%          | d          r\| j        r'dt          t          j        t          j                  dfS | j        r'dt          t          j        t          j                  dfS | j        || j                                        fS )Ncallr:   wasxfailr$   xfailr%   XPASS)r   passedr   rI   r,   r   r   r.   failedr/   r"   whenr0   outcomer9   r:   r6   r7   rm   r2   r$   r4   r%   upper)r   letters     r?   pytest_report_teststatusr      sQ    t} >,em<<	 	>-u}==	 >,ej99;&  U95:FFF	7	"	"+U[99-u}==vz"" > 	4emDD 
 = 	3U]CC  >66>#7#7#9#999rA   c                      e Zd Zd Zd ZdeddfdZdeddfdZd	e	d
e
ddfdZdeeef         ddfdZde	deddfdZdefdZdeeef         de
ddfdZdeeef         de
fdZd"dZd	e	ddfdZdeeef         defdZdeddfdZd#de	dedefdZd"dZdede	fdZdedefdZd"dZd"d Zdeeef         ddfd!Z dS )$r   c                     t          j        | |j                   g | _        d| _        d| _        g | _        g | _        g | _        | 	                                 d S Nr   )
r   __init__r]   
paths_leftrb   tests_takenreportsunreported_errorsprogress_blocksreset_tracked_lines)r>   rc   s     r?   r   zSugarTerminalReporter.__init__   s]    !$888!#!  """""rA   c                 0    i | _         i | _        d| _        d S r   )current_linescurrent_line_numscurrent_line_numr>   s    r?   r   z)SugarTerminalReporter.reset_tracked_lines   s     !# !rA   r   rY   Nc                 X   t          j        | |           |j        d         rT| j                            t
          j                            t          j                    |j        d                              |j	        r,| 
                    d           |                     |           d S d S )Nr   r   )r   pytest_collectreportlocationr   appendr   r+   joingetcwdr   rewriteprint_failurer>   r   s     r?   r   z*SugarTerminalReporter.pytest_collectreport   s    -dF;;;?1 	RO""27<<	V_Q=O#P#PQQQ= 	'LLv&&&&&	' 	'rA   rX   c                    || _         t          j                    | _        | j        rd S d                    t          t          t          j        d d                             }| 	                    dt          j
        d|dt          j        dt          d	d	           | j        j                            | j        | j        
          }|                                 t%          |          D ]}| 	                    |           d S )N.   zTest session starts (platform: z	, Python z	, pytest z, pytest-sugar )T)bold)r]   startdir)_sessiontime_sessionstarttime	no_headerr   maprE   r   version_info
write_lineplatformpytestr   r]   hookpytest_report_header	startpathreverserV   )r>   rX   verinfolineslines        r?   r   z)SugarTerminalReporter.pytest_sessionstart  s   !%> 	F((3sC$4RaR$899:: """  	 
	
 
	
 
	
  55; 6 
 
 	ENN 	" 	"DOOD!!!!	" 	"rA   nodeidmarkupc                     d S r<   rH   )r>   r   resr   s       r?   write_fspath_resultz)SugarTerminalReporter.write_fspath_result  s    rA   c                      fd} |            }                      |          } j                            |d          } j                            | j                  } j        j        }|t          |          z
  t          |          z
  t          z
  }|d|z  z   }	|	|z  }	 	                    |	 j        |z
             d S )Nc                     t           } | sdS j        rt          j                  j        z  nd}t	          || z            }t	          t          || z  |z
  t          t                    dz
  z                      }dt          |dz            z  }|dk    rj        j        k     rd}d j        D             rt          |t          j                  }nt          |t          j                  }t          d	         |z  }|dk    r|t          |         z  }|d
t           t          |          z
  z  z  }d}d }t          j        }|d }	nd|z   }	j        D ]c\  }
}|rt          j        }nt          j        }||
k     r|t          |||
         ||	          z  }|t          ||
         ||	          z  }|
dz   }|}d|t          |          k     r)|t          ||t          |                   ||	          z  }|S )Nr   r      z%i%% d   z100% z99% c                     g | ]	\  }}|d 
S )r   rH   ).0blockr   s      r?   
<listcomp>zSSugarTerminalReporter.insert_progress.<locals>.get_progress_bar.<locals>.<listcomp>1  s!    LLLneWGLLLLrA   rJ   on_)r   rb   floatr   introundr`   rQ   r   r   rI   r"   r   r)   r&   r'   )lengthpflooredremr&   barlast
last_themer)   on_colorr   r   r   r>   s                r?   get_progress_barz?SugarTerminalReporter.insert_progress.<locals>.get_progress_bar"  s   %F r>B>NUd&''$*:::TUA!f*ooGeQZ'1c:M6N6NQR6RSTTUUC!E!c'NN2Kg%%$*:T=M*M*M$ ML(<LLL B%k5:>>%k5=AA%b)G3CQww*3//3*SXX566CDJ%*%A"%- #99"&"6 # #w 3!-EE!2E%<<73tEz?J#Q#QQKws5z5(CCCqy"

c#hhws4#c((?';ZRRRrA   r   rJ   )

report_keyr   r   r   r   _tw	fullwidthr   LEN_RIGHT_MARGIN	overwrite)
r>   r   r
  append_stringr+   current_lineline_numconsole_width
num_spaces	full_lines
   `         r?   insert_progressz%SugarTerminalReporter.insert_progress!  s    2	 2	 2	 2	 2	h )(**v&&)--dB77)--dD4IJJ* ../ //0  	 !3#33	]"	y$"7("BCCCCCrA   r   rel_line_numc                     |dk    r|                      d|z             |                      d|            |dk    r|                      d|z             d S d S )Nr   z[%dAz[%dB)write)r>   r   r  s      r?   r  zSugarTerminalReporter.overwriteh  sp    !JJzL0111 	

;;; !JJzL011111 rA   c                 \    t           sJ | j        j        t          z
  t           z
  t          z
  S r<   )r   r  r  LEN_PROGRESS_PERCENTAGEr  r   s    r?   get_max_column_for_test_statusz4SugarTerminalReporter.get_max_column_for_test_statust  s7     H%& 	
rA   print_filenamec                 &   |                      |          }| xj        dz  c_        t          |j                  |                                 dz
  k    r,d|j        |                                 dz
  dz
   d          z   }n|j        }t
          j                            |          }|r| j        r|j	        d         }|j	        d         }n0|dt          |                    }|t          |           d          }|r	 dt          |t          j                  z   | j        dk    rdndz   t          |t          j                  z   dz   | j        |<   nddt          |          z   z  | j        |<   | j        | j        |<   |                     d	           d S )
Nr   r   z...r      rJ   z::r   
)r  r   r`   fspathr  r   r+   basenameshowlongtestinfor   r   rI   	verbosityrG   r   r   r  )r>   r   r  r+   r"  r#  test_location	test_names           r?   begin_new_linez$SugarTerminalReporter.begin_new_line~  s    v&&"v} C C E E III-$"E"E"G"G!"Ka"O P R RST F
 ]F7##F++ 	?$ 5 & 2"OA.		 &qCMM>'9 :"CMM>#3#34	  -445>A--4427 )UZ001 	 t$$ (+a#f++o'>Dt$'+'<t$

6rA   c                     t          | j        |                     |                             }||                                 k    S r<   )r   r   r  r  )r>   r   len_lines      r?   #reached_last_column_for_test_statusz9SugarTerminalReporter.reached_last_column_for_test_status  s<     &d&89P9P&QRR4>>@@@@rA   c                     d S r<   rH   )r>   r   r   s      r?   pytest_runtest_logstartz-SugarTerminalReporter.pytest_runtest_logstart  	     	rA   c                     d S r<   rH   )r>   r   s     r?   pytest_runtest_logfinishz.SugarTerminalReporter.pytest_runtest_logfinish  r.  rA   c                 4    | j         r	|j        pdn|j        pdS )z@Returns a key to identify which line the report should write to.r   )r$  r   r"  r   s     r?   r  z SugarTerminalReporter.report_key  s&     (,'<WV_"6=CVTV	
rA   c                    t          |          }|sJ |\  }}}| j                            |g                               |           t          s[t
                              d          r-| j        j        t          t
          d d                   z  dz  ant          t
                    a| j
                            |           |j        dk    r$t          d           |                     |           |j        dk    ra| xj        dz  c_        |                     |           t"          j                            t#          j                    |j        d	                   }|j        d
k    s|j        r|                     |          }|| j        vr|                     |d           nT|                     |          r?| j        |                     |                   | j        k    }|                     ||           | j        |         |z   | j        |<   t          | j        r$t=          | j                  t          z  | j        z  nd	          }|j        rj| j         r| j         d         d	         |k    r| j                             |dg           ni| j         r'| j         d         d	         |k    rd| j         d         d<   n:| j         r| j         d         d	         |k    r| j                             |dg           |s|sd S | j!        d	k    r<ddi}	tE          |tF                    r|\  }}	nF|j$        rddi}	n:|j        rddi}	n.tK          |d          rtE          |j&        t                    rddi}	 | j'        tQ          |j)                  g|j        R  }
tK          |d          r| j        *                    d           | xj        dz  c_        tK          |d          r-| j        *                    d|j+        j,        j-         d            | j        j*        |fi |	 | j        *                    d|
z              d| _.        d S d S d S d S )N)r   %r   r   r   r   teardownr   r   r   T)r  Fr!   r   r   r:   r   rh   r!  [z] rJ   )/r   stats
setdefaultr   r   r   endswithr  r  r   r   r   printr   r   r   r  r   r+   r   r   r   r   r  r   r(  r+  r   r   rb   r   r   r   r%  rS   rU   r   rm   r:   _locationlinerE   r"  r  rh   gatewayidcurrentfspath)r>   r   r   catr   wordr+   r  r   r   r   s              r?   pytest_runtest_logreportz.SugarTerminalReporter.pytest_runtest_logreport  s    'f555

sVT
c2&&--f555 	A'0055 AH&-Ecrc-J)K)KKsR !  $''?#@#@ F###>X%%"IIIv&&&;*$$!  (((7<<	V_Q-?@@D;&  FN ??6**D4111##F4#@@@@99&AA < *4??6+B+BC,-  ##FN;;;'+'9$'?&'HDt$#d&''*::T=MMM E
 } ?+ 8t/CB/G/Je/S/S(//????) 8d.B2.Fq.IU.R.R27D(,Q/+ ?t/CB/G/Je/S/S(//>>> $ ~!!dE** 0#'LD&&} 0")4 0"*D!1 11 0js6S6S 0"($)t)#fm*<*<OvOOO66** ,HNN6***))Q.))vv.. G'E6;+>+A'E'E'EFFF"DHN4226222HNN3:...)+D&&&c ! < "!, ,rA   r   r   r   c                 v    | j                             |          }|rt          fd|D                       S dS )Nc                 F    g | ]}t          |d           r	|j        v |S r   )rm   r   )r   r1   r   s     r?   r   z/SugarTerminalReporter.count.<locals>.<listcomp>
  s0    UUUa60B0BUafPTnnnnnrA   r   )r7  r   r`   )r>   r   r   r   s     ` r?   countzSugarTerminalReporter.count  sG    
s## 	WUUUU5UUUVVVqrA   c                    t          j                     | j        z
  }t          dt          |           d           |                     d          dk    rC|                     t          d|                     d          z  t          j                             |                     d          dk    rC|                     t          d|                     d          z  t          j	                             |                     dd	
          dk    r|                     t          d|                     dd	
          z  t          j
                             | j        d         D ]+}|j        dk    r| j        j        j        r|                     |          }nt"          j                            |j        d                   }t"          j                            |j        d                   }|                     |          }d                    t          |t          j                  |rdndt          |t          j                  |r|ndt          |j        d         t          j
                            }|                     d|            -|                     dd
          dk    rE|                     t          d|                     dd
          z  t          j                             |                     d          dk    rC|                     t          d|                     d          z  t          j                             |                     dd
          dk    rE|                     t          d|                     dd
          z  t          j                             |                     d          dk    rC|                     t          d|                     d          z  t          j                             |                     d          dk    rE|                     t          d|                     d          z  t          j                             d S d S )Nz

Results (z):r   r   z   % 5d passedr%   z   % 5d xpassedr   rB  rE  z   % 5d failedr   z{}{}{}:{} {}/r   r5   r   z         - )setupr4  z   % 5d errorr$   z   % 5d xfailedr   )r   rI  r4  z   % 5d skippedr:   z   % 5d rerun
deselectedz   % 5d deselected)r   r   r:  r   rF  r   r   rI   r   r%   r"   r7  r   r]   optionru   _get_decoded_crashliner   r+   dirnamer   r#  _get_lineno_from_reportformatrG   r#   r$   r   r:   r    )r>   session_durationr   	crashliner+   rG   linenos          r?   summary_statsz#SugarTerminalReporter.summary_stats  s   9;;)??I34DEEIIIJJJ::h!##OO(4::h+?+??OO   ::i  1$$OO)DJJy,A,AA5=QQ   ::hY://!33OO$tzz(z'K'KKJ    *X. ; ;;&((;%0  $ ; ;F C CII7??6?1+=>>D7++FOA,>??D!99&AAF . 5 5ej11#+ej11"(1c 2EJ??! !I  9i 9 9::::::h%::;;a??OO#zz(1FzGGIK    ::i  1$$OO)DJJy,A,AA5=QQ   ::i&C:DDqHHOO%zz)2OzPPRM    ::g""OOGOdjj6I6I$I5;WWXXX::l##a''OO,tzz,/G/GGWW     ('rA   c                     |                      |          }t          |d          rSt          j                    }	 |                    |          }n)# t
          $ r d}|                    |d          }Y nw xY w|S )Ndecodezutf-8replace)errors)_getcrashlinerm   localegetpreferredencodingrU  UnicodeDecodeError)r>   r   rQ  encodings       r?   rL  z,SugarTerminalReporter._get_decoded_crashlineS  s    &&v..	9h'' 	I244HI%,,X66		% I I I"%,,Xi,HH			I s   A #A65A6c                     	 |j         j        d         \  }}|j        S # t          $ r Y nw xY w	 |j         j        j        S # t          $ r |j        d         }||dz  }|cY S w xY w)Nr   r   )longreprreprlocation_linesrR  AttributeErrorreprlocationr   )r>   r   r   r   rR  s        r?   rN  z-SugarTerminalReporter._get_lineno_from_report`  s    	$o@COHe?" 	 	 	D		?/66 	 	 	_Q'F!!MMM		s    
++A    A#"A#c                     d S r<   rH   r   s    r?   summary_failuresz&SugarTerminalReporter.summary_failuresr  r.  rA   c                     d S r<   rH   r   s    r?   summary_errorsz$SugarTerminalReporter.summary_errorsw  r.  rA   c                    t          |d          rd S | j        j        j        dk    r| j        j        j        dk    r+|                     |          }|                     |           n|                     |          }t          |dd          }|dk    rd|z   }n|dk    rd|z   }n|d	k    rd
|z   }|                     d           |                     d|           | 	                    |           | 
                                 d S )Nr   nor   r   collectzERROR collecting rI  zERROR at setup of r4  zERROR at teardown of r   u   ―)rm   r]   rK  tbstylerX  r   _getfailureheadliner=   	write_sep_outrep_summaryr   )r>   r   r   msgr   s        r?   r   z#SugarTerminalReporter.print_failure|  s   6:&& 	F;%--{!)V33))&11%%%%..v66vvy999$$-3CCW__.4CCZ''1C7C###uc***$$V,,,  """""rA   )rY   N)rB  )!rB   rC   rD   r   r   r   r   r   r   rE   boolr   r
   r   r  r   r  r  r(  r+  r-  r0  r   r  rA  rU   rF  rS  rL  rN  rc  re  r   rH   rA   r?   r   r      s       # # #" " "
'= 'T ' ' ' '"7 "t " " " "0# d t    EDeM:,E&F ED4 ED ED ED EDN
2c 
2 
2 
2 
2 
2 
2
 
 
 
 
$M:56$HL$	$ $ $ $LAM:56A	A A A A   
s t    

}j'@!A 
c 
 
 
 
K,z K,d K, K, K, K,Z  E #    D D D DL] s    m     $   
   
#E-*C$D # # # # # # #rA   r   ):__doc__r   rY  r   r   r   r   configparserr   typingr   r   r   r   r   r	   r
   r   _pytest.config.argparsingr   _pytest.mainr   _pytest.nodesr   _pytest.reportsr   r   r   _pytest.terminalr   r   	termcolorr   r   r  r  r   r   r   rF   	dataclassr   rI   rQ   rE   rV   rd   rf   rn   r~   r   r   r   r   hookimplr   r   r   rH   rA   r?   <module>rz     sp  	 	 	      				 				 



  % % % % % % D D D D D D D D D D D D D D D D D D  , , , , , ,                   A A A A A A A A A A F F F F F F F F         "& (3- & & &                : uwwu   " " " T#Y   &  2g 2$ 2 2 2 25 5 5 5 5 5 5 5	8Xd^ 	8 	8 	8 	8 	8V     $& &T & & & &4s s    %s %s % % % %   J J J4:Z :HU3S==Q4R : : : :Dd# d# d# d# d#, d# d# d# d# d#rA   