Ë
    õ�Djê  ã                   óö   — 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 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„ Zd„ Z d„ Z!y# e$ r	  ed«      ‚w xY w)é    N)ÚOPÚSPANDATA)ÚIntegrationÚDidNotEnable)ÚBAGGAGE_HEADER_NAME)ÚBaggageÚshould_propagate_trace)ÚSENSITIVE_DATA_SUBSTITUTEÚcapture_internal_exceptionsÚensure_integration_enabledÚloggerÚ	parse_url)ÚTYPE_CHECKING)ÚMutableMapping)ÚAny)ÚAsyncClientÚClientÚRequestÚResponsezhttpx is not installedÚHttpxIntegrationc                   ó*   — e Zd ZdZde› �Zed„ «       Zy)r   Úhttpxz
auto.http.c                  ó,   — 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© ó    úaC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/httpx.pyÚ
setup_oncezHttpxIntegration.setup_once!   s   € ô 	ÔÜ#Õ%r   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginÚstaticmethodr   r   r   r   r   r      s%   „ Ø€JØ˜*˜Ð&€Fàñ&ó ñ&r   c                  ól   ‡— t         j                  Št        t        ‰«      ˆfd„«       } | t         _        y )Nc           	      ó’  •— d }t        «       5  t        t        |j                  «      d¬«      }d d d «       t	        j
                  t        j                  |j                  ›d|r|j                  nt        ›�t        j                  ¬«      5 }|j                  t        j                  |j                  «       |�p|j                  d|j                  «       |j                  t        j                  |j                   «       |j                  t        j"                  |j$                  «       t'        t	        j(                  «       t        |j                  «      «      rŠt	        j*                  «       j-                  «       D ]e  \  }}t/        j0                  dj3                  |||j                  ¬«      «       |t4        k(  rt7        |j8                  |«       ŒW||j8                  |<   Œg  ‰| |fi |¤Ž}|j;                  |j<                  «       |j                  d|j>                  «       |cd d d «       S # 1 sw Y   �ŒxY w# 1 sw Y   y xY w)	NF©Úsanitizeú ©ÚopÚnamer$   ÚurlúE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.©ÚkeyÚvaluer.   Úreason) r   r   Ústrr.   Ú
sentry_sdkÚ
start_spanr   ÚHTTP_CLIENTÚmethodr
   r   r$   Úset_datar   ÚHTTP_METHODÚ
HTTP_QUERYÚqueryÚHTTP_FRAGMENTÚfragmentr	   Ú
get_clientÚget_current_scopeÚiter_trace_propagation_headersr   ÚdebugÚformatr   Ú_add_sentry_baggage_to_headersÚheadersÚset_http_statusÚstatus_codeÚreason_phrase©	ÚselfÚrequestÚkwargsÚ
parsed_urlÚspanr1   r2   ÚrvÚ	real_sends	           €r   Úsendz#_install_httpx_client.<locals>.send0   s×  ø€ ð ˆ
Ü(Ó*ñ 	EÜ"¤3 w§{¡{Ó#3¸eÔDˆJ÷	Eô ×"Ñ"Ü�~‰~ð —“Ù",�
—’Ô2KÐKðô
 $×*Ñ*ô
ð $	ð Ø�M‰Mœ(×.Ñ.°·±Ô?ØÐ%Ø—‘˜e Z§^¡^Ô4Ø—‘œh×1Ñ1°:×3CÑ3CÔDØ—‘œh×4Ñ4°j×6IÑ6IÔJä%¤j×&;Ñ&;Ó&=¼sÀ7Ç;Á;Ó?OÔPô  ×1Ñ1Ó3×RÑRÓTò5ñ ØØä—L‘LØ_×fÑfØ #¨5°g·k±kð gó ôð Ô1Ò1Ü6°w·±ÈÕNà/4˜Ÿ™¨Ò,ð5ñ ˜4 Ñ3¨FÑ3ˆBà× Ñ  §¡Ô0Ø�M‰M˜( B×$4Ñ$4Ô5à÷I$	ñ $	÷	Eñ 	Eú÷$	ð $	ús   Ž!H0ÂFH=È0H:È=I)r   rQ   r   r   ©rQ   rP   s    @r   r   r   ,   s0   ø€ ä—‘€IäÔ 0°)Ó<ó*ó =ð*ðX „F…Kr   c                  óF   ‡— t         j                  Šˆfd„} | t         _        y )Nc           	   ›   ól  •K  — t        j                  «       j                  t        «      € ‰| |fi |¤Žƒ d {  –—† S d }t	        «       5  t        t        |j                  «      d¬«      }d d d «       t        j                  t        j                  |j                  ›d|r|j                  nt        ›�t        j                  ¬«      5 }|j                  t        j                   |j                  «       |�p|j                  d|j                  «       |j                  t        j"                  |j$                  «       |j                  t        j&                  |j(                  «       t+        t        j                  «       t        |j                  «      «      r­t        j,                  «       j/                  «       D ]ˆ  \  }}t1        j2                  dj5                  |||j                  ¬«      «       |t6        k(  r:|j8                  j;                  t6        «      r|j8                  |xx   d|z   z  cc<   Œz||j8                  |<   ŒŠ  ‰| |fi |¤Žƒ d {  –—† }|j=                  |j>                  «       |j                  d	|j@                  «       |cd d d «       S 7 �Œ^# 1 sw Y   �Œ1xY w7 ŒV# 1 sw Y   y xY w­w)
NFr(   r*   r+   r.   r/   r0   ú,r3   )!r5   r?   Úget_integrationr   r   r   r4   r.   r6   r   r7   r8   r
   r$   r9   r   r:   r;   r<   r=   r>   r	   r@   rA   r   rB   rC   r   rE   ÚgetrF   rG   rH   rI   s	           €r   rQ   z)_install_httpx_async_client.<locals>.sendd   s9  øè ø€ ä× Ñ Ó"×2Ñ2Ô3CÓDÐLÙ" 4¨Ñ;°FÑ;×;Ð;àˆ
Ü(Ó*ñ 	EÜ"¤3 w§{¡{Ó#3¸eÔDˆJ÷	Eô ×"Ñ"Ü�~‰~ð —“Ù",�
—’Ô2KÐKðô
 $×*Ñ*ô
ð &	ð Ø�M‰Mœ(×.Ñ.°·±Ô?ØÐ%Ø—‘˜e Z§^¡^Ô4Ø—‘œh×1Ñ1°:×3CÑ3CÔDØ—‘œh×4Ñ4°j×6IÑ6IÔJä%¤j×&;Ñ&;Ó&=¼sÀ7Ç;Á;Ó?OÔPô  ×1Ñ1Ó3×RÑRÓTò5ñ ØØä—L‘LØ_×fÑfØ #¨5°g·k±kð gó ôð
 Ô1Ò1°g·o±o×6IÑ6IÜ+ô7ð  Ÿ™¨Ó,°°e±Ñ;Ô,à/4˜Ÿ™¨Ò,ð5ñ" !  wÑ9°&Ñ9×9ˆBà× Ñ  §¡Ô0Ø�M‰M˜( B×$4Ñ$4Ô5à÷M&	ñ &	ð <ù÷	Eñ 	EúðH :ø÷C&	ð &	üsS   ƒ5J4¸J¹J4Á	!JÁ*AJ4ÃFJ(ÉJ&É<J(ÊJ4ÊJ#ÊJ4Ê&J(Ê(J1Ê-J4)r   rQ   rR   s    @r   r   r   `   s   ø€ ä× Ñ €Iô/ðb „KÕr   c                 óœ   — | j                  t        d«      }t        j                  |«      }t	        |«      dkD  rdnd}||z   |z   | t        <   y)zùAdd 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.
    Ú r   rU   N)rW   r   r   Ústrip_sentry_baggageÚlen)rE   Úsentry_baggageÚexisting_baggageÚstripped_existing_baggageÚ	separators        r   rD   rD   ˜   sV   € ð —{‘{Ô#6¸Ó;ÐÜ '× <Ñ <Ð=MÓ NÐäÐ4Ó5¸Ò9‘¸r€Ið 	" IÑ-°Ñ>ð ÔÒ r   )"r5   Úsentry_sdk.constsr   r   Úsentry_sdk.integrationsr   r   Úsentry_sdk.tracingr   Úsentry_sdk.tracing_utilsr   r	   Úsentry_sdk.utilsr
   r   r   r   r   Útypingr   Úcollections.abcr   r   r   r   r   r   r   ÚImportErrorÚ__all__r   r   r   rD   r   r   r   ú<module>ri      s|   ðÛ ß *ß =Ý 2ß D÷õ õ !áÝ.Ýð1ß<Ó<ð Ð
€ô&�{ô &ò1òh5ópøðC ò 1Ù
Ð/Ó
0Ð0ð1ús   ÁA* Á*A8