
    j}                     d   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
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d dlZd dlmZ d dlmZmZmZ d dl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"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, d dl"m-Z- d dl"m.Z. d dl"m/Z/ d dl"m0Z0 d dl1m2Z2 d dl1m3Z3 d dl4m5Z5m6Z6 g Z7ejp                  d dfejr                  d dfejr                  d dfejr                  d dffD ]%  Z:	 e7jw                  e:d     e:d          e:d    f       '  G d! d"e      Z=	 d3d#e>d$d%d&d'fd(Z? G d) d*e=      Z@ G d+ d,e@      ZA	 d dlBZBd dlCZC G d- d.e@      ZD G d0 d1e=      ZEd4d2ZFy# e$ r dZY Mw xY w# e<$ r Y w xY w# e$ r  G d/ d.eA      ZDY ;w xY w)5    )ABCabstractmethodN)datetime	timedeltatimezone)defaultdict)
getproxies)EndpointType)Dsnloggercapture_internal_exceptions)BackgroundWorker)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     m/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/sentry_sdk/transport.py<lambda>r,   0   s     ?r*      c                  "    t        t        d      S )NTCP_KEEPIDLEr&   r)   r*   r+   r,   r,   1   s    WV^<r*   -   c                  "    t        t        d      S )NTCP_KEEPINTVLr&   r)   r*   r+   r,   r,   2   s    WV_=r*   
   c                  "    t        t        d      S )NTCP_KEEPCNTr&   r)   r*   r+   r,   r,   3   s    WV];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   returnc                     || _         |r.|d   )|d   r$t        |d   |j                  d            | _        y d | _        y )Ndsnorg_id)optionsr   getr:   )r;   r@   s     r+   __init__zTransport.__init__E   s=    wu~1gen!'%.'++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!r7   
stacklevelN)warningswarnDeprecationWarningr   	add_eventcapture_envelope)r;   eventenvelopes      r+   capture_eventzTransport.capture_eventL   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)   )r;   rL   s     r+   rJ   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)   r;   rO   rP   s      r+   flushzTransport.flushi   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)   r;   s    r+   killzTransport.killv   s     r*   r-   quantityreasondata_categoryOptional[EventDataCategory]itemOptional[Item]rX   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)   )r;   rY   rZ   r\   rX   s        r+   record_lost_eventzTransport.record_lost_event   s    , r*   c                      y)NTr)   rU   s    r+   
is_healthyzTransport.is_healthy       r*   N)r;   r   r@   zOptional[Dict[str, Any]]r<   N)r;   r   rK   r"   r<   Nr;   r   rL   r   r<   Nr;   r   r<   NNN)__name__
__module____qualname____doc__r:   __annotations__rB   rM   r   rJ   floatrS   rV   strintr_   boolra   r)   r*   r+   r9   r9   =   s    
 #'J&#($   %) " 
	 8<!%	  5 	  
0 D r*   r9   headernowzOptional[datetime]r<   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,:r7   seconds;rc   )
r   rq   r   utcsplitstripr   rn   LookupError
ValueError)rp   rq   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K++ L # 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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		 	 	 	 	 	 d@dZ
ej                  dfdddeddddddddfdZddd eddfd!Z	 dAddd"ed#eddfd$ZdBdd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dCd+Z	 	 	 	 	 	 dDd,ZdEd-Zddd.d/defd0Z	 	 	 	 dFd1Zddd2edddddd3ddfd4Z	 	 	 	 dGd5Z	 dHddd6ed7d8ddfd9ZdId:Z e!dJd;       Z"e#dKd<       Z$e$jJ                  dLd=       Z$y)MBaseHttpTransportzThe base HTTP transport.   r;   r   r<   Nc                    ddl m} t        j                  | |       | j                  J || _        t        |d         | _        | 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   )VERSIONtransport_queue_size)
queue_sizez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   r9   rB   r:   r@   r   _workerto_auth_auth_disabled_untilurllib3utilRetry_retryr   rn   _discarded_eventstime_last_client_report_sent
_make_pool_pool
sentry_sdkHub_hub_clsrA   brotlir   warning_compression_level_compression_algo)r;   r@   r   experimentscompression_levelcompression_algos         r+   rB   zBaseHttpTransport.__init__   s   -4)***)0'7;Q3RS__,,-?'-IJ
NPll((* 	 )-		%__&
 #kk."5'OO)OO>?
 '??(
 %0FN  	
 t#NNe  & $>1NNDFV '(D#%)D"%5D"(&7D###v-&'D###t+&'D# ,r*   r-   rW   rY   rZ   r[   r\   r]   rX   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_reportsr-   transactionspansspanrW   log_itemlog_byte
attachmentzdata category not provided)r@   rZ   get_transaction_eventlenr   r   r   rm   objectrA   r_   	get_bytes	TypeErrorr   )r;   rY   rZ   r\   rX   rK   
span_count
bytes_sizes           r+   r_   z#BaseHttpTransport.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*   responser   rp   Optional[str]c                 8    |j                   j                  |      S rc   )headersrA   r;   r   rp   s      r+   _get_header_valuez#BaseHttpTransport._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<   ru   )r   r   r   r   updater   statusr   parse_retry_afterr   rq   r   rx   r   )r;   r   rp   retry_after_valuer   s        r+   _update_rate_limitsz%BaseHttpTransport._update_rate_limits  s    
 ''2HINNBC  ''(:6(BC
 __#NN12 $ 6 6x O %0 --.?@ 	 
 *2hll)Ci#G *D  & $r*   bodyr   zDict[str, str]endpoint_typer
   rL   zOptional[Envelope]c                     dt         dd f fd}|j                  t         j                  j                        t         j                  j	                               d       	  j                  d|||      }	  j                  |       |j                  dk(  rTd	}t        |d
t        |dd             }|	|d| dz  }t        j                  |        j                  d        |d       n|j                  dk(  r j                  d       n|j                  dk\  s|j                  dk  rit        j                  d|j                  t        |d
t        |dd                     j                  dj                  |j                                |d       |j                          y # t        $ r  j                  d        |d        w xY w# |j                          w xY w)NrY   r<   c                 z    j                  | d       y j                  D ]  }j                  | |        y )Nerror)rZ   r\   )r_   items)rY   r\   rL   r;   s     r+   record_lossz4BaseHttpTransport._send_request.<locals>.record_loss;  s=    &&vW&E$NND**6*= +r*   )z
User-AgentzX-Sentry-AuthPOSTnetworknetwork_errori  z;HTTP 413: Event dropped due to exceeded envelope size limitdatacontentz (body: )
status_413
send_errorr   
status_429i,     z%Unexpected status code: %s (body: %s)z	status_{})rm   r   r   client	to_header_request	Exceptionon_dropped_eventr   r   r'   r   r   formatclose)	r;   r   r   r   rL   r   r   size_exceeded_messageresponse_messages	   `   `    r+   _send_requestzBaseHttpTransport._send_request4  s   	> 	> 	> 	!$**"3"34!$TZZ%9%9%;!<	

	}}	H"	$$X.#%Q & $+fgh	4&H$  $/)x8H7I-KK)23%%l3L)C'
 %%l3C'8??S+@;OOHfgh	4.PQ
 %%k&8&8&IJO,NNO  	!!),(	N NNs   %F' :DG '$GG _reasonc                      y rc   r)   )r;   r   s     r+   r   z"BaseHttpTransport.on_dropped_eventx  rb   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   )rY   r   rX   )	timestampdiscarded_events)jsonclient_report)type)	r@   r   r   r   r   rn   r   r   r   )r;   r   r   r   r   rY   rX   s          r+   _fetch_pending_client_reportz.BaseHttpTransport._fetch_pending_client_report{  s     ||1266x9OO11!,S!1(,		%!% .335)
 6.Xv$ $*xXV 6)	 !
 	
)s   %C
c                 h    | j                  |d      }|| j                  t        |g             y y )Nr   )r   r   )r   )r   rJ   r   )r;   r   r   s      r+   _flush_client_reportsz'BaseHttpTransport._flush_client_reports  s8    99PR9S$!!(-"AB %r*   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 rc   )r   rA   r   rq   r   rx   )r   tsr;   s     r+   	_disabledz4BaseHttpTransport._check_disabled.<locals>._disabled  s:    %%))&1BT>Eb8<<+E&EEr*   )ro   )r;   r   r   s   `  r+   _check_disabledz!BaseHttpTransport._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rc   )r   rq   r   rx   ).0r   s     r+   	<genexpr>z5BaseHttpTransport._is_rate_limited.<locals>.<genexpr>  s'      
6SBhll++6Ss   02)anyr   valuesrU   s    r+   _is_rate_limitedz"BaseHttpTransport._is_rate_limited  s+     
6:6J6J6Q6Q6S
 
 	
r*   c                 6    | j                   j                         S rc   )r   fullrU   s    r+   _is_worker_fullz!BaseHttpTransport._is_worker_full  s    ||  ""r*   c                 H    | j                         xs | j                          S rc   )r  r   rU   s    r+   ra   zBaseHttpTransport.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<   | j!                  |j#                         |t$        j&                  |       y )N)r   r   defaultstatsdself_rate_limitsratelimit_backoffr   )r   r   r   )r   z(Sending envelope [%s] project:%s host:%szContent-Typezapplication/x-sentry-envelopezContent-Encoding)r   r   rL   )r   r   rZ   r   r_   appendr   r   r   _serialize_enveloper:   r   debugdescription
project_idhostr   getvaluer
   ENVELOPE)r;   rL   	new_itemsr\   client_report_itemcontent_encodingr   r   s           r+   _send_envelopez BaseHttpTransport._send_envelope  s]   	NND##D$6$67%%)VV))*<=&&':&F  & # H$4$4IF~~ ">>>K)NN!!"45!%!9!9(!C$***6  OO&&OO  		
 ;
 *:G&'MMO&//	 	 	
 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)r;   rL   r  r   fs        r+   r	  z%BaseHttpTransport._serialize_envelope  s      zz|""a'4+A+A+I##D)  %%  $55%%-&2D

OO **,d6M6M  %% ]] s$:Q:Q++A.
  %%
  %%s   C**C6c                     t               rc   NotImplementedErrorrU   s    r+   _get_pool_optionsz#BaseHttpTransport._get_pool_options  s    !##r*   r:   r   c                     t               j                  d      }|sy|j                  d      D ]J  }|j                         }|j                  j                  |      s|j                  j                  |      sJ y y)NnoFrs   T)r	   rA   ry   rz   r  endswithnetloc)r;   r:   no_proxyr  s       r+   _in_no_proxyzBaseHttpTransport._in_no_proxy  se    <##D)NN3'D::<D''-1B1B1K1KD1Q ( r*   c                     t               rc   r#  rU   s    r+   r   zBaseHttpTransport._make_pool	  s     "##r*   methodMapping[str, str]c                     t               rc   r#  r;   r-  r   r   r   s        r+   r   zBaseHttpTransport._request  s     "##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rc   )r   r  r   )rL   r;   s   r+   send_envelope_wrapperzABaseHttpTransport.capture_envelope.<locals>.send_envelope_wrapper  s/    ,.##H-**, /..s	   "7A 
full_queuequeue_overflowr   r<   N)r   submitr   r   r_   )r;   rL   r3  r\   s   ``  r+   rJ   z"BaseHttpTransport.capture_envelope  sR    	-
 ||""#89!!,/ &&'7d&C ' :r*   rO   rP   z&Optional[Callable[[int, float], None]]c                      t        j                  d       |dkD  r; j                  j                   fd        j                  j	                  ||       y y )NzFlushing HTTP transportr   c                  (     j                  d      S )NT)r   )r   rU   s   r+   r,   z)BaseHttpTransport.flush.<locals>.<lambda>-  s    (B(B(B(Nr*   )r   r
  r   r7  rS   rR   s   `  r+   rS   zBaseHttpTransport.flush%  sE    
 	./Q;LL NOLLw1 r*   c                 b    t        j                  d       | j                  j                          y )NzKilling HTTP transport)r   r
  r   rV   rU   s    r+   rV   zBaseHttpTransport.kill0  s    -.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.   rD   N)rF   rG   rH   r)   r*   r+   _warn_hub_clszBaseHttpTransport._warn_hub_cls4  s     	\	
r*   c                 B    t         j                          | j                  S )QDEPRECATED: This attribute is deprecated and will be removed in a future release.HttpTransportr=  r   rU   s    r+   hub_clszBaseHttpTransport.hub_cls=  s     	##%}}r*   c                 :    t         j                          || _        y)r?  Nr@  )r;   values     r+   rB  zBaseHttpTransport.hub_clsC  s     	##%r*   r;   r   r@   Dict[str, Any]r<   Nrf   )r;   r   r   r   r<   N)Fr   )Frd   )r;   r   rL   r   r<   z tuple[Optional[str], io.BytesIO]r;   r   r<   rF  )r;   r   r<   zbUnion[PoolManager, ProxyManager, httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool]rL   r   r<   Nrc   re   r6  )r;   r   r<   type[sentry_sdk.Hub])r;   r   rD  rI  r<   N)&rg   rh   ri   rj   TIMEOUTrB   rm   rn   r_   r   r   r
   r  bytesr   r   ro   r   r   r   r   r  ra   r  r	  r%  r+  r   r   rJ   rl   rS   rV   staticmethodr=  propertyrB  setterr)   r*   r+   r   r      s   "G:(~ 8<!%	&B &B&B 5&B 	&B &B 
&BP,, %,/2,	,
 T	: )5(=(=)-BBB "B &	B
 'B 
BHv    <>

!
58
	
@CF C4 CD C
6 6 6
v 
$ 

#f # #G GD G1f&& *&	+&.$6 u  $$	m$
$$$ &$ 	$
 %$ 
>$DD 
D" >B	2	2	2 ;	2 
		2 
 
  
 ^^ r*   r   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)rA   Union[PoolManager, ProxyManager]r   r;   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_poolsr7   CERT_REQUIRED)total)	num_pools	cert_reqsrO   socket_options
keep_aliver   r-   ca_certsSSL_CERT_FILEREQUESTS_CA_BUNDLE	cert_fileCLIENT_CERT_FILEkey_fileCLIENT_KEY_FILE)r@   rA   rn   r   TimeoutrJ  KEEP_ALIVE_SOCKET_OPTIONSr  osenvironcertifiwhere)r;   rU  r@   rW  oused_optionsdefault_options          r+   r%  zHttpTransport._get_pool_optionsN  s   LL$$^R8<<=RS	'/S^(T\\:
 JN<<()5!\\*:;N<<%%!#2@A.QQqT1Q4L.L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 DSNhttps_proxyhttps 
http_proxyhttp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)   )r:   r|   r+  r@   schemer	   rA   r%  
startswithurllib3.contrib.socksrr  ImportErrorr   r   r   r    r!   )	r;   proxyr*  rk  rn  optsrp  use_socks_proxyrr  s	            r+   r   zHttpTransport._make_poolw  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-r-  r   r
   r   r   r   r.  zurllib3.BaseHTTPResponsec                 r    | j                   j                  || j                  j                  |      ||      S )N)r   r   )r   requestr   get_api_urlr0  s        r+   r   zHttpTransport._request  s;     zz!!JJ""=1	 " 
 	
r*   NrG  )r;   r   r<   rP  )	rg   rh   ri   r   rk   r%  r   rm   r   r)   r*   r+   rA  rA  J  sT    11'R+/Z


 &
 	

 %
 
$
r*   rA  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)Http2Transportz&The HTTP2 transport based on httpcore.   zeUnion[
                httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool
            ]r   r;   r   r   zhttpcore.Responserp   r<   r   c                 B    t        fd|j                  D        d       S )Nc              3      K   | ]:  \  }}|j                  d       j                         k(  r|j                  d        < yw)asciiN)decodelower)r   keyvalrp   s      r+   r   z3Http2Transport._get_header_value.<locals>.<genexpr>  s@      $4Szz'*002f< JJw'$4s   A A)nextr   r   s     `r+   r   z Http2Transport._get_header_value  s*     $,$4$4
  r*   r-  r   r
   r   r   r   r.  c                     | j                   j                  || j                  j                  |      ||d| j                  | j                  | j                  | j                  di      }|S )NrO   )poolconnectr  read)r   r   
extensions)r   r{  r   r|  rJ  )r;   r-  r   r   r   r   s         r+   r   zHttp2Transport._request  sh     zz))

&&}5 $#'<<!% $	  * H Or*   c                 8   | j                   d uxr | j                   j                  dk(  dd}| j                  d   | j                  d   n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 )Nrl  r<  )http2retriesrW  r   r-   rY  rZ  r[  r\  r]  r^  r_  ssl_context)r:   rs  r@   ra  r  sslcreate_default_contextload_verify_locationsrb  rc  rA   rd  re  load_cert_chain)	r;   r@   rW  rf  rg  rh  r  r\  r^  s	            r+   r%  z Http2Transport._get_pool_options  s   4 6OO**g5)G << 01= -.  3AA.QQqT1Q4L.LA";"1%~a'89M")).9 #< )7G$%446K--Z( #::>>/2#::>>"67# ==?	 [1WRZZ^^DV5WI||J/T2::>>BS3TH$++Ix@%0GM"N+ 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                         }|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)Nrj  rk  rl  rm  rn  ro  rp  rq  rW  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)   )r:   r|   r+  r@   rs  r	   rA   r%  rt  popr   r   httpcore
SOCKSProxyRuntimeError	HTTPProxyConnectionPool)r;   rw  r*  rk  rn  rx  rp  rW  s           r+   r   zHttp2Transport._make_pool  s    & !WXXE((9H ,,}5K%%0kR6G#SH(R9I9I'9R l3JjB."Q8|'P
8H8H8P))+D $_ = ,9D)##G,+t3-1XX6F-GN- & %X!"  (22KUKdKK $--FFFF**2T22 (  N!s   6AE% %FFNrG  )r;   r   r<   zGUnion[httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool])rg   rh   ri   rj   rJ  r   rk   rm   r   r   r%  r   r)   r*   r+   r~  r~    s    4 
	
	$7
	AD
	
				 *	 		
 )	 !	."	H*	3*	3V*	3r*   r~  c                         e Zd Zd fdZ xZS )r~  c                 N    t         |   |       t        j                  d       y )NzhYou tried to use HTTP2Transport but don't have httpcore[http2] installed. Falling back to HTTPTransport.)superrB   r   r   )r;   r@   	__class__s     r+   rB   zHttp2Transport.__init__  s    GW%NNzr*   rE  )rg   rh   ri   rB   __classcell__)r  s   @r+   r~  r~    s    	 	r*   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 rc   )r9   rB   _func)r;   funcs     r+   rB   z_FunctionTransport.__init__E  s     	4 
r*   c                 &    | j                  |       y rc   )r  )r;   rK   s     r+   rM   z _FunctionTransport.capture_eventL  s     	

5r*   c                 L    |j                         }|| j                  |       y y rc   )	get_eventrM   )r;   rL   rK   s      r+   rJ   z#_FunctionTransport.capture_envelopeS  s+     ""$u% r*   )r  zCallable[[Event], None]r<   N)rK   r"   r<   NrH  )rg   rh   ri   rj   rB   rM   rJ   r)   r*   r+   r  r  ?  s:    
' 
 
&r*   r  c                 V   | d   }| j                  di       j                  dd      }|rt        nt        }t        |t              r|S t        |t
              rt        |t              r|}n2t        |      r't        j                  dt        d       t        |      S | d   r ||       S y )	N	transportr   transport_http2FzFunction transports are deprecated and will be removed in a future release.Please provide a Transport instance or subclass, instead.r7   rD   r>   )rA   r~  rA  
isinstancer9   r   
issubclasscallablerF   rG   rH   r  )r@   ref_transportuse_http2_transporttransport_clss       r+   make_transportr  \  s    K(M!++nb9==>OQVW .=  -+	M4	(Zy-Q%	-	 H		
 "-00 u~W%%r*   rc   )r@   rF  r<   zOptional[Transport])Gabcr   r   r  rb  r   r(   r  r   rF   r   r   r   collectionsr   urllib.requestr	   r   rv  r   rd  r   r   r
   sentry_sdk.utilsr   r   r   sentry_sdk.workerr   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#   ra  
SOL_SOCKETSOL_TCPoptionr  AttributeErrorr9   rm   r   r   rA  r  h2r~  r  r  r)   r*   r+   <module>r     s   # 	 	   
   2 2 # %    * E E . : : 2 2"/0: ?C^^<bA^^=rB^^;Q?	F!((&)YVAY[&))LM[ [~ .2*=$Z	 Zzf
% f
RI3{3* {3|& &:[  FP   	~   s5   F "F F FFFFF/.F/