o
    ٰi$                     @   sr  U d dl Z d dlZd dlZd dlZd dlm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mZmZ d dlmZmZmZmZmZmZmZ d dlmZ eryd 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# e$ dej%dd  ej&dZ'de(d< G dd deZ)d)ddZ*	d*ddddde+de,dd dd!fd"d#Z-d)d$d%Z.d+d'd(Z/dS ),    N)HTTPConnection)OPSPANDATA)Integration)add_global_event_processor)EnvironHeadersshould_propagate_traceadd_http_request_source)SENSITIVE_DATA_SUBSTITUTEcapture_internal_exceptionsensure_integration_enabledis_sentry_urllogger	safe_repr	parse_url)TYPE_CHECKING)Any)Callable)Dict)Optional)List)EventHintz%s.%s.%s   )nameversionbuildzdict[str, object]_RUNTIME_CONTEXTc                   @   s   e Zd ZdZedddZdS )StdlibIntegrationstdlibreturnNc                  C   s*   t   t  t						d	dd} d S )
Neventr   hintr   r    Optional[Event]c                 S   s<   t  td ur| di }t|trd|vrt|d< | S )Ncontextsruntime)
sentry_sdk
get_clientget_integrationr   
setdefault
isinstancedictr   )r!   r"   r$    r,   R/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/integrations/stdlib.pyadd_python_runtime_context5   s
   z@StdlibIntegration.setup_once.<locals>.add_python_runtime_context)r!   r   r"   r   r    r#   )_install_httplib_install_subprocessr   )r.   r,   r,   r-   
setup_once0   s   zStdlibIntegration.setup_oncer    N)__name__
__module____qualname__
identifierstaticmethodr1   r,   r,   r,   r-   r   -   s    r   r    c                     sP   t jt j dddtdtddddddffd	d
} d fdd}| t _|t _d S )Nselfr   methodurlargsr   kwargsr    c                    s  | j }t| dd }|r|}t| d|}n| j}| j}t }	|	td u s*t|	|r7 | ||g|R i |S |}
|
d u sB|
	dsXd|dkrIdpJd|||krSd| pTd	|f }
d }t
  t|
d
d}W d    n1 snw   Y  tjtjd||r~|jntf dd}|tj| |d ur|d|j |tj|j |tj|j |r|tj| j |tj| j  | ||g|R i |}t|	|
rt j|dD ]\}}tdj|||
d |  || q|| _!|S )N_tunnel_host_tunnel_port)zhttp://zhttps://z%s://%s%s%si  httpshttpz:%s F)sanitizez%s %szauto.http.stdlib.httplibopr   originr:   spanzJ[Tracing] Adding `{key}` header {value} to outgoing request to {real_url}.)keyvaluereal_url)"default_portgetattrhostportr&   r'   r(   r   r   
startswithr   r   
start_spanr   HTTP_CLIENTr:   r
   set_datar   HTTP_METHOD
HTTP_QUERYqueryHTTP_FRAGMENTfragmentNETWORK_PEER_ADDRESSNETWORK_PEER_PORTr   get_current_scopeiter_trace_propagation_headersr   debugformat	putheader_sentrysdk_span)r8   r9   r:   r;   r<   rK   tunnel_hostrM   rN   clientrJ   
parsed_urlrG   rvrH   rI   )real_putrequestr,   r-   
putrequestE   sn   
z$_install_httplib.<locals>.putrequestc                    s   t | dd }|d u r | g|R i |S z9 | g|R i |}|t|j |d|j W |  t  t| W d    |S 1 sHw   Y  |S |  t  t| W d    w 1 sew   Y  w )Nr_   reason)	rL   set_http_statusintstatusrR   rf   finishr   r	   )r8   r;   r<   rG   rc   )real_getresponser,   r-   getresponse   s$   


z%_install_httplib.<locals>.getresponse)r8   r   r;   r   r<   r   r    r   )r   re   rl   str)re   rl   r,   )rk   rd   r-   r/   A   s$   F
r/   r;   z	List[Any]r<   zDict[Any, Any]r   positionsetdefault_callbackzOptional[Callable[[Any], Any]]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)r;   r<   r   rn   ro   rc   r,   r,   r-   _init_argument   s$   rq   c                     s   t jjtt								 dfdd} | t j_t jjtt								dfd	d
}|t j_t jj tt 								d fdd}|t j_d S )Nr8   subprocess.Popen[Any]ar   kwr    c              	      sL  t |}t||ddpg }t||dd}d }t|t tfr>t|dk r>t  dtt|}W d    n1 s9w   Y  |d u rFt	|}d }t
jtj|ddK}t
 j|d	D ]\}}	|d u rlt||d
ddd }|	|d| dd < qZ|r|d|  | g|R i |}
|d| j |
W  d    S 1 sw   Y  d S )Nr;   r   cwd	   d    !auto.subprocess.stdlib.subprocessrC   rF   env
   c                 S   s   t | d ur| S 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)listrq   r*   tuplerp   r   joinmaprm   r   r&   rP   r   
SUBPROCESSrZ   r[   upperreplacerR   set_tagpid)r8   rs   rt   r;   ru   descriptionrz   rG   kvrc   )old_popen_initr,   r-   sentry_patched_popen_init   sF   	$z6_install_subprocess.<locals>.sentry_patched_popen_initc                    X   t jtjdd}|d| j  | g|R i |W  d    S 1 s%w   Y  d S Nry   )rD   rE   r   )r&   rP   r   SUBPROCESS_WAITr   r   r8   rs   rt   rG   )old_popen_waitr,   r-   sentry_patched_popen_wait     $z6_install_subprocess.<locals>.sentry_patched_popen_waitc                    r   r   )r&   rP   r   SUBPROCESS_COMMUNICATEr   r   r   )old_popen_communicater,   r-    sentry_patched_popen_communicate  r   z=_install_subprocess.<locals>.sentry_patched_popen_communicate)r8   rr   rs   r   rt   r   r    N)r8   rr   rs   r   rt   r   r    r   )
subprocessPopen__init__r   r   waitcommunicate)r   r   r   r,   )r   r   r   r-   r0      sH   5

r0   r   c                   C   s   t tjddS )Nr   )prefix)r   r}   r~   r,   r,   r,   r-   "get_subprocess_traceparent_headers   s   r   r2   r|   )r    r   )0r}   r   sysplatformhttp.clientr   r&   sentry_sdk.constsr   r   sentry_sdk.integrationsr   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   r   r	   sentry_sdk.utilsr
   r   r   r   r   r   r   typingr   r   r   r   r   r   sentry_sdk._typesr   r   python_implementationversion_infor   r   __annotations__r   r/   rm   rh   rq   r0   r   r,   r,   r,   r-   <module>   sR   
 $

f

$Z