
    iH                       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     s/var/www/vps2.regionflexible.com/Desarrollo/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    %%'$//9TAllxx~2xx "S155cjjA#l';;tD64&AQ!"..K ( 2 2'2266~F*E2/66wy6Q!-"#34 '*8+;+;'<$
dll))
cjj
 D
 L	

 D
 CHH
 cii
 cjj\\N388*syyVVX<YZ
 $,,..223DEqI]I]IaIabpIq
 ;
 L
  0
 
 f
  !2
  fT^^%9%9%;<=!
" U]T#
 	
" 48;3G3G2H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%    ZZ 	DM	 	 	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-KVU\n_cngm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4fg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(;;AWDJJL$/$7DRYY{=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/HD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}}43ryy{m!4	GGLL!1!1Xi[3NO	ZZ 	gX\XeXeffI&I+tF;4G/HIfG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    rww}}T5E5E'F"&++BGGLL9I9IK[,\] 	K**T+%6%@%@'%@%RSZZ 5") 5.9%KY[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.>.> ?MM$**$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    ZZ 	)MM  (	) 	) 	)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'    KKd#)%dD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     KK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#	$VWFtFvFH
 	E..T\^cId.ef  	 2 2vzzRZ\aGb 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,FwPU,V&V7#	*67LTLVLLH
 	E..T\^cId.ef 'W M 	 2 2vzzRZ\aGb 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    eJ&7 r   Tkeyreversec              3  &   K   | ]	  }|d      yw)rD   Nrb   .0r   s     r   	<genexpr>z5_NetworkDebugProfiler.build_report.<locals>.<genexpr>5  s     E6F:.Es   c              3  <   K   | ]  }t        |d    du        yw)r-   N)intr   s     r   r   z5_NetworkDebugProfiler.build_report.<locals>.<genexpr>:  s     "Z3vgd'B#C"Zs   )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   ZZ 	 #mm
 	f[&9!:G 	 &e, 	EF&,[&9&?&?&A 6"{&+5&6  )6.+A6&>RI&11$X.$*>$:"6N ! #'25'9K  A% 
#vj'99#
#s6'?$+F'GG#&,[&9&?&?&A E"{-.u5D5E)	E. '..0 	'K$/
$;k'>R$RK!-1&EV9W9]9]9_2`-aK)*MM+&	'
 	7FEWEE}},,!'l""ZRY"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,,-   =tzz$*;*;*=aSWXcj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DK2=$y-.5 **..!<bAGGIaMaK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,      "
"{ gQ{3's+"
s   c                    | d   S )Nr   rb   )items    r   r   z._format_network_debug_report.<locals>.<lambda>  s    aefgah 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    wz7J 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  		 "
&,V4E-F-L-L-NThrv&w"
 
 	~m_56	LL	LL$% vj!'JTXYZg[gh 
V Egf].C-D$E
f 	CE -11%8K&!!UG1[,=S"AB	C 9CDIIj12!4-3H-=fM`FaMgi2hb)*!F5M?!F:<Ns;SSWX^W_`q_rs  sA  B	

  
LL	LL"#x 0* =QG 

U2hbx)5+@*A%-PWX]^eXfWg h:&s+8E(OC3HV[\fVgUhj	

 99U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CJ3=0   ++//0JKJ'66z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[[*EtL
;ED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6zSCVWI#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FK 	  c :02==? 	.D''-	."''-}(EF224  	B9%AK	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5rI $r   