
    \j&'                         d dl Z d dlmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZmZmZmZmZ d dlmZ erd dlmZ d d	lmZ 	 d d
lmZmZmZmZ dgZ G d de      Z ddZ!ddZ"y# e$ r	  ed      w xY w)    N)OPSPANDATA)IntegrationDidNotEnable)BAGGAGE_HEADER_NAME)add_http_request_sourceshould_propagate_traceadd_sentry_baggage_to_headershas_span_streaming_enabled)SENSITIVE_DATA_SUBSTITUTEcapture_internal_exceptionsensure_integration_enabledlogger	parse_url)TYPE_CHECKING)Any)
Attributes)AsyncClientClientRequestResponsezhttpx is not installedHttpxIntegrationc                   ,    e Zd ZdZde Zedd       Zy)r   httpxz
auto.http.Nc                  ,    t                t                y)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_client     G/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/httpx.py
setup_oncezHttpxIntegration.setup_once&   s     	#%r   returnN)__name__
__module____qualname__
identifieroriginstaticmethodr!   r   r   r    r   r   "   s%    J*&F& &r   c                  n    t         j                  t        t              dfd       } | t         _        y )Nc                    t        j                         }t        |j                        }d }t	               5  t        t        |j                        d      }d d d        |rt         j                  j                  |j                  d|r|j                  nt        t        j                  t        j                  |j                  d      5 }i }|E|j                  |d<   |j                   r|j                   |d<   |j"                  r|j"                  |d<   t%        |t        |j                              rt        j&                         j)                         D ]]  \  }}	t+        j,                  d	| d
|	 d|j                   d       |t.        k(  rt1        |j2                  |	       O|	|j2                  |<   _ 	  | |fi |}
|
j4                  dk\  rdnd|_        |
j4                  |d<   |j9                  |       t	               5  t;        |       d d d        d d d        |
S t        j                  t        j                  |j                  d|r|j                  nt        t        j                        5 }|j=                  t>        j@                  |j                         |p|j=                  d|j                         |j=                  t>        jB                  |j                          |j=                  t>        jD                  |j"                         t%        |t        |j                              rt        j&                         j)                         D ]]  \  }}	t+        j,                  d	| d
|	 d|j                   d       |t.        k(  rt1        |j2                  |	       O|	|j2                  |<   _  | |fi |}
|jG                  |
j4                         |j=                  d|
jH                         d d d        t	               5  t;               d d d        
S # 1 sw Y   xY w# |j9                  |       w xY w# 1 sw Y   3xY w# 1 sw Y   
S xY w# 1 sw Y   fxY w# 1 sw Y   
S xY wNF)sanitize )z	sentry.opzsentry.originzhttp.request.method)name
attributeszurl.fullz	url.queryzurl.fragmentz[Tracing] Adding `z	` header z to outgoing request to .i  errorokzhttp.response.status_code)opr/   r(   urlreason)%
sentry_sdk
get_clientr   optionsr   r   strr5   traces
start_spanmethodr   r   HTTP_CLIENTr   r(   queryfragmentr	   get_current_scopeiter_trace_propagation_headersr   debugr   r
   headersstatus_codestatusset_attributesr   set_datar   HTTP_METHOD
HTTP_QUERYHTTP_FRAGMENTset_http_statusreason_phraseselfrequestkwargsclientis_span_streaming_enabled
parsed_urlstreamed_spanr0   keyvaluervspan	real_sends               r    sendz#_install_httpx_client.<locals>.send3   s   &&($>v~~$N!
(* 	E"3w{{#3eDJ	E %""-- NN&0JNN6OO "$%5%<%<+2>> .  0; +-
)-7^^Jz*!''2<2B2B
;/!**5?5H5H
>2)&#gkk2BC
 #446UUW	9  0YugE]^e^i^i]jjkl "559'//5Q38GOOC09="4;F;B68nn6K7QUM(>@nnJ:;!00< 12 ;+M:;_0;r 	O &&>> NN&0JNN6OO
 (.. ": h22GNNC)MM%8MM("5"5z7G7GHMM("8"8*:M:MN)&#gkk2BC
 #446UUW	9  0YugE]^e^i^i]jjkl "559'//5Q38GOOC09 tW77$$R^^4h(8(89E":H -. .'-. 	{	E 	E^ "00<; ;_0;r 	O": ":H. 	sa   !P!C+Q;1P.,QQQ:E?QQ*!P+.QQQ		QQQ'*Q4)rO   r   rP   r   rQ   r   r#   r   )r   r[   r   r   r[   rZ   s    @r    r   r   0   s2    I 0)<b =bH FKr   c                  X    t         j                  	 	 	 	 	 	 	 	 dfd} | t         _        y )Nc                 t	  K   t        j                         }|j                  t               | |fi | d {   S t	        |j
                        }d }t               5  t        t        |j                        d      }d d d        |rt         j                  j                  |j                  d|r|j                  nt        t        j                  t        j                   |j                  d      5 }i }|E|j                  |d<   |j"                  r|j"                  |d<   |j$                  r|j$                  |d<   t'        |t        |j                              rt        j(                         j+                         D ]]  \  }}	t-        j.                  d	| d
|	 d|j                   d       |t0        k(  rt3        |j4                  |	       O|	|j4                  |<   _ 	  | |fi | d {   }
|
j6                  dk\  rdnd|_        |
j6                  |d<   |j;                  |       t               5  t=        |       d d d        d d d        |
S t        j                  t        j                  |j                  d|r|j                  nt        t        j                         5 }|j?                  t@        jB                  |j                         |p|j?                  d|j                         |j?                  t@        jD                  |j"                         |j?                  t@        jF                  |j$                         t'        |t        |j                              rt        j(                         j+                         D ]]  \  }}	t-        j.                  d	| d
|	 d|j                   d       |t0        k(  rt3        |j4                  |	       O|	|j4                  |<   _  | |fi | d {   }
|jI                  |
j6                         |j?                  d|
jJ                         d d d        t               5  t=               d d d        
S 7  # 1 sw Y   xY w7 y# |j;                  |       w xY w# 1 sw Y   AxY w# 1 sw Y   
S xY w7 # 1 sw Y   nxY w# 1 sw Y   
S xY wwr,   )&r7   r8   get_integrationr   r   r9   r   r   r:   r5   r;   r<   r=   r   r   r>   r(   r?   r@   r	   rA   rB   r   rC   r   r
   rD   rE   rF   rG   r   rH   r   rI   rJ   rK   rL   rM   rN   s               r    r[   z)_install_httpx_async_client.<locals>.send   s>     &&(!!"23;"4;F;;;$>v~~$N!
(* 	E"3w{{#3eDJ	E %""-- NN&0JNN6OO "$%5%<%<+2>> .  0; +-
)-7^^Jz*!''2<2B2B
;/!**5?5H5H
>2)&#gkk2BC
 #446UUW	9  0YugE]^e^i^i]jjkl "559'//5Q38GOOC09=(wA&AAB68nn6K7QUM(>@nnJ:;!00< 12 ;+M:;_0;p 	M &&>> NN&0JNN6OO
 (.. !: h22GNNC)MM%8MM("5"5z7G7GHMM("8"8*:M:MN)&#gkk2BC
 #446UUW	9  0YugE]^e^i^i]jjkl "559'//5Q38GOOC09 %T7=f==$$R^^4h(8(89C!:F -. .'-. 	A <	E 	ET B
 "00<; ;_0;p 	 >=!: !:F. 	s   7R8Q%R8 !QA7R88C+R$Q-1Q*2+Q-R8RRAR8+ER6R7;R2R8R+R8Q'"R8*Q--R  RR	RRR8RR($R8+R50R8)rO   r   rP   r   rQ   r   r#   r   )r   r[   r\   s    @r    r   r      sC      Iee&/e;@e	eN Kr   r"   )#r7   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   sentry_sdk.tracingr   sentry_sdk.tracing_utilsr   r	   r
   r   sentry_sdk.utilsr   r   r   r   r   typingr   r   sentry_sdk._typesr   r   r   r   r   r   ImportError__all__r   r   r   r   r   r    <module>ri      s     * = 2   !,1<< 
&{ &hVj  1
/
001s   
A- -A;