o
    Zh                      @   sf  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZmZmZmZ d dlmZ erpd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZm Z  zd dl!m"Z" W n e#y   d dl$m"Z" Y nw e% dej&dd  ej'dZ(G dd de
Z)dd Z*dddZ+dd Z,dd Z-dS )    N)OPSPANDATA)Hub)Integration)add_global_event_processor)EnvironHeadersshould_propagate_trace)SENSITIVE_DATA_SUBSTITUTEcapture_internal_exceptionsis_sentry_urllogger	safe_repr	parse_url)TYPE_CHECKING)Any)Callable)Dict)Optional)List)EventHint)HTTPConnectionz%s.%s.%s   )nameversionbuildc                   @   s   e Zd ZdZedd ZdS )StdlibIntegrationstdlibc                  C   s   t   t  tdd } d S )Nc                 S   s:   t jtd ur| di }t|trd|vrt|d< | S )Ncontextsruntime)r   currentget_integrationr   
setdefault
isinstancedict_RUNTIME_CONTEXT)eventhintr    r(   U/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/stdlib.pyadd_python_runtime_context6   s
   z@StdlibIntegration.setup_once.<locals>.add_python_runtime_context)_install_httplib_install_subprocessr   )r*   r(   r(   r)   
setup_once0   s   zStdlibIntegration.setup_onceN)__name__
__module____qualname__
identifierstaticmethodr-   r(   r(   r(   r)   r   -   s    r   c                     s4   t jt j fdd}  fdd}| t _|t _d S )Nc                    s  t j}| j}| j}| j}|td u st||r% | ||g|R i |S |}	|	d u s0|	dsFd|dkr7dp8d|||krAd| pBd|f }	d }
t	  t
|	dd	}
W d    n1 s\w   Y  |jtjd
||
rl|
jntf d}|tj| |
d ur|d|
j |tj|
j |tj|
j  | ||g|R i |}t||	r||D ]\}}tdj|||	d | || q|| _|S )N)zhttp://zhttps://z%s://%s%s%si  httpshttpz:%s F)sanitizez%s %sopdescriptionurlzJ[Tracing] Adding `{key}` header {value} to outgoing request to {real_url}.)keyvaluereal_url)r   r    hostportdefault_portr!   r   r   
startswithr
   r   
start_spanr   ZHTTP_CLIENTr:   r	   set_datar   ZHTTP_METHODZ
HTTP_QUERYqueryZHTTP_FRAGMENTfragmentr   iter_trace_propagation_headersr   debugformat	putheader_sentrysdk_span)selfmethodr:   argskwargshubr>   r?   r@   r=   
parsed_urlspanrvr;   r<   )real_putrequestr(   r)   
putrequestF   sP   
z$_install_httplib.<locals>.putrequestc                    sj   t | dd }|d u r | g|R i |S  | g|R i |}|t|j |d|j |  |S )NrJ   reason)getattrZset_http_statusintstatusrC   rU   finish)rK   rM   rN   rQ   rR   )real_getresponser(   r)   getresponsey   s   z%_install_httplib.<locals>.getresponse)r   rT   r[   )rT   r[   r(   )rZ   rS   r)   r+   A   s   3
r+   c                 C   s   ||v r|| }|dur||}|dur|||< |S |t | k r6| | }|dur,||}|dur4|| |< |S |o;|d}|durD|||< |S )a?  
    given (*args, **kwargs) of a function call, retrieve (and optionally set a
    default for) an argument by either name or position.

    This is useful for wrapping functions with complex type signatures and
    extracting a few arguments without needing to redefine that function's
    entire type signature.
    N)len)rM   rN   r   positionZsetdefault_callbackrR   r(   r(   r)   _init_argument   s$   r^   c                     sX   t jjfdd} | t j_t jjfdd}|t j_t jj  fdd}|t j_d S )Nc              	      sn  t j}|td u r | g|R i |S t|}t||ddp!g }t||dd}d }t|ttfrSt|dk rSt	  d
tt|}W d    n1 sNw   Y  |d u r[t|}d }|jtj|dH}||D ]\}	}
|d u r}t||dd	d
d }|
|d|	 dd < qk|r|d|  | g|R i |}|d| j |W  d    S 1 sw   Y  d S )NrM   r   cwd	   d    r7   env
   c                 S   s   t | ptjS N)r$   osenviron)xr(   r(   r)   <lambda>   s    zH_install_subprocess.<locals>.sentry_patched_popen_init.<locals>.<lambda>SUBPROCESS_-_zsubprocess.cwdsubprocess.pid)r   r    r!   r   listr^   r#   tupler\   r
   joinmapstrr   rB   r   Z
SUBPROCESSrF   upperreplacerC   set_tagpid)rK   akwrO   rM   r_   r9   rc   rQ   kvrR   )old_popen_initr(   r)   sentry_patched_popen_init   s6   	$z6_install_subprocess.<locals>.sentry_patched_popen_initc                       t j}|td u r | g|R i |S |jtjd}|d| j  | g|R i |W  d    S 1 s9w   Y  d S N)r8   rm   )	r   r    r!   r   rB   r   ZSUBPROCESS_WAITru   rv   rK   rw   rx   rO   rQ   )old_popen_waitr(   r)   sentry_patched_popen_wait      $z6_install_subprocess.<locals>.sentry_patched_popen_waitc                    r}   r~   )	r   r    r!   r   rB   r   ZSUBPROCESS_COMMUNICATEru   rv   r   )old_popen_communicater(   r)    sentry_patched_popen_communicate   r   z=_install_subprocess.<locals>.sentry_patched_popen_communicate)
subprocessPopen__init__waitcommunicate)r|   r   r   r(   )r   r{   r   r)   r,      s   /r,   c                   C   s   t tjddS )Nrj   )prefix)r   rf   rg   r(   r(   r(   r)   "get_subprocess_traceparent_headers   s   r   re   ).rf   r   sysplatformZsentry_sdk.constsr   r   Zsentry_sdk.hubr   Zsentry_sdk.integrationsr   Zsentry_sdk.scoper   Zsentry_sdk.tracing_utilsr   r   Zsentry_sdk.utilsr	   r
   r   r   r   r   Zsentry_sdk._typesr   typingr   r   r   r   r   r   r   httplibr   ImportErrorhttp.clientpython_implementationversion_infor   r%   r   r+   r^   r,   r   r(   r(   r(   r)   <module>   s@     	
KT