U 췀g@sddlZddlmZmZddlmZmZddlmZddl m Z m Z ddl m Z mZmZmZmZddlmZerddlmZdd lmZzdd lmZmZmZmZWnek red YnXd gZGd d d eZddZddZ ddZ!dS)N)OPSPANDATA) Integration DidNotEnable)BAGGAGE_HEADER_NAME)Baggageshould_propagate_trace)SENSITIVE_DATA_SUBSTITUTEcapture_internal_exceptionsensure_integration_enabledlogger parse_url) TYPE_CHECKING)MutableMapping)Any) AsyncClientClientRequestResponsezhttpx is not installedHttpxIntegrationc@s&eZdZdZdeZeddZdS)rhttpxz auto.http.cCsttdS)z httpx has its own transport layer and can be customized when needed, so patch Client.send and AsyncClient.send to support both synchronous and async interfaces. N)_install_httpx_client_install_httpx_async_clientrrK/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/httpx.py setup_once!szHttpxIntegration.setup_onceN)__name__ __module__ __qualname__ identifierorigin staticmethodrrrrrrs cs&tjttfdd}|t_dS)Nc s<d}ttt|jdd}W5QRXtjtjd|j|r@|jnt ft j d}| t j|j|dk r| d|j| t j|j| t j|jttt|jrtD]@\}}tdj|||jd|tkrt|j|q||j|<q||f|}||j| d|j|W5QRSQRXdS) NFsanitize%s %sopnamer urlE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.keyvaluer(reason) r r strr( sentry_sdk start_spanr HTTP_CLIENTmethodr rr set_datar HTTP_METHOD HTTP_QUERYquery HTTP_FRAGMENTfragmentr get_clientget_current_scopeiter_trace_propagation_headersr debugformatr_add_sentry_baggage_to_headersheadersset_http_status status_code reason_phraseselfrequestkwargs parsed_urlspanr+r,rvZ real_sendrrsend0sJ    z#_install_httpx_client..send)rrKr rrKrrJrr,s,rcstjfdd}|t_dS)Nc sttdkr&||f|IdHSd}ttt|jdd}W5QRXtjt j d|j |rf|jnt ftj d}|tj|j |dk r|d|j|tj|j|tj|jttt|jr>tD]Z\}}tdj|||jd|tkr2|jtr2|j|d|7<q||j|<q||f|IdH}||j|d |j |W5QRSQRXdS) NFr"r$r%r(r)r*,r-)!r/r9Zget_integrationrr r r.r(r0rr1r2r r r3rr4r5r6r7r8rr:r;r r<r=rr?getr@rArBrCrJrrrKdsR    z)_install_httpx_async_client..send)rrKrLrrJrr`s 1rcCs>|td}t|}t|dkr&dnd}||||t<dS)zAdd the Sentry baggage to the headers. This function directly mutates the provided headers. The provided sentry_baggage is appended to the existing baggage. If the baggage already contains Sentry items, they are stripped out first. rrMN)rNrrZstrip_sentry_baggagelen)r?Zsentry_baggageZexisting_baggageZstripped_existing_baggage separatorrrrr>s    r>)"r/Zsentry_sdk.constsrrZsentry_sdk.integrationsrrZsentry_sdk.tracingrZsentry_sdk.tracing_utilsrrZsentry_sdk.utilsr r r r r typingrcollections.abcrrrrrrr ImportError__all__rrrr>rrrrs$    48