ó
    áÅŸgÌ3  ã                  óŒ  • S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSKJ
r
  SSKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   S!S jr!S"S jr"S#S jr# " S S5      r$ " S S5      r% " S S5      r&S$S jr'S$S jr(        S%S jr)S&S jr*S'S  jr+g)(z4Interactive debugging with PDB, the Python Debugger.é    )ÚannotationsN)ÚAny)ÚCallable)Ú	Generator)Úoutcomes)ÚExceptionInfo)ÚCaptureManager)ÚConfig)ÚConftestImportFailure)Úhookimpl)ÚPytestPluginManager)ÚParser)Ú
UsageError)ÚNode)Ú
BaseReport)ÚCallInfoc                óŠ   •  U R                  S5      u  pX4$ ! [         a   n[        R                  " U < S35      UeSnAff = f)z#Validate syntax of --pdbcls option.Ú:z) is not in the format 'modname:classname'N)ÚsplitÚ
ValueErrorÚargparseÚArgumentTypeError)ÚvalueÚmodnameÚ	classnameÚes       ÚR/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/_pytest/debugging.pyÚ_validate_usepdb_clsr      sV   € ðØ"Ÿ[™[¨Ó-Ñˆð
 ÐÐøô	 ó Ü×(Ò(Ø‰iÐ@ÐAó
àð	ûðús   ‚ ˜
A¢=½Ac                óœ   • U R                  S5      nUR                  SSSSS9  UR                  SSS	[        S
S9  UR                  SSSSS9  g )NÚgeneralz--pdbÚusepdbÚ
store_truezDStart the interactive Python debugger on errors or KeyboardInterrupt)ÚdestÚactionÚhelpz--pdbclsÚ
usepdb_clszmodulename:classnamez{Specify a custom interactive Python debugger for use with --pdb.For example: --pdbcls=IPython.terminal.debugger:TerminalPdb)r#   ÚmetavarÚtyper%   z--traceÚtracez(Immediately break when running each test)ÚgetgroupÚ
_addoptionr   )ÚparserÚgroups     r   Úpytest_addoptionr.   )   sw   € Ø�O‰O˜IÓ&€EØ	×ÑØØØØSð	 ñ ð 
×ÑØØØ&Ü!ðFð ñ ð 
×ÑØØØØ7ð	 ò ó    c                ó"  ^• SS K mU R                  S5      (       a$  U R                  R                  [	        5       S5        U R                  S5      (       a$  U R                  R                  [        5       S5        [        R                  R                  TR                  [        R                  [        R                  45        [        R                  Tl	        U R                  [        l
        U [        l        SU4S jjnU R                  U5        g )Nr   r)   Úpdbtracer!   Ú	pdbinvokec                 óx   >• [         R                  R                  5       u  T l        [         l        [         l        g ©N)Ú	pytestPDBÚ_savedÚpopÚ	set_traceÚ_pluginmanagerÚ_config)Úpdbs   €r   ÚfinÚpytest_configure.<locals>.finR   s-   ø€ ô
 ×Ñ× Ñ Ó"ñ		
ØŒMÜÔ$ÜÕr/   ©ÚreturnÚNone)r;   ÚgetvalueÚpluginmanagerÚregisterÚPdbTraceÚ	PdbInvoker5   r6   Úappendr8   r9   r:   Úadd_cleanup)Úconfigr<   r;   s     @r   Úpytest_configurerI   A   s¼   ø€ Ûà‡��w×ÑØ×Ñ×%Ñ%¤h£j°*Ô=Ø‡��x× Ñ Ø×Ñ×%Ñ%¤i£k°;Ô?ä×Ñ×ÑØ	�‰œ	×0Ñ0´)×2CÑ2CÐDôô ×'Ñ'€C„MØ%×3Ñ3„IÔØ„IÔ÷#ð ×Ñ�sÕr/   c                  ó¶   • \ rS rSr% SrSrS\S'   SrS\S'   / rS\S	'   S
r	Sr
S\S'   \SS j5       r\SS j5       r\SS j5       r\S 5       r\SS j5       rSrg)r5   é\   z'Pseudo PDB that defers to the real pdb.NzPytestPluginManager | Noner9   zConfig | Noner:   zKlist[tuple[Callable[..., None], PytestPluginManager | None, Config | None]]r6   r   z"tuple[type[Any], type[Any]] | NoneÚ_wrapped_pdb_clsc                ó2   • U(       a  UR                  5       $ g)NF)Úis_capturing)ÚclsÚcapmans     r   Ú_is_capturingÚpytestPDB._is_capturingg   s   € æØ×&Ñ&Ó(Ð(Ør/   c                óf  • U R                   (       d  SS KnUR                  $ U R                   R                  S5      nU R                  (       a"  U R                  S   U:X  a  U R                  S   $ U(       aZ  Uu  pE [        U5        [        R                  U   nUR                  S5      n[        XgS   5      nUSS   H  n	[        X‰5      nM     OSS KnUR                  nU R                  X�5      nX<4U l        U$ ! [         a*  n
SR                  XE45      n[        SU< SU
 35      U
eS n
A
ff = f)Nr   r&   é   Ú.r   z--pdbcls: could not import z: )r:   r;   ÚPdbrA   rL   Ú
__import__ÚsysÚmodulesr   ÚgetattrÚ	ExceptionÚjoinr   Ú_get_pdb_wrapper_class)rO   rP   r;   r&   r   r   ÚmodÚpartsÚpdb_clsÚpartÚexcr   Úwrapped_clss                r   Ú_import_pdb_clsÚpytestPDB._import_pdb_clsm   s'  € à�{�{Ûð —7‘7ˆNà—[‘[×)Ñ)¨,Ó7ˆ
à×× C×$8Ñ$8¸Ñ$;¸zÓ$IØ×'Ñ'¨Ñ*Ð*æØ!+ÑˆGðÜ˜7Ô#Ü—k‘k 'Ñ*�ð "Ÿ™¨Ó,�Ü! #¨Q¡xÓ0�Ø! ! "›I�DÜ% gÓ4’Gò &ó à—g‘gˆGà×0Ñ0°ÓAˆØ *Ð8ˆÔØÐøô ó ØŸ™ 'Ð!5Ó6�Ü Ø1°%±¸"¸S¸EÐBóàðûðús   Á<AC< Ã<
D0Ä%D+Ä+D0c                ó4   ^ ^^• SS K m " UUU 4S jSU5      nU$ )Nr   c                  ó|   >^ • \ rS rSr YrSrU U4S jrU UU4S jr\=rr	U U4S jr
\
r\
rU 4S jrU 4S jrSrU =r$ )	Ú:pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapperé˜   Fc                óz   >• T=R                   S-  sl         [        TU ]	  U5      nT=R                   S-  sl         U$ )NrT   )Ú_recursive_debugÚsuperÚdo_debug©ÚselfÚargÚretÚ	__class__rO   s      €€r   rm   ÚCpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_debugœ   s9   ø€ Ø×$Ò$¨Ñ)Õ$Ü‘gÑ& sÓ+�Ø×$Ò$¨Ñ)Õ$Ø�
r/   c                óT  >• [         TU ]  U5      nTR                  S:X  aÃ  TR                  c   eTR                  R                  TR                  5      nUR                  5         U R                  n[        R                  U5      nU(       aE  US:X  a  UR                  SS5        OUR                  SSU S35        Uc   eUR                  5         OUR                  SS5        TR                  c   eTR                  R                  R                  TR                  U S9  S	U l        U$ )
Nr   ÚglobalÚ>z#PDB continue (IO-capturing resumed)z'PDB continue (IO-capturing resumed for Ú)zPDB continue©rH   r;   T)rl   Údo_continuerk   r:   rH   Úcreate_terminal_writerÚlineÚ_pytest_capmanr5   rQ   ÚsepÚresumer9   ÚhookÚpytest_leave_pdbÚ
_continued)	ro   rp   rq   ÚtwrP   Ú	capturingrr   Ú_pytestrO   s	         €€€r   ry   ÚFpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_continue¢   s	  ø€ Ü‘gÑ)¨#Ó.�Ø×'Ñ'¨1Ó,ØŸ;™;Ñ2Ð2Ð2Ø Ÿ™×>Ñ>¸s¿{¹{ÓK�BØ—G‘G”Ià!×0Ñ0�FÜ )× 7Ñ 7¸Ó ?�IÞ Ø$¨Ó0ØŸF™F 3Ð(MÕNàŸF™FØ #Ø"IÈ)ÈÐTUÐ Vôð  &Ñ1Ð1Ð1ØŸ™�àŸ™˜s NÔ3Ø×)Ñ)Ñ5Ð5Ð5Ø×"Ñ"×'Ñ'×8Ñ8ÀÇÁÐQUÐ8ÑVØ"&�”Ø�
r/   c                ór   >• [         TU ]  U5      nTR                  S:X  a  [        R                  " S5        U$ )zÐRaise Exit outcome when quit command is used in pdb.

This is a bit of a hack - it would be better if BdbQuit
could be handled, but this would require to wrap the
whole pytest run, and adjust the report etc.
r   úQuitting debugger)rl   Údo_quitrk   r   Úexitrn   s      €€r   rˆ   ÚBpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_quit¾   s3   ø€ ô ‘g‘o cÓ*�à×'Ñ'¨1Ó,Ü—M’MÐ"5Ô6à�
r/   c                óª   >• [         TU ]  X5      nU(       d;  U R                  (       a*  U R                  (       a  U R                  R	                  SS9  U$ )z^Suspend on setup().

Needed after do_continue resumed, and entering another
breakpoint again.
T©Úin_)rl   Úsetupr�   r|   Úsuspend_global_capture)ro   ÚfÚtbrq   rr   s       €r   rŽ   Ú@pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.setupÏ   sC   ø€ ô ‘g‘m AÓ*�Þ˜tŸŸð ×*×*Ø×+Ñ+×BÑBÀtÐBÑLØ�
r/   c                ó$  >• [         TU ]  X5      u  p4Ucy  [        S[        U5      S-
  5      nU(       aZ  X4   S   R                  R                  SS5      (       a4  US-  nU(       a(  X4   S   R                  R                  SS5      (       a  M4  X44$ )Nr   rT   Ú__tracebackhide__F)rl   Ú	get_stackÚmaxÚlenÚf_localsÚget)ro   r�   ÚtÚstackÚirr   s        €r   r•   ÚDpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.get_stackÝ   sƒ   ø€ Ü ™7Ñ,¨QÓ2‘�Ø‘9ä˜Aœs 5›z¨A™~Ó.�AÞ ¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈe× TÑ TØ˜Q™˜ö  ¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈe× TÓ Tà�x�r/   )r�   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r|   r�   rm   ry   Údo_cÚdo_contrˆ   Údo_qÚdo_exitrŽ   r•   Ú__static_attributes__Ú__classcell__)rr   r„   rP   rO   s   @€€€r   ÚPytestPdbWrapperrh   ˜   sC   ù† Ù#ˆNØˆJö÷ð4 )Ð(ˆD�7öð ˆDØˆGõ÷ ó  r/   r¨   )Ú_pytest.config)rO   r`   rP   r¨   r„   s   ` ` @r   r]   Ú pytestPDB._get_pdb_wrapper_class”   s#   ú€ ã÷L	 ñ L	 ˜wô L	 ð\  Ðr/   c                ó   • SSK nU R                  c  SnOU R                  R                  S5      nU(       a  UR                  SS9  U R                  (       aÑ  UR
                  R                  U R                  5      nUR                  5         U R                  S:X  aŒ  UR                  SS5      nUb  UR                  SU5        OdU R                  U5      nUS:X  a  UR                  SS	U S
35        O6U(       a  UR                  SS	U SU S35        OUR                  SS	U 35        U R                  U5      " S0 UD6n	U R                  (       a.  U R                  R                  R                  U R                  U	S9  U	$ )z4Initialize PDB debugging, dropping any IO capturing.r   NÚcapturemanagerTrŒ   Úheaderrv   ru   zPDB z (IO-capturing turned off)z (IO-capturing turned off for rw   rx   © )r©   r9   Ú	getpluginÚsuspendr:   rH   rz   r{   rk   r7   r}   rQ   rd   r   Úpytest_enter_pdb)
rO   ÚmethodÚargsÚkwargsr„   rP   r‚   r­   rƒ   Ú_pdbs
             r   Ú	_init_pdbÚpytestPDB._init_pdbè   sO  € ó 	à×ÑÑ%Ø,0‰Fà×'Ñ'×1Ñ1Ð2BÓCˆFÞØ�N‰N˜tˆNÑ$à�;�;Ø—‘×6Ñ6°s·{±{ÓCˆBØ�G‰GŒIà×#Ñ# qÓ(àŸ™ H¨dÓ3�ØÑ%Ø—F‘F˜3 Õ'à #× 1Ñ 1°&Ó 9�IØ  HÓ,ØŸ™˜s d¨6¨(Ð2LÐ$MÕNÞ"ØŸ™ØØ" 6 (Ð*HÈÈÐSTÐUõð
 Ÿ™˜s d¨6¨( OÔ4à×"Ñ" 6Ô*Ñ4¨VÑ4ˆà××Ø×Ñ×#Ñ#×4Ñ4¸C¿K¹KÈTÐ4ÑRØˆr/   c                ó�   • [         R                  " 5       R                  nU R                  " S/UQ70 UD6nUR	                  U5        g)zBInvoke debugging via ``Pdb.set_trace``, dropping any IO capturing.r8   N)rX   Ú	_getframeÚf_backr¶   r8   )rO   r³   r´   Úframerµ   s        r   r8   ÚpytestPDB.set_trace  s9   € ô —’“×&Ñ&ˆØ�}Š}˜[Ð:¨4Ò:°6Ñ:ˆØ�‰�uÕr/   r®   )rP   úCaptureManager | Noner?   z
str | bool)rP   r½   r>   )rž   rŸ   r    r¡   Ú__doc__r9   Ú__annotations__r:   r6   rk   rL   ÚclassmethodrQ   rd   r]   r¶   r8   r¦   r®   r/   r   r5   r5   \   s©   ‡ Ù1à15€NÐ.Ó5Ø!€Gˆ]Ó!ð 	ð ð ó ð ÐØ;?ÐÐ8Ó?àóó ðð
 ó$ó ð$ðL óQ ó ðQ ðf ñ$ó ð$ðL óó ór/   r5   c                  ó8   • \ rS rSr        SS jrSS jrSrg)rE   i  c                óÌ  • UR                   R                  R                  S5      nU(       a_  UR                  SS9  UR	                  5       u  pV[
        R                  R                  U5        [
        R                  R                  U5        UR                  c   e[        UR                  R                  [        R                  5      (       d  [        XR                  U5        g g )Nr¬   TrŒ   )rH   rB   r¯   r�   Úread_global_capturerX   ÚstdoutÚwriteÚexcinfoÚ
isinstancer   ÚunittestÚSkipTestÚ
_enter_pdb)ro   ÚnodeÚcallÚreportrP   ÚoutÚerrs          r   Úpytest_exception_interactÚ#PdbInvoke.pytest_exception_interact  s¨   € ð —‘×*Ñ*×4Ñ4Ð5EÓFˆÞØ×)Ñ)¨dÐ)Ñ3Ø×1Ñ1Ó3‰HˆCÜ�J‰J×Ñ˜SÔ!Ü�J‰J×Ñ˜SÔ!Ø�|‰|Ñ'Ð'Ð'ä˜$Ÿ,™,×,Ñ,¬h×.?Ñ.?×@Ñ@Ü�tŸ\™\¨6Õ2ð Ar/   c                ó0   • [        U5      n[        U5        g r4   )Ú_postmortem_tracebackÚpost_mortem)ro   rÆ   r‘   s      r   Úpytest_internalerrorÚPdbInvoke.pytest_internalerror&  s   € Ü" 7Ó+ˆÜ�B�r/   r®   N)rË   r   rÌ   zCallInfo[Any]rÍ   r   r?   r@   )rÆ   úExceptionInfo[BaseException]r?   r@   )rž   rŸ   r    r¡   rÐ   rÕ   r¦   r®   r/   r   rE   rE     s,   † ð3Øð3Ø -ð3Ø7Að3à	ô3÷r/   rE   c                  ó0   • \ rS rSr\" SS9SS j5       rSrg)rD   i+  T)Úwrapperc              #  ó(   #   • [        U5        S v •$ 7fr4   )Ú wrap_pytest_function_for_tracing)ro   Ú
pyfuncitems     r   Úpytest_pyfunc_callÚPdbTrace.pytest_pyfunc_call,  s   é € ä(¨Ô4Úˆùs   ‚r®   N)r?   zGenerator[None, object, object])rž   rŸ   r    r¡   r   rÝ   r¦   r®   r/   r   rD   rD   +  s   † Ù�dÑóó ór/   rD   c                óš   ^^• [         R                  S5      mU R                  m[        R                  " T5      SUU4S jj5       nXl        g)zåChange the Python function object of the given Function item by a
wrapper which actually enters pdb before calling the python function
itself, effectively leaving the user in the pdb prompt in the first
statement of the function.Úruncallc                 ó\   >• [         R                  " T/U Q70 UD6nTR                  U5        g r4   )Ú	functoolsÚpartialrà   )r³   r´   Úfuncrµ   Útestfunctions      €€r   rÙ   Ú1wrap_pytest_function_for_tracing.<locals>.wrapper=  s)   ø€ ä× Ò  Ð?°Ò?¸Ñ?ˆØ�‰�TÕr/   Nr>   )r5   r¶   Úobjrâ   Úwraps)rÜ   rÙ   rµ   rå   s     @@r   rÛ   rÛ   2  sB   ù€ ô
 ×Ñ˜yÓ)€DØ—>‘>€Lô
 ‡_‚_�\Ó"÷ó #ðð …Nr/   c                ó\   • U R                   R                  S5      (       a  [        U 5        gg)z]Wrap the given pytestfunct item for tracing support if --trace was given in
the command line.r)   N)rH   rA   rÛ   )rÜ   s    r   Ú&maybe_wrap_pytest_function_for_tracingrê   E  s(   € ð ×Ñ×!Ñ! '×*Ñ*Ü(¨Õ4ð +r/   c                óX  • U R                   R                  R                  S5      R                  nUR	                  5         U R                   R
                  R                  nSUR                  4SUR                  4SUR                  44 HK  u  pVXES4;   d  M  U(       d  M  UR                  SSU-   5        USS  S	:X  a  US S nUR	                  U5        MM     UR                  SS
5        UR                  U5        UR                  SS5        [        U5      nSUl        [        U5        U$ )NÚterminalreporterrÄ   ÚstderrÚlogÚallrv   z	captured éÿÿÿÿÚ
Ú	tracebackzentering PDBT)rH   rB   r¯   Ú_twr{   ÚoptionÚshowcaptureÚ	capstdoutÚ	capstderrÚcaplogr}   Ú
toterminalrÓ   Ú	_pdbshownrÔ   )rË   rÆ   Úrepr‚   rõ   ÚsectionnameÚcontentr‘   s           r   rÊ   rÊ   L  s  € ð 
�‰×	"Ñ	"×	,Ñ	,Ð-?Ó	@×	DÑ	D€BØ‡G�G„Ià—+‘+×$Ñ$×0Ñ0€Kð 
�3—=‘=Ð!Ø	�3—=‘=Ð!Ø	�—
‘
Ðó!Ñˆð
 ¨Ð.Õ.·7°7Ø�F‰F�3˜ kÑ1Ô2Ø�r�sˆ|˜tÓ#Ø! # 2˜,�Ø�G‰G�GÖñ!ð ‡F�Fˆ3�ÔØ‡N�N�2ÔØ‡F�Fˆ3�ÔÜ	˜wÓ	'€BØ€C„MÜ�„OØ€Jr/   c                óv  • SSK Jn  [        U R                  U5      (       a  U R                  R                  S   $ [        U R                  [
        5      (       aC  U R                  R                  R                  c   eU R                  R                  R                  $ U R                  c   eU R                  S   $ )Nr   )ÚUnexpectedExceptioné   )	Údoctestrÿ   rÇ   r   Úexc_infor   ÚcauseÚ__traceback__Ú_excinfo)rÆ   rÿ   s     r   rÓ   rÓ   k  s—   € Ý+ä�'—-‘-Ð!4×5Ñ5ð �}‰}×%Ñ% aÑ(Ð(Ü	�G—M‘MÔ#8×	9Ñ	9ð �}‰}×"Ñ"×0Ñ0Ñ<Ð<Ð<Ø�}‰}×"Ñ"×0Ñ0Ð0à×ÑÑ+Ð+Ð+Ø×Ñ Ñ"Ð"r/   c                óÂ   • [         R                  S5      nUR                  5         UR                  S U 5        UR                  (       a  [
        R                  " S5        g g )NrÔ   r‡   )r5   r¶   ÚresetÚinteractionÚquittingr   r‰   )rš   Úps     r   rÔ   rÔ   |  sB   € Ü×Ñ˜MÓ*€AØ‡G�G„IØ‡M�M�$˜ÔØ‡z‡zÜ�ŠÐ)Õ*ð r/   )r   Ústrr?   ztuple[str, str])r,   r   r?   r@   )rH   r
   r?   r@   r>   )rË   r   rÆ   r×   rû   r   r?   r   )rÆ   r×   r?   útypes.TracebackType)rš   r  r?   r@   ),r¾   Ú
__future__r   r   râ   rX   ÚtypesÚtypingr   r   r   rÈ   r„   r   Ú_pytest._coder   Ú_pytest.capturer	   r©   r
   r   r   r   Ú_pytest.config.argparsingr   Ú_pytest.config.exceptionsr   Ú_pytest.nodesr   Ú_pytest.reportsr   Ú_pytest.runnerr   r   r.   rI   r5   rE   rD   rÛ   rê   rÊ   rÓ   rÔ   r®   r/   r   Ú<module>r     s²   ðñ ;å "ã Û Û 
Û Ý Ý Ý Û å Ý 'Ý *Ý !Ý 0Ý #Ý .Ý ,Ý 0Ý Ý &Ý #ô ôô0÷6xñ x÷vñ ÷(ñ ôô&5ðØ
ðØ5ðØ<Fðàôô>#õ"+r/   