o
    h"                     @   sB  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 d dlmZmZmZmZmZmZmZ d dlmZ ervd 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&G dd deZ'dd Z(dddZ)dd Z*dd Z+dS )    N)HTTPConnection)OPSPANDATA)Integration)add_global_event_processor)EnvironHeadersshould_propagate_trace)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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  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dict_RUNTIME_CONTEXT)eventhintr    r)   `/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/stdlib.pyadd_python_runtime_context2   s
   z@StdlibIntegration.setup_once.<locals>.add_python_runtime_context)_install_httplib_install_subprocessr   )r+   r)   r)   r*   
setup_once,   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  | j }| j}| j}t }|td u st||r& | ||g|R i |S |}	|	d u s1|	dsGd|dkr8dp9d|||krBd| pCd|f }	d }
t	  t
|	dd	}
W d    n1 s]w   Y  tjtjd
||
rm|
jntf dd}|tj| |
d ur|d|
j |tj|
j |tj|
j  | ||g|R i |}t||	rt j|dD ]\}}tdj|||	d | || q|| _|S )N)zhttp://zhttps://z%s://%s%s%si  httpshttpz:%s F)sanitizez%s %szauto.http.stdlib.httplibopr   originurlspanzJ[Tracing] Adding `{key}` header {value} to outgoing request to {real_url}.)keyvaluereal_url)hostportdefault_portr    r!   r"   r   r   
startswithr
   r   
start_spanr   HTTP_CLIENTr;   r	   set_datar   HTTP_METHOD
HTTP_QUERYqueryHTTP_FRAGMENTfragmentr   get_current_scopeiter_trace_propagation_headersr   debugformat	putheader_sentrysdk_span)selfmethodr;   argskwargsrA   rB   rC   clientr@   
parsed_urlr=   rvr>   r?   )real_putrequestr)   r*   
putrequestB   s`   
z$_install_httplib.<locals>.putrequestc                    sx   t | dd }|d u r | g|R i |S z! | g|R i |}|t|j |d|j W |  |S |  w )NrR   reason)getattrset_http_statusintstatusrG   r\   finish)rS   rU   rV   r=   rY   )real_getresponser)   r*   getresponse{   s   
z%_install_httplib.<locals>.getresponse)r   r[   rc   )r[   rc   r)   )rb   rZ   r*   r,   =   s   9
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)rU   rV   r   positionsetdefault_callbackrY   r)   r)   r*   _init_argument   s$   rg   c                     sv   t jjttfdd} | t j_t jjttfdd}|t j_t jj tt  fdd}|t j_d S )Nc              	      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 )NrU   r   cwd	   d    !auto.subprocess.stdlib.subprocessr8   r<   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)listrg   r$   tuplerd   r
   joinmapstrr   r    rE   r   
SUBPROCESSrM   rN   upperreplacerG   set_tagpid)rS   akwrU   rh   descriptionrm   r=   kvrY   )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 Nrl   )r9   r:   rw   )r    rE   r   SUBPROCESS_WAITr   r   rS   r   r   r=   )old_popen_waitr)   r*   sentry_patched_popen_wait      $z6_install_subprocess.<locals>.sentry_patched_popen_waitc                    r   r   )r    rE   r   SUBPROCESS_COMMUNICATEr   r   r   )old_popen_communicater)   r*    sentry_patched_popen_communicate   r   z=_install_subprocess.<locals>.sentry_patched_popen_communicate)
subprocessPopen__init__r   r   waitcommunicate)r   r   r   r)   )r   r   r   r*   r-      s   4		r-   c                   C   s   t tjddS )Nrt   )prefix)r   rp   rq   r)   r)   r)   r*   "get_subprocess_traceparent_headers  s   r   ro   ),rp   r   sysplatformhttp.clientr   r    sentry_sdk.constsr   r   sentry_sdk.integrationsr   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   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&   r   r,   rg   r-   r   r)   r)   r)   r*   <module>   s8    $

SX