
    \j@                        d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZ d dlmZ d dlmZ 	 d dlZ	 d dlZ	 d dlZeduZ	 d dlZeduZd dlZd dlZd dl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& d d
l'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ e,rPd dl+m0Z0 d dl+m1Z1 d dl+m2Z2 d dl+m3Z3 d dl+m4Z4 d dl+m5Z5 d dl+m6Z6 d dl+m7Z7 d dl+m8Z8 d dl+m9Z9 d dl:m;Z; d dl:m<Z< d dl=m>Z>m?Z? g Z@ej                  d dfej                  d dfej                  d dfej                  d d ffD ]%  ZC	 e@j                  eCd     eCd          eCd!   f       ' d"d#d$eFd%d&fd'ZG G d( d)e      ZH	 d<d$eFd*d+d%d,fd-ZI G d. d/eH      ZJ G d0 d1eJ      ZK G d2 d3eK      ZL G d4 d5eJ      ZMes G d6 d7eL      ZNn G d8 d7eK      ZN G d9 d:eH      ZOd=d;ZPy# e$ r dZY w xY w# e$ r dZY w xY w# e$ r dZY w xY w# e$ r dZY w xY w# eE$ r Y w xY w)>    )ABCabstractmethodN)datetime	timedeltatimezone)defaultdict)
getproxiesF)EndpointType)Dsnloggercapture_internal_exceptionsmark_sentry_task_internal)BackgroundWorkerWorkerAsyncWorker)EnvelopeItem
PayloadRef)TYPE_CHECKINGcastListDict)Any)Callable)DefaultDict)Iterable)Mapping)Optional)Self)Tuple)Type)Union)PoolManager)ProxyManager)EventEventDataCategoryc                  "    t        t        d      S )NSO_KEEPALIVEgetattrsocket     >/root/env/lib/python3.12/site-packages/sentry_sdk/transport.py<lambda>r/   I   s     ? r-      c                  "    t        t        d      S )NTCP_KEEPIDLEr)   r,   r-   r.   r/   r/   J   s    WV^< r-   -   c                  "    t        t        d      S )NTCP_KEEPINTVLr)   r,   r-   r.   r/   r/   K   s    WV_= r-   
   c                  "    t        t        d      S )NTCP_KEEPCNTr)   r,   r-   r.   r/   r/   L   s    WV]; r-         responser   headerreturnOptional[str]c                 b    |j                         t        fd| j                  D        d      S )z<Case-insensitive header lookup for httpcore-style responses.c              3      K   | ]:  \  }}|j                  d       j                         k(  r|j                  d        < yw)asciiN)decodelower).0keyvalheader_lowers      r.   	<genexpr>z-_get_httpcore_header_value.<locals>.<genexpr>Z   s@      	
Szz'"((*l: JJw	
s   A AN)rC   nextheaders)r;   r<   rG   s     @r.   _get_httpcore_header_valuerK   V   s3    <<>L	
$,,	

 	 r-   c                       e Zd ZU dZdZded<   dddZdd	Zedd
       Z		 dddde
ddddfdZddZ	 	 ddddedddddeddf
dZdddefdZy) 	TransportzWBaseclass for all transports.

    A transport is used to send an event to sentry.
    NzOptional[Dsn]
parsed_dsnselfr   r=   c                 v    || _         |r)|d   r$t        |d   |j                  d            | _        y d | _        y )Ndsnorg_id)optionsr   getrN   rO   rS   s     r.   __init__zTransport.__init__k   s4    wu~!'%.'++h2GHDO"DOr-   c                     t        j                  dt        d       t               }|j	                  |       | j                  |       y)z
        DEPRECATED: Please use capture_envelope instead.

        This gets invoked with the event dictionary when an event should
        be sent to sentry.
        zAcapture_event is deprecated, please use capture_envelope instead!r:   
stacklevelN)warningswarnDeprecationWarningr   	add_eventcapture_envelope)rO   eventenvelopes      r.   capture_eventzTransport.capture_eventr   s>     	O	
 :5!h'r-   c                      y)a  
        Send an envelope to Sentry.

        Envelopes are a data container format that can hold any type of data
        submitted to Sentry. We use it to send all event data (including errors,
        transactions, crons check-ins, etc.) to Sentry.
        Nr,   )rO   r`   s     r.   r^   zTransport.capture_envelope   s     	r-   timeoutcallbackzOptional[Any]c                      y)z
        Wait `timeout` seconds for the current events to be sent out.

        The default implementation is a no-op, since this method may only be relevant to some transports.
        Subclasses should override this method if necessary.
        Nr,   rO   rc   rd   s      r.   flushzTransport.flush   s     r-   c                      y)z
        Forcefully kills the transport.

        The default implementation is a no-op, since this method may only be relevant to some transports.
        Subclasses should override this method if necessary.
        Nr,   rO   s    r.   killzTransport.kill   s     r-   r0   quantityreasondata_categoryOptional[EventDataCategory]itemOptional[Item]rl   c                     y)a  This increments a counter for event loss by reason and
        data category by the given positive-int quantity (default 1).

        If an item is provided, the data category and quantity are
        extracted from the item, and the values passed for
        data_category and quantity are ignored.

        When recording a lost transaction via data_category="transaction",
        the calling code should also record the lost spans via this method.
        When recording lost spans, `quantity` should be set to the number
        of contained spans, plus one for the transaction itself. When
        passing an Item containing a transaction via the `item` parameter,
        this method automatically records the lost spans.
        Nr,   )rO   rm   rn   rp   rl   s        r.   record_lost_eventzTransport.record_lost_event   s    , r-   c                      y)NTr,   ri   s    r.   
is_healthyzTransport.is_healthy       r-   N)rO   r   rS   zOptional[Dict[str, Any]]r=   N)rO   r   r_   r%   r=   NrO   r   r`   r   r=   NrO   r   r=   NNN)__name__
__module____qualname____doc__rN   __annotations__rV   ra   r   r^   floatrg   rj   strintrs   boolru   r,   r-   r.   rM   rM   c   s    
 #'J&#($   %) " 
	 8<!%	  5 	  
0 D r-   rM   nowzOptional[datetime]z6Iterable[Tuple[Optional[EventDataCategory], datetime]]c              #   t  K   |#t        j                  t        j                        }| j	                  d      D ]f  }	 |j                         j	                  d      }|d d \  }}|t        t        |            z   }|xr |j	                  d      xs dD ]  }||f 
 h y # t        t        f$ r Y {w xY ww)N,:r:   seconds;rw   )
r   r   r   utcsplitstripr   r   LookupError
ValueError)r<   r   limit
parametersretry_after_val
categoriesretry_aftercategorys           r.   _parse_rate_limitsr      s      {ll8<<(c" 		,,S1J*4Ra.'OZ	#o2F GGK&@:+;+;C+@KG ,++,	 Z( 		s)   :B8A#B# B8#B52B84B55B8c                      e Zd ZdZdZd>dZd?d	Z	 	 d@d
ddedddddeddf
dZ	dddddeddfdZ
	 	 	 	 	 	 dAdZ	 	 dBdddddededdf
dZ	 	 	 	 	 	 	 	 dCdZ	 	 	 	 	 	 dDd!Zddd"eddfd#Z	 dEddd$ed%eddfd&Zd'edefd(Zdddefd)Zdddefd*Zdddefd+Z	 	 	 	 	 	 dFd,Z	 	 	 	 	 	 dGd-Z	 dHddd.eddfd/ZdId0ZedJd1       ZdJd2Zddd3d4defd5Z	 	 	 	 dKd6Zddd7ed8d9d:dd d;ddfd<ZdLd=Z y)MHttpTransportCorez0Shared base class for sync and async transports.   rO   r   Dict[str, Any]r=   Nc                    ddl m} t        j                  | |       | j                  J || _        | j                  |      | _        | j                  j                  d|z        | _	        i | _
        t        j                  j                         | _        t        t               | _        t%        j$                         | _        | j)                         | _        t,        j.                  | _        |j3                  di       }|j3                  d|j3                  d            }|j3                  d|t4        dnd	      }|d	k(  rt4        t7        j8                  d
       d}d }|dvr%t7        j8                  d|       d| _        d | _        n|| _        ||| _        y | j<                  dk(  rd| _        y | j<                  d	k(  rd| _        y y )Nr   )VERSIONzsentry.python/%s_experimentstransport_compression_level transport_zlib_compression_leveltransport_compression_algogzipbrzSYou asked for brotli compression without the Brotli module, falling back to gzip -9)r   r   z2Unknown compression algo %s, disabling compression	      )sentry_sdk.constsr   rM   rV   rN   rS   _create_worker_workerto_auth_auth_disabled_untilurllib3utilRetry_retryr   r   _discarded_eventstime_last_client_report_sent
_make_pool_pool
sentry_sdkHub_hub_clsrT   brotlir   warning_compression_level_compression_algo)rO   rS   r   experimentscompression_levelcompression_algos         r.   rV   zHttpTransportCore.__init__   s   -4)***)0**73__,,-?'-IJ
NPll((* 	 )-		%__&
 #kk."5'OO)OO>?
 '??(
 %0FN  	
 t#NNe  & $>1NNDFV '(D#%)D"%5D"(&7D###v-&'D###t+&'D# ,r-   c                     t               rw   NotImplementedErrorrU   s     r.   r   z HttpTransportCore._create_worker      !##r-   r0   rk   rm   rn   ro   rp   rq   rl   c                "   | j                   d   sy ||j                  }d}|dk(  rl|j                         xs i }t        t	        t
        t        t        t        f      |j                  d      xs g             dz   }| j                  |d|       ne|dk(  r0|r.t        |j                               }| j                  |d|       n0|d	k(  r+t        |j                               xs d}n|t        d
      | j                  ||fxx   |z  cc<   y )Nsend_client_reportsr0   transactionspansspanrk   log_itemlog_byte
attachmentzdata category not provided)rS   rn   get_transaction_eventlenr   r   r   r   objectrT   rs   	get_bytes	TypeErrorr   )rO   rm   rn   rp   rl   r_   
span_count
bytes_sizes           r.   rs   z#HttpTransportCore.record_lost_event  s    ||12 ..MH-224: T$sF{"34eii6H6NBOPSTT  &&vv
&K*, !12
&&vzJ&O,. t~~/05A"899}f45A5r-   r;   r   r<   r>   c                 8    |j                   j                  |      S rw   )rJ   rT   rO   r;   r<   s      r.   _get_header_valuez#HttpTransportCore._get_header_value?  s     ##F++r-   2Union[urllib3.BaseHTTPResponse, httpcore.Response]c                    | j                  |d      }|r:t        j                  d       | j                  j	                  t        |             y |j                  dk(  rt        j                  d       | j                  |d      }|| j                  j                  |      nd xs d}t        j                  t        j                        t        |      z   | j                  d <   y y )Nzx-sentry-rate-limitsz%Rate-limited via x-sentry-rate-limits  zRate-limited via 429zRetry-After<   r   )r   r   r   r   updater   statusr   parse_retry_afterr   r   r   r   r   )rO   r;   r<   retry_after_valuer   s        r.   _update_rate_limitsz%HttpTransportCore._update_rate_limitsD  s    
 ''2HINNBC  ''(:6(BC
 __#NN12 $ 6 6x O %0 --.?@ 	 
 *2hll)Ci#G *D  & $r-   r`   Optional[Envelope]loss_reasonrecord_reasonc                 X     dt         dd f fd} j                  |        ||       y )Nrm   r=   c                 z    j                  | d       y j                  D ]  }j                  | |        y )Nerror)rn   rp   )rs   items)rm   rp   r`   rO   s     r.   record_lossz<HttpTransportCore._handle_request_error.<locals>.record_lossc  sB    &&vW&E$NN >D**6*=>r-   )r   on_dropped_event)rO   r`   r   r   r   s   ``   r.   _handle_request_errorz'HttpTransportCore._handle_request_error]  s.    	> 	> 	> 	k*M"r-   c                 (   | j                  |       |j                  dk(  rOd}t        |dt        |dd             }|	|d| dz  }t        j                  |       | j                  |dd	       y |j                  d
k(  r| j                  d       y |j                  dk\  s|j                  dk  rdt        j                  d|j                  t        |dt        |dd                    | j                  |dj                  |j                               y y )Ni  z;HTTP 413: Event dropped due to exceeded envelope size limitdatacontentz (body: )
status_413
send_error)r`   r   r   r   
status_429i,     z%Unexpected status code: %s (body: %s)z	status_{}r`   r   )r   r   r*   r   r   r   r   format)rO   r;   r`   size_exceeded_messageresponse_messages        r.   _handle_responsez"HttpTransportCore._handle_responsem  s   
 	  *??c!M "  '&'(It"D   +%84D3EQ)GG%LL./&&!|< '  __#
 !!,/__#x'<LL7&'(It*LM
 &&!{/A/A(///R '  (=r-   rJ   c                     |j                  t        | j                  j                        t        | j                  j	                               d       y )N)z
User-AgentzX-Sentry-Auth)r   r   r   client	to_header)rO   rJ   s     r.   _update_headersz!HttpTransportCore._update_headers  s<     	!$**"3"34!$TZZ%9%9%;!<	
r-   _reasonc                      y rw   r,   )rO   r   s     r.   r   z"HttpTransportCore.on_dropped_event  rv   r-   forceintervalc                    | j                   d   sy |s%| j                  t        j                         |z
  k  sy | j                  }t	        t
              | _        t        j                         | _        |sy t        t        t        j                         |j                         D cg c]  \  \  }}}|||d c}}}d      d      S c c}}}w )Nr   )rm   r   rl   )	timestampdiscarded_events)jsonclient_report)type)	rS   r   r   r   r   r   r   r   r   )rO   r   r   r   r   rm   rl   s          r.   _fetch_pending_client_reportz.HttpTransportCore._fetch_pending_client_report  s     ||1266x9OO11!,S!1(,		%!% .335) ).Xv$ $*xXV)	 !
 	
)s   %C
r   c                 D     dddt         f fd} ||      xs  |d       S )Nbucketr   r=   c                     j                   j                  |       }|d uxr& |t        j                  t        j
                        kD  S rw   )r   rT   r   r   r   r   )r  tsrO   s     r.   	_disabledz4HttpTransportCore._check_disabled.<locals>._disabled  s:    %%))&1BT>Eb8<<+E&EEr-   )r   )rO   r   r  s   `  r.   _check_disabledz!HttpTransportCore._check_disabled  s/    	Fe 	F 	F "5io5r-   c                 V    t        d | j                  j                         D              S )Nc              3   h   K   | ]*  }|t        j                  t        j                        kD   , y wrw   )r   r   r   r   )rD   r  s     r.   rH   z5HttpTransportCore._is_rate_limited.<locals>.<genexpr>  s'      
02Bhll++
s   02)anyr   valuesri   s    r.   _is_rate_limitedz"HttpTransportCore._is_rate_limited  s+     
6:6J6J6Q6Q6S
 
 	
r-   c                 6    | j                   j                         S rw   )r   fullri   s    r.   _is_worker_fullz!HttpTransportCore._is_worker_full  s    ||  ""r-   c                 H    | j                         xs | j                          S rw   )r  r  ri   s    r.   ru   zHttpTransportCore.is_healthy  s"    ((*Ed.C.C.EFFr-   c                    g }|j                   D ]a  }| j                  |j                        r3|j                  dv r| j                  d       | j	                  d|       Q|j                  |       c t        |j                  |      }|j                   sy | j                  d      }||j                   j                  |       | j                  |      \  }}| j                  J t        j                  d|j                  | j                  j                  | j                  j                         d	d
i}|r||d<   |||fS )N)r   r   defaultstatsdself_rate_limitsratelimit_backoffr   )rJ   r   r   )r   z(Sending envelope [%s] project:%s host:%szContent-Typezapplication/x-sentry-envelopezContent-Encoding)r   r	  rn   r   rs   appendr   rJ   r  _serialize_enveloperN   r   debugdescription
project_idhost)rO   r`   	new_itemsrp   client_report_itemcontent_encodingbodyrJ   s           r.   _prepare_envelopez#HttpTransportCore._prepare_envelope  sA    	NN 	'D##D$6$67%%)VV))*<=&&':&F  &	' H$4$4IF~~ ">>>K)NN!!"45!%!9!9(!C$***6  OO&&OO  		
 ;%
 *:G&'w&&r-   c                    d }t        j                         }| j                  dk(  s| j                  |j	                  |       ||fS | j                  }| j                  dk(  rHt
        B|j                  t        j                  |j                         | j                               ||fS t        j                  |d| j                        5 }|j	                  |       d d d        ||fS # 1 sw Y   ||fS xY w)Nr   r   )qualityw)fileobjmodecompresslevel)ioBytesIOr   r   serialize_intor   writecompress	serializer   GzipFile)rO   r`   r   r!  fs        r.   r  z%HttpTransportCore._serialize_envelope  s      zz|""a'4+A+A+I##D)  %%  $55%%-&2D

OO **,d6M6M  %% ]] s$:Q:Q /++A./
  %%/
  %%s   C**C6http2c                    |dd}d}| j                   d   | j                   d   }|g }|D ch c]  }|d   |d   f }}t        D ]   }|d   |d   f|vs|j                  |       " |||d<   t        j                         }|j                  | j                   d   xsV t        j                  j                  d      xs5 t        j                  j                  d	      xs t        j                                | j                   d
   xs t        j                  j                  d      }| j                   d   xs t        j                  j                  d      }	||j                  ||	       ||d<   |S c c}w )zDShared pool options for httpcore-based transports (Http2 and Async).   )r1  retriesNsocket_optionsr   r0   ca_certsSSL_CERT_FILEREQUESTS_CA_BUNDLE	cert_fileCLIENT_CERT_FILEkey_fileCLIENT_KEY_FILEssl_context)rS   KEEP_ALIVE_SOCKET_OPTIONSr  sslcreate_default_contextload_verify_locationsosenvironrT   certifiwhereload_cert_chain)
rO   r1  rS   r5  oused_optionsdefault_optionr=  r9  r;  s
             r.   _get_httpcore_pool_optionsz,HttpTransportCore._get_httpcore_pool_options  s{   
 %

 JN<<()5!\\*:;N!N.<=1qt==7 	6Nq!>!#45\I%%n5	6 %(6G$%002))LL$ zz~~o.zz~~23 }}		
 LL-S@R1S	<<
+Przz~~>O/P ''	8<!,+ >s   E6c                 p   | j                   y| j                  | j                         }d}| j                  d   }| j                   j                  dk(  r'|dk7  r"|xs | xr t	               j                  d      }| j                  d   }|s'|dk7  r"|xs | xr t	               j                  d      }|xs dS )zJResolve proxy URL from options and environment. Returns proxy URL or None.Nhttps_proxyhttps 
http_proxyhttp)rN   _in_no_proxyrS   schemer	   rT   )rO   no_proxyproxyrL  rO  s        r.   _resolve_proxyz HttpTransportCore._resolve_proxyC  s    ??"$$T__5 ll=1??!!W,+2COL$NZ\5E5Eg5NE \\,/
**Mx<#LJL4D4DV4LE}r-   c                 d    d| j                   | j                   | j                   | j                   diS )Nrc   )poolconnectr,  read)TIMEOUTri   s    r.   _timeout_extensionsz%HttpTransportCore._timeout_extensionsW  s2     <<	
 	
r-   c                     t               rw   r   ri   s    r.   _get_pool_optionsz#HttpTransportCore._get_pool_optionsb  r   r-   rN   r   c                     t               j                  d      }|sy|j                  d      D ]J  }|j                         }|j                  j                  |      s|j                  j                  |      sJ y y)NnoFr   T)r	   rT   r   r   r  endswithnetloc)rO   rN   rS  r  s       r.   rQ  zHttpTransportCore._in_no_proxye  sj    <##D)NN3' 	D::<D''-1B1B1K1KD1Q	 r-   c                     t               rw   r   ri   s    r.   r   zHttpTransportCore._make_poolo  s     "##r-   methodendpoint_typer
   r!  Mapping[str, str]c                     t               rw   r   rO   rc  rd  r!  rJ   s        r.   _requestzHttpTransportCore._requestt  s     "##r-   c                 b    t        j                  d       | j                  j                          y )NKilling HTTP transport)r   r  r   rj   ri   s    r.   rj   zHttpTransportCore.kill}  s    -.r-   rO   r   rS   r   r=   NrO   r   rS   r   r=   r   rz   )rO   r   r;   r   r=   N)networknetwork_error)rO   r   r;   r   r`   r   r=   N)rO   r   rJ   Dict[str, str]r=   N)Fr   )rO   r   r`   r   r=   z5Optional[Tuple[Envelope, io.BytesIO, Dict[str, str]]])rO   r   r`   r   r=   z tuple[Optional[str], io.BytesIO]F)rO   r   r=   r>   rO   r   r=   r   )rO   r   r=   zUnion[PoolManager, ProxyManager, httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool, httpcore.AsyncSOCKSProxy, httpcore.AsyncHTTPProxy, httpcore.AsyncConnectionPool]ry   )!r{   r|   r}   r~   rZ  rV   r   r   r   rs   r   r   r   r   r   r   r   r  r	  r  r  ru   r"  r  rJ  rU  propertyr[  r]  rQ  r   rh  rj   r,   r-   r.   r   r      s   :G:(x$ 8<!%	&B &B&B 5&B 	&B &B 
&BP,, %,/2,	,
 T	8 %,	##&# # 	#
 
# &&F& '& 
	&P	
	
!	
 
	
v    <>

!
58
	
@6 6 6
v 
$ 

#f # #G GD G-'-' *-'	@-'^&& *&	+&0 %*&&!&	&P( 
 
$6 u  $$ 
$
$$$ &$ 	$
 %$ 
>$r-   r   c                       e Zd ZdZddZ	 dddded	d
ddddddfdZddZddddeddfdZ		 	 	 	 ddZ
	 ddddeddddfdZedd       Zed d       Zej"                  d!d       Zy)"BaseHttpTransportz&The base HTTP transport (synchronous).rO   r   r`   r=   Nc                     | j                  |      }|7|\  }}}| j                  |j                         |t        j                  |       y N)rJ   rd  r`   r"  _send_requestgetvaluer
   ENVELOPErO   r`   _prepared_enveloper!  rJ   s        r.   _send_envelopez BaseHttpTransport._send_envelope  sU    !33H=)&8#HdG*33!	   r-   r!  rJ   ro  rd  r
   r   c                    | j                  |       	 | j                  d|||      }	 | j	                  ||       |j                          y # t        $ r | j                  |d        w xY w# |j                          w xY wNPOSTrm  r   )r;   r`   )r   rh  	Exceptionr   r   closerO   r!  rJ   rd  r`   r;   s         r.   rx  zBaseHttpTransport._send_request  s     	W%		}}	H	!!8h!GNN  	&&i&P	 NNs   A A- A*-A?c                      t        |d         S Ntransport_queue_size)
queue_size)r   rU   s     r.   r   z BaseHttpTransport._create_worker  s    73I+JKKr-   r   c                 h    | j                  |d      }|| j                  t        |g             y y Nr   )r   r   )r   r  r^   r   rO   r   r  s      r.   _flush_client_reportsz'BaseHttpTransport._flush_client_reports  s8    99PR9S$!!(-"AB %r-   c                      d fd} j                   j                  |      s6 j                  d       j                  D ]  } j	                  d|        y y )Nc                      t               5  j                          j                          d d d        y # 1 sw Y   y xY wrw   r   r}  r  r`   rO   s   r.   send_envelope_wrapperzABaseHttpTransport.capture_envelope.<locals>.send_envelope_wrapper  s8    ,. -##H-**,- - -s	   "7A 
full_queuequeue_overflowr   r=   Nr   submitr   r   rs   rO   r`   r  rp   s   ``  r.   r^   z"BaseHttpTransport.capture_envelope  sY    	-
 ||""#89!!,/  D&&'7d&CD :r-   rc   rd   &Optional[Callable[[int, float], None]]c                      t        j                  d       |dkD  r; j                  j                   fd        j                  j	                  ||       y y )NFlushing HTTP transportr   c                  (     j                  d      S NT)r   r  ri   s   r.   r/   z)BaseHttpTransport.flush.<locals>.<lambda>      (B(B(B(N r-   r   r  r   r  rg   rf   s   `  r.   rg   zBaseHttpTransport.flush  sE    
 	./Q;LL NOLLw1 r-   c                  <    t        j                  dt        d       y)zRConvenience method to warn users about the deprecation of the `hub_cls` attribute.zNThe `hub_cls` attribute is deprecated and will be removed in a future release.r3  rX   N)rZ   r[   r\   r,   r-   r.   _warn_hub_clszBaseHttpTransport._warn_hub_cls  s     	\	
r-   c                 B    t         j                          | j                  S )QDEPRECATED: This attribute is deprecated and will be removed in a future release.HttpTransportr  r   ri   s    r.   hub_clszBaseHttpTransport.hub_cls  s     	##%}}r-   c                 :    t         j                          || _        y)r  Nr  )rO   values     r.   r  zBaseHttpTransport.hub_cls  s     	##%r-   rx   rw   rl  rp  r`   r   r=   Nr  )rO   r   r=   type[sentry_sdk.Hub])rO   r   r  r  r=   N)r{   r|   r}   r~   r}  bytesrx  r   r   r  r^   r   rg   staticmethodr  rr  r  setterr,   r-   r.   rt  rt    s    0
" *. " &	
 ' 
.LCF C4 CD C
DD 
D" >B	2	2	2 ;	2 
		2 
 
  
 ^^ r-   rt  c                   L    e Zd ZU erded<   ddZddZddded	d
ddddddfdZy)r   Union[PoolManager, ProxyManager]r   rO   r   r=   c                 \   | j                   j                  di       j                  d      }|dn
t        |      dt        j                  | j
                        d}d }| j                   d   | j                   d   }| j                   d   rD|g }|D ch c]  }|d	   |d
   f }}t        D ]   }|d	   |d
   f|vs|j                  |       " |||d<   | j                   d   xsV t        j                  j                  d      xs5 t        j                  j                  d      xs t        j                         |d<   | j                   d   xs t        j                  j                  d      |d<   | j                   d   xs t        j                  j                  d      |d<   |S c c}w )Nr   transport_num_poolsr:   CERT_REQUIRED)total)	num_pools	cert_reqsrc   r5  
keep_aliver   r0   r6  r7  r8  r9  r:  r;  r<  )rS   rT   r   r   TimeoutrZ  r>  r  rB  rC  rD  rE  )rO   r  rS   r5  rG  rH  rI  s          r.   r]  zHttpTransport._get_pool_options  s   LL$$^R8<<=RS	'/S^(T\\:
 JN<<()5!\\*:;N<<%%!#2@AQQqT1Q4LALA"; :"1%~a'89M")).9: %(6G$% LL$ zz~~o.zz~~23 }}	 	
  $||K8  
BJJNN=
 #ll:6 
"**..;

 - Bs   F)c                    | j                   t        d      d }| j                  | j                         }| j                  d   }| j                   j                  dk(  r'|dk7  r"|xs | xr t               j                  d      }| j                  d   }|s'|dk7  r"|xs | xr t               j                  d      }| j                         }|rf| j                  d   }|r||d<   |j                  d      r)d	}	 d
dl	m
} |r	 |fi |S t        j                  di |S t        j                   |fi |S t        j                  di |S # t        $ r d}t        j                  d|       Y nw xY w)N4Cannot create HTTP-based transport without valid DSNrL  rM  rN  rO  rP  proxy_headerssocksTr   )SOCKSProxyManagerFzYou have configured a SOCKS proxy (%s) but support for SOCKS proxies is not installed. Disabling proxy support. Please add `PySocks` (or `urllib3` with the `[socks]` extra) to your dependencies.r,   )rN   r   rQ  rS   rR  r	   rT   r]  
startswithurllib3.contrib.socksr  ImportErrorr   r   r   r#   r$   )	rO   rT  rS  rL  rO  optsr  use_socks_proxyr  s	            r.   r   zHttpTransport._make_pool  su   ??"STT$$T__5 ll=1??!!W,+2COL$NZ\5E5Eg5NE \\,/
**Mx<#LJL4D4DV4LE%%' LL9M(5_%("&G #,U;d;;"..666++E:T::&&... # &+ONN ]s   8E	 	!E-,E-rc  rd  r
   r!  r   rJ   re  zurllib3.BaseHTTPResponsec                 r    | j                   j                  || j                  j                  |      ||      S )N)r!  rJ   )r   requestr   get_api_urlrg  s        r.   rh  zHttpTransport._request;  s;     zz!!JJ""=1	 " 
 	
r-   Nrq  )rO   r   r=   r  )	r{   r|   r}   r   r   r]  r   r   rh  r,   r-   r.   r  r    sT    11'R+/Z


 &
 	

 %
 
$
r-   r  c                        e Zd Zd% fdZd&dZddddd	edd
fdZd'dZ	 d(dddeddddddddfdZ	dddeddddddddfdZ
d)dddeddfdZd'dZd'dZ	 d(dddedddd fd!Zd*d"Z	 	 	 	 d+d#Zd,d$Z xZS )-AsyncHttpTransportrO   r   r=   Nc                 x    t         st        d      t        |   |       t	        j
                         | _        y )Nz_AsyncHttpTransport requires httpcore[asyncio]. Install it with: pip install sentry-sdk[asyncio])ASYNC_TRANSPORT_AVAILABLERuntimeErrorsuperrV   asyncioget_running_looplooprO   rS   	__class__s     r.   rV   zAsyncHttpTransport.__init__K  s8    (C  	!,,.	r-   c                      t        |d         S r  )r   rU   s     r.   r   z!AsyncHttpTransport._create_workerU  s    g.D&EFFr-   r;   r   r<   r>   c                     t        ||      S rw   rK   r   s      r.   r   z$AsyncHttpTransport._get_header_valueX  s     *(F;;r-   r`   c                    K   | j                  |      }|?|\  }}}| j                  |j                         |t        j                  |       d {    y 7 wrv  rw  r{  s        r.   r}  z!AsyncHttpTransport._send_envelope]  sh     !33H=)&8#HdG$$*33!	 %    s   AAAAr!  rJ   ro  rd  r
   r   c                 F  K   | j                  |       	 | j                  d|||       d {   }	 | j	                  ||       |j                          d {    y 7 1# t        $ r | j                  |d        w xY w7 (# |j                          d {  7   w xY wwr  )r   rh  r  r   r   acloser  s         r.   rx  z AsyncHttpTransport._send_requesti  s      	W%		!]]	 H	$!!8h!G//###  	&&i&P	 $(//###sU   B!A  AA  B B!BB!A   A>>B!BBBB!rc  re  httpcore.Responsec                    K   | j                   j                  || j                  j                  |      ||| j                         d {   S 7 wN)r   rJ   
extensionsr   r  r   r  r[  rg  s        r.   rh  zAsyncHttpTransport._request  sR      ZZ''JJ""=1// ( 
 
 	
 
s   AA	A
Ar   c                 p   K   | j                  |d      }|| j                  t        |g             y y wr  r  r  s      r.   r  z(AsyncHttpTransport._flush_client_reports  s<     99PR9S$!!(-"AB %s   46c                      d fd} j                   j                  |      s6 j                  d       j                  D ]  } j	                  d|        y y )Nc                     K   t               5  j                          d {    j                          d {    d d d        y 7 %7 # 1 sw Y   y xY wwrw   r  r  s   r.   r  zCAsyncHttpTransport._capture_envelope.<locals>.send_envelope_wrapper  sT     ,. 3))(333002223 3323 3s<   AAA	AAA 	A	AAAAr  r  r   r  r  r  s   ``  r.   _capture_envelopez$AsyncHttpTransport._capture_envelope  sY    	3
 ||""#89!!,/  D&&'7d&CD :r-   c                 2   | j                   rA| j                   j                         r'| j                   j                  | j                  |       y t	        j
                  d       | j                  d       |j                  D ]  }| j                  d|        y )Nz0Async Transport is not running in an event loop.internal_sdk_errorr   )	r  
is_runningcall_soon_threadsafer  r   r   r   r   rs   )rO   r`   rp   s      r.   r^   z#AsyncHttpTransport.capture_envelope  sy    99--/II**4+A+A8L NNMN!!"67  H&&';$&GHr-   rc   rd   r  Optional[asyncio.Task[None]]c                      t        j                  d       |dkD  r: j                  j                   fd        j                  j	                  ||      S y )Nr  r   c                  (     j                  d      S r  r  ri   s   r.   r/   z*AsyncHttpTransport.flush.<locals>.<lambda>  r  r-   r  rf   s   `  r.   rg   zAsyncHttpTransport.flush  sF    
 	./Q;LL NO<<%%gx88r-   c                     | j                  t        xr) | j                  d uxr | j                  j                  dk(        S NrM  )r1  )rJ  HTTP2_ENABLEDrN   rR  ri   s    r.   r]  z$AsyncHttpTransport._get_pool_options  sE    .. 2t+2&&'1 / 
 	
r-   c                    | j                   t        d      | j                         }| j                         }|r| j                  d   }|r||d<   |j                  d      rT	 |j                         }d|v r(|j                  d      }|rt        j                  d       t        j                  dd|i|S t        j                  dd|i|S t        j                  di |S # t        $ r t        j                  d|       Y 6w xY w	Nr  r  r  r5  zqYou have defined socket_options but using a SOCKS proxy which doesn't support these. We'll ignore socket_options.	proxy_urlzoYou have configured a SOCKS proxy (%s) but support for SOCKS proxies is not installed. Disabling proxy support.r,   )rN   r   rU  r]  rS   r  copypopr   r   httpcoreAsyncSOCKSProxyr  AsyncHTTPProxyAsyncConnectionPool)rO   rT  r  r  
socks_optsr5  s         r.   r   zAsyncHttpTransport._make_pool  s    ??"STT##%%%' LL9M(5_%(!%J':5)38H)I)"NN !T $33ReRzRR  ..GG$GG++3d33 $ NN Js   "AC! !DDc                 P   t        j                  d       | j                  j                          	 t	               5  | j
                  j                  | j                  j                               cd d d        S # 1 sw Y   y xY w# t        $ r t        j                  d       Y y w xY w)Nrj  z&Event loop not running, aborting kill.)r   r  r   rj   r   r  create_taskr   r  r  r   ri   s    r.   rj   zAsyncHttpTransport.kill  s    -.	*, Byy,,TZZ->->-@AB B B 	NNCD	s.   
B 3A8.	B 8B=B B B%$B%rk  rl  rx   rw   rp  rq  )rO   r   r=   zVUnion[httpcore.AsyncSOCKSProxy, httpcore.AsyncHTTPProxy, httpcore.AsyncConnectionPool])rO   r   r=   r  )r{   r|   r}   rV   r   r   r   r}  r  rx  rh  r   r  r  r^   r   rg   r]  r   rj   __classcell__r  s   @r.   r  r  J  s0   /G<< %</2<	<

" *.$$$ "$ &	$
 '$ 
$.


 &
 	

 %
 

C& C C$ C
	D	H >B


 ;
 
(	

 4 4	a 4D	r-   r  c                         e Zd Zd fdZ xZS )Http2Transportc                 N    t         |   |       t        j                  d       y )NzhYou tried to use HTTP2Transport but don't have httpcore[http2] installed. Falling back to HTTPTransport.)r  rV   r   r   r  s     r.   rV   zHttp2Transport.__init__  s    GW%NNzr-   rk  )r{   r|   r}   rV   r  r  s   @r.   r  r    s    	 	r-   r  c                   t    e Zd ZU dZdZerded<   ddddd	ed
dfdZdddeddddddd
dfdZ	ddZ
	 	 	 	 ddZy)r  z&The HTTP2 transport based on httpcore.   zeUnion[
                httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool
            ]r   rO   r   r;   r  r<   r=   r>   c                     t        ||      S rw   r  r   s      r.   r   z Http2Transport._get_header_value   s     .h??r-   rc  rd  r
   r!  r   rJ   re  c                     | j                   j                  || j                  j                  |      ||| j                        }|S r  r  )rO   rc  rd  r!  rJ   r;   s         r.   rh  zHttp2Transport._request  sH     zz))

&&}533 * H Or-   c                 t    | j                  | j                  d uxr | j                  j                  dk(        S r  )rJ  rN   rR  ri   s    r.   r]  z Http2Transport._get_pool_options  s;    22ooT1Wdoo6L6LPW6W 3  r-   c                    | j                   t        d      | j                         }| j                         }|r| j                  d   }|r||d<   |j                  d      rD	 d|v r(|j                  d      }|rt        j                  d       t        j                  dd|i|S t        j                  dd|i|S t        j                  di |S # t        $ r t        j                  d|       Y 6w xY wr  )rN   r   rU  r]  rS   r  r  r   r   r  
SOCKSProxyr  	HTTPProxyConnectionPool)rO   rT  r  r  r5  s        r.   r   zHttp2Transport._make_pool  s    & !WXX'')E))+D $_ = ,9D)##G,+t3-1XX6F-GN- & %X!"  (22KUKdKK $--FFFF**2T22 (  N!s   "AC C32C3Nrq  )rO   r   r=   zGUnion[httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool])r{   r|   r}   r~   rZ  r   r   r   r   rh  r]  r   r,   r-   r.   r  r    s    4 	@	@$7	@AD	@	@
			 *	 		
 )	 !	 	
	3	3V	3r-   c                   8    e Zd ZdZ	 	 	 	 ddZ	 	 	 	 ddZddZy)	_FunctionTransportz
    DEPRECATED: Users wishing to provide a custom transport should subclass
    the Transport class, rather than providing a function.
    Nc                 <    t         j                  |        || _        y rw   )rM   rV   _func)rO   funcs     r.   rV   z_FunctionTransport.__init__B  s     	4 
r-   c                 &    | j                  |       y rw   )r  )rO   r_   s     r.   ra   z _FunctionTransport.capture_eventI  s     	

5r-   c                 L    |j                         }|| j                  |       y y rw   )	get_eventra   )rO   r`   r_   s      r.   r^   z#_FunctionTransport.capture_envelopeP  s+     ""$u% r-   )r  zCallable[[Event], None]r=   N)r_   r%   r=   Nr  )r{   r|   r}   r~   rV   ra   r^   r,   r-   r.   r  r  <  s:    
' 
 
&r-   r  c                     | d   }| j                  di       j                  dd      }| j                  di       j                  dd      }t        d | j                  d      xs g D              }|rt        nt        }|rQt        rK	 t        j                          |r|rt        j                  d       t        }nt        j                  d	       n|rt        j                  d       t        |t              r|S t        |t              rt        |t              r|}n2t        |      r't!        j"                  dt$        d       t'        |      S | d   r ||       S y # t        $ r t        j                  d
       Y w xY w)N	transportr   transport_http2Ftransport_asyncc              3   N   K   | ]  }|j                   j                  d k(    yw)AsyncioIntegrationN)r  r{   )rD   integrations     r.   rH   z!make_transport.<locals>.<genexpr>^  s*       	&&*>>s   #%integrationsz\HTTP/2 transport is not supported with async transport. Ignoring transport_http2 experiment.znYou tried to use AsyncHttpTransport but the AsyncioIntegration is not enabled. Falling back to sync transport.z6No event loop running, falling back to sync transport.zoYou tried to use AsyncHttpTransport but don't have httpcore[asyncio] installed. Falling back to sync transport.zFunction transports are deprecated and will be removed in a future release.Please provide a Transport instance or subclass, instead.r:   rX   rQ   )rT   r  r  r  r  r  r  r   r   r  r  
isinstancerM   r  
issubclasscallablerZ   r[   r\   r  )rS   ref_transportuse_http2_transportuse_async_transportasync_integrationtransport_clss         r.   make_transportr  Y  sm   K(M!++nb9==>OQVW!++nb9==>OQVW ";;~6<"  .=  8	U$$& &NN? !3 E 
}	
 -+	M4	(Zy-Q%	-	 H		
 "-00 u~W%%5  	UNNST	Us   A	E E=<E=rw   )rS   r   r=   zOptional[Transport])Qabcr   r   r  r)  rB  r   r+   r?  r   rZ   r   r   r   collectionsr   urllib.requestr	   r   r  r  h2r  anyior  r   rD  r   r   r
   sentry_sdk.utilsr   r   r   r   sentry_sdk.workerr   r   r   sentry_sdk.enveloper   r   r   typingr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   urllib3.poolmanagerr#   r$   sentry_sdk._typesr%   r&   r>  
SOL_SOCKETSOL_TCPoptionr  AttributeErrorr   rK   rM   r   r   rt  r  r  r  r  r  r,   r-   r.   <module>r+     s`   #  	 	   
   2 2 # %D(M& ( 4    *  D C : : 2 2"/0: ?C^^<bA^^=rB^^;Q?	 F!((&)YVAY[&))LM
 
 
 
[ [~ .2*=$l	 lbZ) Zzf
% f
R^* ^B  C3* C3L& &:7S"  F
  H  M  & %&Z   	sZ    G	 G 
G% G3 /"H	GGG"!G"%G0/G03G>=G>H	H	