Ë
    ÜÓ^jëH  ã                  ó  — d dl m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ZddlmZ  G d	„ d
«      Z G d„ d«      Z e«       ZdZdd„Zddd„Zdd„Zdd„Zdd„Zdd„Zdd d„Z G d„ d«      Zdd„ZdgZy)!é    )ÚannotationsN)Údefaultdict)Úwraps)ÚPath)ÚAnyé   )Ú	strtoboolc                  ó<   — e Zd Zdd„Zdd„Zddddœ	 	 	 	 	 	 	 d	d„Zy)
Ú_NetworkRequestTracec                óz   — || _         t        j                  «       | _        i | _        t        t        «      | _        y ©N)ÚrequestÚtimeÚperf_counterÚ
started_atÚphase_started_atr   ÚfloatÚ	phases_ms)Úselfr   s     úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/utils/network_logging.pyÚ__init__z_NetworkRequestTrace.__init__!   s-   € ØˆŒÜ×+Ñ+Ó-ˆŒØ "ˆÔÜ$¤UÓ+ˆ�ó    c                ó&  — |j                  dd«      }t        |«      dk7  ry |\  }}}t        j                  «       }|dk(  r|| j                  |<   y |dv r=| j                  j                  |d «      }|�| j                  |xx   ||z
  dz  z  cc<   y y y )Nú.é   é   Ústarted>   ÚfailedÚcompleteéè  )ÚrsplitÚlenr   r   r   Úpopr   )	r   ÚnameÚinfoÚpartsÚ_ÚphaseÚstateÚnowr   s	            r   Útracez_NetworkRequestTrace.trace'   s¢   € Ø—‘˜C Ó#ˆÜˆu‹:˜Š?Øà‰ˆˆ5�%Ü×ÑÓ!ˆØ�IÒØ+.ˆD×!Ñ! %Ò(ØÐ,Ñ,Ø#×4Ñ4×8Ñ8¸ÀÓEÐØÐ+Ø—‘˜uÓ%¨#Ð0@Ñ*@ÀDÑ)HÑHÔ%ð ,ð -r   NF)ÚresponseÚerrorÚstreamc               ó   — t        j                  «       | j                  z
  dz  }| j                  j                  }|j
                  xs d}|j                  }dddœj                  |j                  «      }|d |fv r|n|› d|› �}	d }
d }d }d}|�||j                  }|j                  }|j                  j                  d«      }t        |t        «      r|j                  d	d
¬«      }
n|�t        |«      }
|r	 t!        |j"                  «      }i d| j                  j(                  “d|j                  “d|“d|	“d|“d|j*                  “dt-        |j.                  «      “d|j                  › d|	› |j*                  › |j.                  rdnd› �“d| j                  j0                  j                  d«      xs% | j                  j0                  j                  d«      “d|“d|
“d|“d|“d|“d|“dt3        t5        | j6                  j9                  «       «      «      “d|€d “S t;        |«      j<                  › d |› �“S # t$        j&                  $ r Y �ŒBw xY w)!Nr    Ú éP   i»  )ÚhttpÚhttpsú:FÚhttp_versionÚasciiÚreplace)ÚerrorsÚmethodÚschemeÚhostÚhost_displayÚportÚpathÚ	has_queryÚurlz://z?...Ú
request_idzx-amzn-trace-idzx-request-idÚstatus_codeÚbytes_downloadedÚtotal_msr.   Úresponse_completer   r-   z: )r   r   r   r   r@   r;   r=   Úgetr:   rB   Ú	is_closedÚ
extensionsÚ
isinstanceÚbytesÚdecodeÚstrr"   ÚcontentÚhttpxÚResponseNotReadr9   r>   ÚboolÚqueryÚheadersÚdictÚsortedr   ÚitemsÚtypeÚ__name__)r   r,   r-   r.   rD   r@   r;   r=   Údefault_portr<   r5   rB   rC   rE   Úraw_http_versions                  r   Úbuild_recordz!_NetworkRequestTrace.build_record5   s®  € ô ×%Ñ%Ó'¨$¯/©/Ñ9¸TÑAˆØ�l‰l×ÑˆØ�x‰xŠ~˜2ˆØ�x‰xˆØ "¨SÑ1×5Ñ5°c·j±jÓAˆØ#¨¨lÐ';Ñ;‘tÀDÀ6ÈÈ4È&ÐAQˆàˆØˆØÐØ!ÐØÐØ"×.Ñ.ˆKØ (× 2Ñ 2ÐØ'×2Ñ2×6Ñ6°~ÓFÐÜÐ*¬EÔ2Ø/×6Ñ6°wÀyÐ6ÓQ‘Ø!Ð-Ü"Ð#3Ó4�á ðÜ'*¨8×+;Ñ+;Ó'<Ð$ð
Ø�d—l‘l×)Ñ)ð
à�c—j‘jð
ð �Dð
ð ˜Lð	
ð
 �Dð
ð �C—H‘Hð
ð œ˜cŸi™i›ð
ð �c—j‘j�\  \ N°3·8±8°*ÀsÇyÂy¹VÐVXÐ<YÐZð
ð ˜$Ÿ,™,×.Ñ.×2Ñ2Ð3DÓEÒqÈÏÉ×I]ÑI]×IaÑIaÐbpÓIqð
ð ˜;ð
ð ˜Lð
ð Ð 0ð
ð ˜ð
ð �fð
ð  Ð!2ð
ð  œœf T§^¡^×%9Ñ%9Ó%;Ó<Ó=ð!
ð" ˜U˜]�Tð#
ð 	
ô" 48¸³;×3GÑ3GÐ2HÈÈ5È'Ð0Rð#
ð 	
øô ×,Ñ,ò Úðús   Ã5H6 È6IÉI©r   úhttpx.Request)r$   rL   r%   údict[str, Any]ÚreturnÚNone)r,   zhttpx.Response | Noner-   zBaseException | Noner.   rP   r^   r]   )rW   Ú
__module__Ú__qualname__r   r+   rZ   © r   r   r   r       sE   „ ó,óIð" +/Ø&*Øñ3
ð (ð3
ð $ð	3
ð
 ð3
ð 
ô3
r   r   c                  ó    — e Zd Zd„ Zedd„«       Zdd„Zddd„Zdd„Zdd„Z	ddd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zy)Ú_NetworkDebugProfilerc                óŠ   — g | _         t        j                  «       | _        d| _        d | _        d | _        d | _        d | _        y ©NF)	Ú_recordsÚ	threadingÚLockÚ_lockÚ_enabledÚ_output_pathÚ_original_client_sendÚ_original_async_client_sendÚ_shared_dir©r   s    r   r   z_NetworkDebugProfiler.__init__l   s>   € ØˆŒÜ—^‘^Ó%ˆŒ
ØˆŒØ ˆÔØ%)ˆÔ"Ø+/ˆÔ(ØˆÕr   c                ó   — | j                   S r   )rk   rp   s    r   Úenabledz_NetworkDebugProfiler.enabledu   s   € à�}‰}Ðr   c                óT   — | j                   5  g | _        d d d «       y # 1 sw Y   y xY wr   )rj   rg   rp   s    r   Úclearz_NetworkDebugProfiler.cleary   s%   € Ø�Z‰Zñ 	ØˆDŒM÷	÷ 	ñ 	ús   �ž'Nc                ó.  ‡— | j                   r/|€d nt        j                  |«      | _        | j	                  «        y |€d nt        j                  |«      | _        | j	                  «        | Št
        j                  j                  | _        t
        j                  j                  | _
        t        | j                  «      ˆfd„«       }t        | j                  «      ˆfd„«       }|t
        j                  _        |t
        j                  _        d| _         y )Nc                óH   •—  ‰j                   ‰j                  | |g|¢­i |¤ŽS r   )Ú_send_with_tracerm   ©Úclientr   ÚargsÚkwargsÚprofilers       €r   Úpatched_client_sendz9_NetworkDebugProfiler.enable.<locals>.patched_client_sendŠ   s-   ø€ à,�8×,Ñ,¨X×-KÑ-KÈVÐU\ÐnÐ_cÒnÐgmÑnÐnr   c              Ÿ  ód   •K  —  ‰j                   ‰j                  | |g|¢­i |¤Žƒ d {  –—† S 7 Œ­wr   )Ú_async_send_with_tracern   rx   s       €r   Úpatched_async_client_sendz?_NetworkDebugProfiler.enable.<locals>.patched_async_client_sendŽ   sC   øè ø€ à8˜×8Ñ8Ø×4Ñ4°f¸gðØHLòØPVñ÷ ð ð ús   ƒ&0©.ª0T)rk   ÚosÚfspathrl   rt   rN   ÚClientÚsendrm   ÚAsyncClientrn   r   )r   Úoutput_pathr}   r€   r|   s       @r   Úenablez_NetworkDebugProfiler.enable}   sÛ   ø€ Ø�=Š=Ø(3Ð(;¡ÄÇÁÈ;ÓAWˆDÔØ�J‰JŒLØà$/Ð$7™D¼R¿Y¹YÀ{Ó=SˆÔØ�
‰
ŒàˆÜ%*§\¡\×%6Ñ%6ˆÔ"Ü+0×+<Ñ+<×+AÑ+AˆÔ(ä	ˆt×)Ñ)Ó	*ó	oó 
+ð	oô 
ˆt×/Ñ/Ó	0ó	ó 
1ð	ð
 0Œ�‰ÔØ!:Œ×ÑÔØˆ�r   c                óh   — | j                   €ddl}|j                  d¬«      | _         | j                   S )zFCreate a shared temp directory for xdist workers to dump records into.Nr   Únetwork_debug_)Úprefix)ro   ÚtempfileÚmkdtemp)r   r‹   s     r   Úsetup_shared_dirz&_NetworkDebugProfiler.setup_shared_dir˜   s4   € à×ÑÐ#Ûà'×/Ñ/Ð7GÐ/ÓHˆDÔØ×ÑÐr   c                ó   — || _         y)z3Set the shared directory (called in xdist workers).N)ro   )r   Ú
shared_dirs     r   Úset_shared_dirz$_NetworkDebugProfiler.set_shared_dir    s
   € à%ˆÕr   c           
     óÈ  — | j                   r| j                  sy|xs dt        j                  «       › �}t        j                  j                  | j                   d|› d�«      }| j                  5  | j                  D �cg c]  }i |¥dt        |d   «      i¥‘Œ }}ddd«       t        |«      j                  t        j                  «      d¬«       yc c}w # 1 sw Y   Œ>xY w)zSWrite this process's records to a file in the shared directory (called in workers).NÚpidÚrecords_z.jsonr   úutf-8©Úencoding)ro   rg   r�   Úgetpidr>   Újoinrj   rS   r   Ú
write_textÚjsonÚdumps)r   Ú	worker_idÚ	dump_pathÚrecordÚrecordss        r   Údump_worker_recordsz)_NetworkDebugProfiler.dump_worker_records¤   sÄ   € à×Ò t§}¢}ØØÒ4 3¤r§y¡y£{ mÐ!4ˆ	Ü—G‘G—L‘L ×!1Ñ!1°X¸i¸[ÈÐ3NÓOˆ	Ø�Z‰Zñ 	gØX\×XeÑXeÖfÈfÐI˜&ÐI +¬t°F¸;Ñ4GÓ/HÓIÐfˆGÐf÷	gäˆY‹×"Ñ"¤4§:¡:¨gÓ#6ÀÐ"ÕIùò g÷	gð 	gús   Á/CÁ>CÂCÃCÃC!c           
     ó^  — | j                   r)t        j                  j                  | j                   «      syddl}|j	                  t        j                  j                  | j                   d«      «      D ]Œ  }	 t        j                  t        |«      j                  d¬«      «      }| j                  5  |D ]@  }t        t        |j                  di «      «      |d<   | j                  j                  |«       ŒB 	 ddd«       ŒŽ y# 1 sw Y   ŒxY w# t         t        j"                  f$ r Y Œ·w xY w)zNLoad all worker record files from the shared directory (called in controller).Nr   zrecords_*.jsonr”   r•   r   )ro   r�   r>   ÚisdirÚglobr˜   rš   Úloadsr   Ú	read_textrj   r   r   rF   rg   ÚappendÚOSErrorÚJSONDecodeError)r   Úglob_moduleÚrecord_filerŸ   rž   s        r   Úload_worker_recordsz)_NetworkDebugProfiler.load_worker_records®   sõ   € à×Ò¤r§w¡w§}¡}°T×5EÑ5EÔ'FØÛ"à&×+Ñ+¬B¯G©G¯L©L¸×9IÑ9IÐK[Ó,\Ó]ò 	ˆKðÜŸ*™*¤T¨+Ó%6×%@Ñ%@È'Ð%@Ó%RÓS�Ø—Z‘Zñ 5Ø")ò 5˜Ü.9¼%ÀÇÁÈKÐY[ÓA\Ó.]˜˜{Ñ+ØŸ™×,Ñ,¨VÕ4ñ5÷5øñ	÷5ð 5ûô œT×1Ñ1Ð2ò Ùðús+   Á8:DÂ2ADÃ9DÄD	Ä	DÄD,Ä+D,c                óÂ   — | j                   rSt        j                  j                  | j                   «      r)ddl}|j                  | j                   d¬«       d| _         yyy)z!Remove the shared temp directory.r   NT)Úignore_errors)ro   r�   r>   r¢   ÚshutilÚrmtree)r   r®   s     r   Úcleanup_shared_dirz(_NetworkDebugProfiler.cleanup_shared_dir¾   sJ   € à×Ò¤§¡§¡¨d×.>Ñ.>Ô ?Ûà�M‰M˜$×*Ñ*¸$ˆMÔ?Ø#ˆDÕð	 !@Ðr   c                óò   — | j                   sy | j                  t        j                  _        | j
                  t        j                  _        d| _         d | _        d | _        d | _        | j                  «        y rf   )	rk   rm   rN   rƒ   r„   rn   r…   rl   rt   rp   s    r   Údisablez_NetworkDebugProfiler.disableÆ   sZ   € Ø�}Š}Øà ×6Ñ6Œ�‰ÔØ!%×!AÑ!AŒ×ÑÔØˆŒØ%)ˆÔ"Ø+/ˆÔ(Ø ˆÔØ�
‰
�r   c                ó|   — | j                   5  | j                  j                  |«       d d d «       y # 1 sw Y   y xY wr   )rj   rg   r¦   )r   rž   s     r   Ú_append_recordz$_NetworkDebugProfiler._append_recordÒ   s0   € Ø�Z‰Zñ 	)Ø�M‰M× Ñ  Ô(÷	)÷ 	)ñ 	)ús   �2²;c                óN   ‡‡— |j                   j                  d«      Šdˆˆfd„}|S )Nr+   c                ó@   •— ‰j                  | |«       ‰�	 ‰| |«      S y r   )r+   )r$   r%   Úexisting_tracer+   s     €€r   Úwrapped_tracezA_NetworkDebugProfiler._wrap_trace_callback.<locals>.wrapped_traceÙ   s'   ø€ Ø�K‰K˜˜dÔ#ØÐ)Ù% d¨DÓ1Ð1Ør   ©r$   rL   r%   r]   r^   r   ©rH   rF   ©r   r   r+   r¸   r·   s     ` @r   Ú_wrap_trace_callbackz*_NetworkDebugProfiler._wrap_trace_callbackÖ   s&   ù€ Ø ×+Ñ+×/Ñ/°Ó8ˆö	ð Ðr   c              ƒ  óV   ‡‡K  — |j                   j                  d«      Šdˆˆfd„}|S ­w)Nr+   c              “  óŽ   •K  — ‰j                  | |«       ‰�* ‰| |«      }t        j                  |«      r
|ƒ d {  –—† S |S y 7 Œ­wr   )r+   ÚinspectÚisawaitable)r$   r%   Úresultr·   r+   s      €€r   r¸   zB_NetworkDebugProfiler._awrap_trace_callback.<locals>.wrapped_traceä   sJ   øè ø€ Ø�K‰K˜˜dÔ#ØÐ)Ù'¨¨dÓ3�Ü×&Ñ& vÔ.Ø!'Ÿ<Ð'Ø�Øð (ús   ƒ8A»A¼Ar¹   rº   r»   s     ` @r   Ú_awrap_trace_callbackz+_NetworkDebugProfiler._awrap_trace_callbacká   s*   ùè ø€ Ø ×+Ñ+×/Ñ/°Ó8ˆö	ð Ðùs   „%)c           
     ó–  — t        |«      }t        |j                  «      |_        | j                  ||«      |j                  d<   	  |||g|¢­i |¤Ž}| j                  |j                  ||j                  dd«      ¬«      «       |S # t        $ r8}| j                  |j                  ||j                  dd«      ¬«      «       ‚ d }~ww xY w©Nr+   r.   F)r-   r.   )r,   r.   )r   rS   rH   r¼   Ú	Exceptionr´   rZ   rF   ©	r   Úoriginal_sendry   r   rz   r{   r+   r,   r-   s	            r   rw   z&_NetworkDebugProfiler._send_with_traceï   sÉ   € Ü$ WÓ-ˆÜ! '×"4Ñ"4Ó5ˆÔØ&*×&?Ñ&?ÀÈÓ&Oˆ×Ñ˜7Ñ#ð	Ù$ V¨WÐF°tÒF¸vÑFˆHð
 	×Ñ˜E×.Ñ.¸ÈÏÉÐT\Ð^cÓIdÐ.ÓeÔfØˆøô ò 	Ø×Ñ × 2Ñ 2¸ÀvÇzÁzÐRZÐ\aÓGbÐ 2Ó cÔdØûð	ús   ÁB Â	CÂ3CÃCc           
   �  óÆ  K  — t        |«      }t        |j                  «      |_        | j                  ||«      ƒ d {  –—† |j                  d<   	  |||g|¢­i |¤Žƒ d {  –—† }| j                  |j                  ||j                  dd«      ¬«      «       |S 7 Œ[7 Œ:# t        $ r8}| j                  |j                  ||j                  dd«      ¬«      «       ‚ d }~ww xY w­wrÄ   )r   rS   rH   rÂ   rÅ   r´   rZ   rF   rÆ   s	            r   r   z,_NetworkDebugProfiler._async_send_with_traceý   sÞ   è ø€ Ü$ WÓ-ˆÜ! '×"4Ñ"4Ó5ˆÔØ,0×,FÑ,FÀwÐPUÓ,V×&Vˆ×Ñ˜7Ñ#ð	Ù*¨6°7ÐL¸TÒLÀVÑL×LˆHð
 	×Ñ˜E×.Ñ.¸ÈÏÉÐT\Ð^cÓIdÐ.ÓeÔfØˆð 'Wøð MùÜò 	Ø×Ñ × 2Ñ 2¸ÀvÇzÁzÐRZÐ\aÓGbÐ 2Ó cÔdØûð	üsE   ‚;C!½B¾C!ÁB Á BÁ!B Á%5C!ÂB Â	CÂ&3CÃCÃC!c                ó   — | j                   5  | j                  D �cg c]  }i |¥dt        |d   «      i¥‘Œ }}d d d «       t        t        «      }i }D ]Ë  }|d   j                  «       D ]  \  }}||xx   |z  cc<   Œ |d   |d   |d   f}|j                  ||d   |d   |d   dddt        t        «      dœ«      }|dxx   d	z  cc<   |d
xx   |d
   z  cc<   |dxx   t        |d   d u«      z  cc<   |d   j                  «       D ]  \  }}|d   |xx   |z  cc<   Œ ŒÍ g }	|j                  «       D ]I  }|d
   |d   z  |d<   t        t        |d   j                  «       «      «      |d<   |	j                  |«       ŒK |	j                  d„ d¬«       t        d„ |D «       «      }
| j                  | j                  t        |«      t        d„ |D «       «      |
t        t        |j                  «       «      «      ||	dœS c c}w # 1 sw Y   �ŒÌxY w)Nr   r9   r<   r>   r   g        )r9   r<   r>   ÚcountÚfailuresrD   Úphase_totals_msrÊ   r   rD   rË   r-   rÌ   Úavg_msc                ó   — | d   S ©NrD   rb   )Úroutes    r   ú<lambda>z4_NetworkDebugProfiler.build_report.<locals>.<lambda>4  s   €  e¨JÑ&7€ r   T©ÚkeyÚreversec              3  ó&   K  — | ]	  }|d    –— Œ y­w)rD   Nrb   ©Ú.0rž   s     r   ú	<genexpr>z5_NetworkDebugProfiler.build_report.<locals>.<genexpr>5  s   è ø€ ÒE°6˜F :Õ.ÑEùs   ‚c              3  ó<   K  — | ]  }t        |d    du«      –— Œ y­w)r-   N)ÚintrÖ   s     r   rØ   z5_NetworkDebugProfiler.build_report.<locals>.<genexpr>:  s   è ø€ Ò"ZÈ¤3 v¨g¡¸dÐ'B×#CÑ"Zùs   ‚)rr   r†   Útotal_requestsÚfailed_requestsÚtotal_time_msrÌ   ÚrequestsÚroutes)rj   rg   rS   r   r   rU   Ú
setdefaultrÚ   ÚvaluesrT   r¦   ÚsortÚsumrk   rl   r"   )r   rž   rŸ   rÌ   Úroute_totalsr(   Úduration_msÚ	route_keyÚroute_totalrß   rÝ   s              r   Úbuild_reportz"_NetworkDebugProfiler.build_report  sn  € Ø�Z‰Zñ 	ð #Ÿm™möð
 ð	Øðà¤ f¨[Ñ&9Ó!:óðˆGð ÷	ô &¤eÓ,ˆØˆØò 	EˆFØ&,¨[Ñ&9×&?Ñ&?Ó&Aò 6Ñ"��{Ø Ó&¨+Ñ5Ô&ð6ð   Ñ)¨6°.Ñ+AÀ6È&Á>ÐRˆIØ&×1Ñ1Øà$ XÑ.Ø$*¨>Ñ$:Ø" 6™NØØ !Ø #Ü'2´5Ó'9ñóˆKð ˜Ó  AÑ%Ó Ø˜
Ó# v¨jÑ'9Ñ9Ó#Ø˜
Ó#¤s¨6°'©?À$Ð+FÓ'GÑGÓ#Ø&,¨[Ñ&9×&?Ñ&?Ó&Aò EÑ"��{ØÐ-Ñ.¨uÓ5¸ÑDÔ5ñEð)	Eð. ˆØ'×.Ñ.Ó0ò 	'ˆKØ$/°
Ñ$;¸kÈ'Ñ>RÑ$RˆK˜Ñ!Ü-1´&¸ÐEVÑ9W×9]Ñ9]Ó9_Ó2`Ó-aˆKÐ)Ñ*Ø�M‰M˜+Õ&ð	'ð
 	�‰Ñ7ÀˆÔFÜÑE¸WÔEÓEˆà—}‘}Ø×,Ñ,Ü! '›lÜ"Ñ"ZÐRYÔ"ZÓZØ*Ü#¤F¨?×+@Ñ+@Ó+BÓ$CÓDØØñ	
ð 		
ùòS÷	ñ 	ús   �HœG>·HÇ>HÈHc                ó  — | j                   €y t        | j                   «      }|j                  j                  dd¬«       |j	                  t        j                  | j                  «       dd¬«      d¬«       t        |«      S )NT)ÚparentsÚexist_okr   )ÚindentÚ	sort_keysr”   r•   )	rl   r   ÚparentÚmkdirr™   rš   r›   rè   rL   )r   Úreport_paths     r   Úmaybe_write_reportz(_NetworkDebugProfiler.maybe_write_reportA  sp   € Ø×ÑÐ$Øä˜4×,Ñ,Ó-ˆØ×Ñ× Ñ ¨¸Ð Ô=Ø×ÑœtŸz™z¨$×*;Ñ*;Ó*=ÀaÐSWÔXÐcjÐÔkÜ�;ÓÐr   ©r^   rP   ©r^   r_   r   ©r†   zstr | os.PathLike | Noner^   r_   )r^   ú
str | None)r�   rL   r^   r_   )rœ   rõ   r^   r_   )rž   r]   r^   r_   )r   r\   r+   r   r[   ©r^   r]   )rW   r`   ra   r   Úpropertyrr   rt   r‡   r�   r�   r    r«   r°   r²   r´   r¼   rÂ   rw   r   rè   rñ   rb   r   r   rd   rd   k   sh   „ ò ð òó ðóôó6 ó&ôJóó $ó
ó)ó	óóóó4
ôl r   rd   znetwork_debug_report.jsonc                 ó&  — t         j                  j                  dd«      j                  «       } 	 | rt	        t        | «      «      nd}t         j                  j                  dd«      j                  «       xs t        }||fS # t        $ r d}Y ŒGw xY w)NÚNETWORK_DEBUG_REPORTr0   FÚNETWORK_DEBUG_REPORT_PATH)r�   ÚenvironrF   ÚstriprP   r	   Ú
ValueErrorÚ_DEFAULT_REPORT_PATH)Úenabled_rawrr   r†   s      r   Ú_parse_network_debug_envr   Q  s   € Ü—*‘*—.‘.Ð!7¸Ó<×BÑBÓD€KðÙ2=”$”y Ó-Ô.À5ˆô —*‘*—.‘.Ð!<¸bÓA×GÑGÓIÒaÔMa€KØ�KÐÐøô	 ò ØŠðús   °B ÂBÂBc                ó0   — t         j                  | ¬«       y )N©r†   )Ú_NETWORK_DEBUG_PROFILERr‡   r  s    r   Ú_enable_network_debug_reportr  \  s   € Ü×"Ñ"¨{Ð"Õ;r   c                 ó,   — t         j                  «        y r   )r  r²   rb   r   r   Ú_disable_network_debug_reportr  `  s   € Ü×#Ñ#Õ%r   c                 ó,   — t         j                  «        y r   )r  rt   rb   r   r   Ú_clear_network_debug_reportr  d  s   € Ü×!Ñ!Õ#r   c                 ó*   — t         j                  «       S r   )r  rè   rb   r   r   Ú_get_network_debug_reportr
  h  s   € Ü"×/Ñ/Ó1Ð1r   c                 ó<   — t        «       \  } }| syt        |¬«       y)NFr  T)r   r  )rr   r†   s     r   Ú%_enable_network_debug_report_from_envr  l  s    € Ü3Ó5Ñ€Gˆ[ÙØä ¨[Õ9Ør   c                óà  — t        «       }|d   dk(  rydd|d   › �d|d   › �d|d	   d
›d�g}|d   rJdj                  d„ t        |d   j                  «       d„ d¬«      D «       «      }|j	                  d|› �«       |j	                  d«       |j	                  d«       t        t        |d   d„ d¬«      d |  d¬«      D ]¡  \  }}|d   xs d|d   › �}g }dD ]1  }	|d   j                  |	«      }
|
€Œ|j	                  |	› d|
d
›d�«       Œ3 |rddj                  |«      › d �nd}|d!   r|d"   sd#nd}|j	                  |d$›d%|d&   › d'|d(   › d'|d)   d
›d*|› |› |› �«       Œ£ |j	                  d«       |j	                  d+«       t        |d,   d | d¬«      D ]D  \  }}|j	                  |d$›d%|d&   › d'|d-   › |d.   › d/|d0   › d1|d)   d
›d2|d3   d
›d4|d5   › �«       ŒF d6j                  |«      S )7NrÛ   r   z1Network debug report: no httpx requests captured.zNetwork debug reportzRequests captured: zFailed requests: rÜ   zCumulative request time: rÝ   ú.1fú msrÌ   z, c              3  ó4   K  — | ]  \  }}|› d |d›d�–— Œ y­w)ú=r  r  Nrb   )r×   r(   rå   s      r   rØ   z/_format_network_debug_report.<locals>.<genexpr>‚  s,   è ø€ ò "
á"��{ð ˆg�Q�{ 3Ð' sÔ+ñ"
ùs   ‚c                ó   — | d   S )Nr   rb   )Úitems    r   rÑ   z._format_network_debug_report.<locals>.<lambda>„  s   € ÐaeÐfgÑah€ r   TrÒ   zPhase totals: r0   zSlowest requests:rÞ   c                ó   — | d   S rÏ   rb   )r   s    r   rÑ   z._format_network_debug_report.<locals>.<lambda>‹  s   € °w¸zÑ7J€ r   r   )Ústartr-   zstatus=rB   )Úconnect_tcpÚ	start_tlsÚreceive_response_headersÚreceive_response_bodyr   r  z (ú)r.   rE   z incompletez>2z. r9   ú r@   rD   z ms zSlowest routes:rß   r<   r>   z count=rÊ   z total=z ms avg=rÍ   z ms failures=rË   ú
)r
  r˜   rT   rU   r¦   Ú	enumeraterF   )Úmax_requestsÚ
max_routesÚreportÚlinesÚphase_summaryÚidxrž   ÚstatusÚ
phase_bitsr(   rå   Úphase_suffixÚincomplete_suffixrÐ   s                 r   Ú_format_network_debug_reportr(  u  sÂ  € Ü&Ó(€FØÐÑ 1Ò$ØBð 	Ø
˜fÐ%5Ñ6Ð7Ð8Ø
˜FÐ#4Ñ5Ð6Ð7Ø
# F¨?Ñ$;¸CÐ#@ÀÐDð	€Eð ÐÒ ØŸ	™	ñ "
ä&,¨VÐ4EÑ-F×-LÑ-LÓ-NÑThÐrvÔ&wô"
ó 
ˆð 	�‰�~ m _Ð5Ô6à	‡L�L�ÔØ	‡L�LÐ$Ô%Ü Üˆv�jÑ!Ñ'JÐTXÔYÐZgÐ[gÐhØôò 
‰ˆˆVð ˜‘ÒE g¨f°]Ñ.CÐ-DÐ$EˆØˆ
Øfò 	CˆEØ  Ñ-×1Ñ1°%Ó8ˆKØÑ&Ø×!Ñ! U G¨1¨[¸Ð,=¸SÐ"AÕBð	Cñ 9C˜˜DŸI™I jÓ1Ð2°!Ñ4ÈˆØ-3°HÒ-=ÀfÐM`ÒFa™MÐgiÐØ�‰Ø�2ˆh�b˜ Ñ)Ð*¨!¨F°5©M¨?¸!¸FÀ:Ñ<NÈsÐ;SÐSWÐX^ÐW_Ð`qÐ_rÐsð  sAð  Bõ	
ð
ð  
‡L�L�ÔØ	‡L�LÐ"Ô#Ü  xÑ 0°°*Ð =ÀQÔGò 
‰
ˆˆUØ�‰Ø�2ˆh�b˜˜x™Ð)¨¨5°Ñ+@Ð*AÀ%ÈÁ-ÀÐPWÐX]Ð^eÑXfÐWgð hØ˜:Ñ& sÐ+¨8°E¸(±OÀCÐ3HÈÐV[Ð\fÑVgÐUhðjõ	
ð
ð �9‰9�UÓÐr   c                  ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚNetworkDebugPluginzXPytest plugin that handles all network debug orchestration including xdist coordination.c                óö   — t        «        t        j                  sy t        |d«      st        j	                  «       }|r||_        y y |j                  j                  d«      }|rt        j                  |«       y y )NÚworkerinputÚnetwork_debug_shared_dir)	r  r  rr   Úhasattrr�   Ú_network_debug_shared_dirr,  rF   r�   )r   Úconfigr�   s      r   Úpytest_configurez#NetworkDebugPlugin.pytest_configure¨  sm   € Ü-Ô/Ü&×.Ò.Øô �v˜}Ô-Ü0×AÑAÓCˆJÙØ3=�Õ0ð ð  ×+Ñ+×/Ñ/Ð0JÓKˆJÙÜ'×6Ñ6°zÕBð r   c                óV   — t        |j                  dd«      }|r||j                  d<   yy)zCxdist hook: called on the controller to configure each worker node.r/  Nr-  )Úgetattrr0  r,  )r   Únoder�   s      r   Úpytest_configure_nodez(NetworkDebugPlugin.pytest_configure_node¸  s.   € ä˜TŸ[™[Ð*EÀtÓLˆ
ÙØ;EˆD×ÑÐ7Ò8ð r   c                óÔ   — t        |j                  d«      rR|j                  j                  j                  ddt	        j
                  «       › �«      }t        j                  |¬«       y y )Nr,  Úworkeridr’   )rœ   )r.  r0  r,  rF   r�   r—   r  r    )r   ÚsessionÚ
exitstatusrœ   s       r   Úpytest_sessionfinishz'NetworkDebugPlugin.pytest_sessionfinish¾  sO   € ä�7—>‘> =Ô1ØŸ™×2Ñ2×6Ñ6°zÀSÌÏÉËÈÐCVÓWˆIÜ#×7Ñ7À)Ð7ÕLð 2r   c                ó¶  — t         j                  sy t        |j                  d«      ry t         j	                  «        d }	 t         j                  «       }|j                  dd¬«       t        «       j                  «       D ]  }|j                  |«       Œ |�|j                  d|› �«       t         j                  «        y # t        $ r}d|› �}Y d }~Œd }~ww xY w)Nr,  zFailed to write JSON report: zNetwork debugr  )ÚsepzJSON report: )r  rr   r.  r0  r«   rñ   r§   Úsectionr(  Ú
splitlinesÚ
write_liner°   )r   Úterminalreporterrð   r-   Úlines        r   Úpytest_terminal_summaryz*NetworkDebugPlugin.pytest_terminal_summaryÄ  sÐ   € Ü&×.Ò.Øô Ð#×*Ñ*¨MÔ:Øô 	 ×3Ñ3Ô5àˆð	BÜ1×DÑDÓFˆKð 	× Ñ  °cÐ Ô:Ü0Ó2×=Ñ=Ó?ò 	.ˆDØ×'Ñ'¨Õ-ð	.àÐ"Ø×'Ñ'¨-¸°}Ð(EÔFä×2Ñ2Õ4øô ò 	BØ9¸%¸ÐA�Kûð	Bús   Á C  Ã 	CÃ	CÃCN)rW   r`   ra   Ú__doc__r1  r5  r:  rB  rb   r   r   r*  r*  ¥  s   „ ÙbòCò FòMó5r   r*  c                óL   — | j                   j                  t        «       d«       y)zMRegister the network debug pytest plugin. Single entry point for conftest.py.Únetwork_debugN)ÚpluginmanagerÚregisterr*  )r0  s    r   Úregister_network_debug_pluginrH  Þ  s   € à
×Ñ×!Ñ!Ô"4Ó"6¸ÕHr   rH  )r^   ztuple[bool, str]r   rô   ró   rö   rò   )é   é
   )r  rÚ   r  rÚ   r^   rL   ) Ú
__future__r   r¿   rš   r�   rh   r   Úcollectionsr   Ú	functoolsr   Úpathlibr   Útypingr   rN   Úgenericr	   r   rd   r  rþ   r   r  r  r  r
  r  r(  r*  rH  Ú__all__rb   r   r   ú<module>rR     s™   ðõ #ã Û Û 	Û Û Ý #Ý Ý Ý ã å ÷H
ñ H
÷V] ñ ] ñ@ 0Ó1Ð ð 3Ð ó ô<ó&ó$ó2óô-÷`65ñ 65órIð $ð�r   