
    Dj}                     ^   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# e#r\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"m,Z, d dl"m-Z- d dl"m.Z. d dl"m/Z/ d dl0m1Z1 d dl0m2Z2 d dl3m4Z4m5Z5 g Z6ejn                  d dfejp                  d dfejp                  d dfejp                  d  d!ffD ]%  Z9	 e6ju                  e9d     e9d          e9d"   f       '  G d# d$e      Z<d0d%Z= G d& d'e<      Z> G d( d)e>      Z?	 d dl@Z@d dlAZA G d* d+e>      ZB G d- d.e<      ZCd/ ZDy# e$ r dZY Jw xY w# e;$ r Y w xY w# e$ r  G d, d+e?      ZBY :w xY w)1    )ABCabstractmethodN)datetime	timedeltatimezone)defaultdict)
getproxies)EndpointType)Dsnloggercapture_internal_exceptions)BackgroundWorker)EnvelopeItem
PayloadRef)TYPE_CHECKING)Any)Callable)Dict)DefaultDict)Iterable)List)Mapping)Optional)Self)Tuple)Type)Union)PoolManager)ProxyManager)EventEventDataCategoryc                  "    t        t        d      S )NSO_KEEPALIVEgetattrsocket     XC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/transport.py<lambda>r+   2   s     ? r)      c                  "    t        t        d      S )NTCP_KEEPIDLEr%   r(   r)   r*   r+   r+   3   s    WV^< r)   -   c                  "    t        t        d      S )NTCP_KEEPINTVLr%   r(   r)   r*   r+   r+   4   s    WV_= r)   
   c                  "    t        t        d      S )NTCP_KEEPCNTr%   r(   r)   r*   r+   r+   5   s    WV]; r)         c                   `    e Zd ZdZdZddZd Zed        Z	 ddZ	d Z
	 	 ddd	d
Zd Zd Zy)	TransportzWBaseclass for all transports.

    A transport is used to send an event to sentry.
    Nc                 `    || _         |r|d   |d   rt        |d         | _        y d | _        y )Ndsn)optionsr   
parsed_dsn)selfr;   s     r*   __init__zTransport.__init__G   s2    wu~1gen!'%.1DO"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!r6   
stacklevelN)warningswarnDeprecationWarningr   	add_eventcapture_envelope)r=   eventenvelopes      r*   capture_eventzTransport.capture_eventO   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=   rH   s     r*   rF   zTransport.capture_envelopeb   s     	r)   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=   timeoutcallbacks      r*   flushzTransport.flushn   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.kill|   s     r)   r,   quantityc                     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=   reasondata_categoryitemrT   s        r*   record_lost_eventzTransport.record_lost_event   s    . r)   c                      y)NTr(   rQ   s    r*   
is_healthyzTransport.is_healthy       r)   c                 D    	 | j                          y # t        $ r Y y w xY wN)rR   	ExceptionrQ   s    r*   __del__zTransport.__del__   s"    	IIK 		s    	r^   NN)__name__
__module____qualname____doc__r<   r>   rI   r   rF   rO   rR   rY   r[   r`   r(   r)   r*   r8   r8   ?   s\    
 J#(& 	 	  	 2r)   r8   c              #     K   |#t        j                  t        j                        }| j	                  d      D ]  }	 |j                         j	                  d      }|d d \  }}|t        t        |            z   }|xr |j	                  d      xs dD ]0  }|dk(  r#	 |d   j	                  d      }|rd	|v s$||f +||f 2  y # t        $ r g }Y &w xY w# t        t        f$ r Y w xY ww)
N,:r6   seconds;r^   metric_bucket   custom)r   nowr   utcsplitstripr   int
IndexErrorLookupError
ValueError)	headerro   limit
parametersretry_after_val
categoriesretry_aftercategory
namespacess	            r*   _parse_rate_limitsr      s
    
{ll8<<(c" 	,,S1J*4Ra.'OZ	#o2F GGK&@:+;+;C+@KG 0.(%/]%8%8%=
 &Z)?&33 #K//0 & (%'
( Z( 		sS   :C1A CC2C9CC1CCCCC.+C1-C..C1c                       e Zd ZdZd Z	 	 ddddZd Zd Zej                  dfd	Z
d
 ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 d dZd Zed        Zed        Zej>                  d        Zy)!BaseHttpTransportzThe base HTTP transport.c                    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	   rm   )sentry_sdk.constsr   r8   r>   r<   r;   r   _workerto_auth_auth_disabled_untilurllib3utilRetry_retryr   rs   _discarded_eventstime_last_client_report_sent
_make_pool_pool
sentry_sdkHub_hub_clsgetbrotlir   warning_compression_level_compression_algo)r=   r;   r   experimentscompression_levelcompression_algos         r*   r>   zBaseHttpTransport.__init__   s   -4)**'7;Q3RS__,,-?'-IJ
!ll((*!,"
 )-		%__&
 #kk."5'OO)OO>?
 '??(
 %0FN  	
 t#NNe  & $>1NNDFV '(D#%)D"%5D"(&7D###v-&'D###t+&'D# ,r)   Nr,   rS   c                t   | j                   d   sy ||j                  }d}|dk(  rJ|j                         xs i }t        |j	                  d      xs g       dz   }| 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spanrS   
attachmentzdata category not provided)	r;   rW   get_transaction_eventlenr   rY   	get_bytes	TypeErrorr   )r=   rV   rW   rX   rT   rG   
span_counts          r*   rY   z#BaseHttpTransport.record_lost_event  s     ||12 ..MH-224: !7!3!9r:Q>
&&vv
&K,. t~~/05A"899}f45A5r)   c                 8    |j                   j                  |      S r^   )headersr   r=   responserw   s      r*   _get_header_valuez#BaseHttpTransport._get_header_value(  s    ##F++r)   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<   ri   )r   r   r   r   updater   statusr   parse_retry_afterr   ro   r   rp   r   )r=   r   rw   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)   c                      fd}|j                  t         j                  j                        t         j                  j	                               d       	  j                  d|||      }	  j                  |       |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)Nc                 z    j                  | d       y j                  D ]  }j                  | |        y )Nerror)rW   rX   )rY   items)rV   rX   rH   r=   s     r*   record_lossz4BaseHttpTransport._send_request.<locals>.record_lossN  sB    &&vW&E$NN >D**6*=>r)   )z
User-AgentzX-Sentry-AuthPOSTnetworknetwork_errorr   
status_429i,     z%Unexpected status code: %s (body: %s)datacontentz	status_{})r   strr   client	to_header_requestr_   on_dropped_eventr   r   r   r   r&   formatclose)r=   bodyr   endpoint_typerH   r   r   s   `   `  r*   _send_requestzBaseHttpTransport._send_requestE  s=   	> 	!$**"3"34!$TZZ%9%9%;!<	

	}}	H	$$X.#%
 %%l3C'8??S+@;OOHfgh	4.PQ
 %%k&8&8&IJO,NN3  	!!),(	2 NNs   D; 1B9E" ;$E"E4c                      y r^   r(   )r=   _reasons     r*   r   z"BaseHttpTransport.on_dropped_event~  r\   r)   c                    | 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   )rV   r}   rT   )	timestampdiscarded_events)jsonclient_report)type)	r;   r   r   r   r   rs   r   r   r   )r=   forceintervalr   r}   rV   rT   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) ).Xv$ $*xXV)	 !
 	
)s   %C
c                 h    | j                  |d      }|| j                  t        |g             y y )Nr   )r   r   )r   )r   rF   r   )r=   r   r   s      r*   _flush_client_reportsz'BaseHttpTransport._flush_client_reports  s8    99PR9S$!!(-"AB %r)   c                 2      fd} ||      xs  |d       S )Nc                     | dk(  rd} j                   j                  |       }|d uxr& |t        j                  t        j
                        kD  S )Nstatsdrl   )r   r   r   ro   r   rp   )buckettsr=   s     r*   	_disabledz4BaseHttpTransport._check_disabled.<locals>._disabled  sI    
 !(%%))&1BT>Eb8<<+E&EEr)   r(   )r=   r}   r   s   `  r*   _check_disabledz!BaseHttpTransport._check_disabled  s    		F "5io5r)   c                 V    t        d | j                  j                         D              S )Nc              3   h   K   | ]*  }|t        j                  t        j                        kD   , y wr^   )r   ro   r   rp   ).0r   s     r*   	<genexpr>z5BaseHttpTransport._is_rate_limited.<locals>.<genexpr>  s'      
02Bhll++
s   02)anyr   valuesrQ   s    r*   _is_rate_limitedz"BaseHttpTransport._is_rate_limited  s+     
6:6J6J6Q6Q6S
 
 	
r)   c                 6    | j                   j                         S r^   )r   fullrQ   s    r*   _is_worker_fullz!BaseHttpTransport._is_worker_full  s    ||  ""r)   c                 H    | j                         xs | j                          S r^   )r   r   rQ   s    r*   r[   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   defaultr   self_rate_limitsratelimit_backoffr   )r   r      )r   z(Sending envelope [%s] project:%s host:%szContent-Typezapplication/x-sentry-envelopezContent-Encoding)r   r   rH   )r   r   rW   r   rY   appendr   r   r   _serialize_enveloper<   r   debugdescription
project_idhostr   getvaluer
   ENVELOPE)r=   rH   	new_itemsrX   client_report_itemcontent_encodingr   r   s           r*   _send_envelopez BaseHttpTransport._send_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&'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=   rH   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               r^   NotImplementedErrorrQ   s    r*   _get_pool_optionsz#BaseHttpTransport._get_pool_options      !##r)   c                     t               j                  d      }|sy|j                  d      D ]J  }|j                         }|j                  j                  |      s|j                  j                  |      sJ y y)NnoFrg   T)r	   r   rq   rr   r   endswithnetloc)r=   r<   no_proxyr   s       r*   _in_no_proxyzBaseHttpTransport._in_no_proxy  sj    <##D)NN3' 	D::<D''-1B1B1K1KD1Q	 r)   c                     t               r^   r  rQ   s    r*   r   zBaseHttpTransport._make_pool  r  r)   c                     t               r^   r  r=   methodr   r   r   s        r*   r   zBaseHttpTransport._request"  s     "##r)   c                       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r^   )r   r  r   )rH   r=   s   r*   send_envelope_wrapperzABaseHttpTransport.capture_envelope.<locals>.send_envelope_wrapper0  s8    ,. -##H-**,- - -s	   "7A 
full_queuequeue_overflowr   )r   submitr   r   rY   )r=   rH   r$  rX   s   ``  r*   rF   z"BaseHttpTransport.capture_envelope,  sY    	- ||""#89!!,/  D&&'7d&CD :r)   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   rQ   s   r*   r+   z)BaseHttpTransport.flush.<locals>.<lambda>D  s    (B(B(B(N r)   )r   r   r   r'  rO   rL   s   `  r*   rO   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   rR   rQ   s    r*   rR   zBaseHttpTransport.killG  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.   r@   N)rB   rC   rD   r(   r)   r*   _warn_hub_clszBaseHttpTransport._warn_hub_clsL  s     	\	
r)   c                 B    t         j                          | j                  S )QDEPRECATED: This attribute is deprecated and will be removed in a future release.HttpTransportr-  r   rQ   s    r*   hub_clszBaseHttpTransport.hub_clsV  s     	##%}}r)   c                 :    t         j                          || _        y)r/  Nr0  )r=   values     r*   r2  zBaseHttpTransport.hub_cls]  s     	##%r)   ra   )Fr   )Fr^   ) rb   rc   rd   re   r>   rY   r   r   r
   r   r   r   r   r   r   r   r   r[   r  r   r  r  r   r   rF   rO   rR   staticmethodr-  propertyr2  setterr(   r)   r*   r   r      s    ";(@ 	 B  BD,: #++7r
>C6
#G3j&,$	$$D$ 
2
 
 
   ^^ r)   r   c                   8    e Zd ZU er
eeef   ed<   d Zd Z	d Z
y)r1  r   c                    | j                   j                  di       j                  d      }|dn
t        |      d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_poolsr6   CERT_REQUIRED)	num_pools	cert_reqssocket_options
keep_aliver   r,   ca_certsSSL_CERT_FILEREQUESTS_CA_BUNDLE	cert_fileCLIENT_CERT_FILEkey_fileCLIENT_KEY_FILE)	r;   r   rs   KEEP_ALIVE_SOCKET_OPTIONSr   osenvironcertifiwhere)r=   r<  r;   r>  oused_optionsdefault_options          r*   r  zHttpTransport._get_pool_optionsi  s    LL$$^R8<<=RS	'/S^(

 <<()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   5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<   rv   r  r;   schemer	   r   r  
startswithurllib3.contrib.socksrX  ImportErrorr   r   r   r   r    )	r=   proxyr  rQ  rT  optsrV  use_socks_proxyrX  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-c                 r    | j                   j                  || j                  j                  |      ||      S )N)r   r   r   requestr   get_api_urlr   s        r*   r   zHttpTransport._request  s;     zz!!JJ""=1	 " 
 	
r)   N)rb   rc   rd   r   r   r   r    __annotations__r  r   r   r(   r)   r*   r1  r1  e  s&    [,.//(T,/\
r)   r1  c                       e Zd ZU dZer)eej                  ej                  ej                  f   e
d<   d Zd Zd Zd Zy)Http2Transportz&The HTTP2 transport based on httpcore.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valrw   s      r*   r   z3Http2Transport._get_header_value.<locals>.<genexpr>  s@       Szz'*002f< JJw's   A A)nextr   r   s     `r*   r   z Http2Transport._get_header_value  s(    $,$4$4
  r)   c                 v    | j                   j                  || j                  j                  |      ||      }|S )N)r   r   ra  )r=   r!  r   r   r   r   s         r*   r   zHttp2Transport._request  s?     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 )NrR  r,  )http2retriesr>  r   r,   r@  rA  rB  rC  rD  rE  rF  ssl_context)r<   rY  r;   rG  r   sslcreate_default_contextload_verify_locationsrH  rI  r   rJ  rK  load_cert_chain)	r=   r;   r>  rL  rM  rN  rs  rC  rE  s	            r*   r  z Http2Transport._get_pool_options  s    4 6OO**g5G << 01= -.  3AAQQqT1Q4LAL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)NrP  rQ  rR  rS  rT  rU  rV  rW  r>  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<   rv   r  r;   rY  r	   r   r  rZ  popr   r   httpcore
SOCKSProxyRuntimeError	HTTPProxyConnectionPool)r=   r]  r  rQ  rT  r^  rV  r>  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N)rb   rc   rd   re   r   r   r{  r|  r~  r  rd  r   r   r  r   r(   r)   r*   rf  rf    sF    4##X%7%79P9PP 			 #	J)	3r)   rf  c                        e Zd Z fdZ xZS )rf  c                 N    t         |   |       t        j                  d       y )NzhYou tried to use HTTP2Transport but don't have httpcore[http2] installed. Falling back to HTTPTransport.)superr>   r   r   )r=   r;   	__class__s     r*   r>   zHttp2Transport.__init__  s    GW%NNzr)   )rb   rc   rd   r>   __classcell__)r  s   @r*   rf  rf    s    	 	r)   c                   ,    e Zd ZdZd Zd ZdeddfdZy)_FunctionTransportz
    DEPRECATED: Users wishing to provide a custom transport should subclass
    the Transport class, rather than providing a function.
    c                 <    t         j                  |        || _        y r^   )r8   r>   _func)r=   funcs     r*   r>   z_FunctionTransport.__init__Z  s     	4 
r)   c                 &    | j                  |       y r^   )r  )r=   rG   s     r*   rI   z _FunctionTransport.capture_eventa  s     	

5r)   rH   returnNc                 L    |j                         }|| j                  |       y y r^   )	get_eventrI   )r=   rH   rG   s      r*   rF   z#_FunctionTransport.capture_envelopeh  s+     ""$u% r)   )rb   rc   rd   re   r>   rI   r   rF   r(   r)   r*   r  r  T  s$    
& &d &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.r6   r@   r:   )r   rf  r1  
isinstancer8   r   
issubclasscallablerB   rC   rD   r  )r;   ref_transportuse_http2_transporttransport_clss       r*   make_transportr  q  s    K(M!++nb9==>OQVW .=  -+	M4	(Zy-Q%	-	 H		
 "-00 u~W%%r)   r^   )Eabcr   r   r  rH  r   r'   rt  r   rB   r   r   r   collectionsr   urllib.requestr	   r   r\  r   rJ  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   urllib3.poolmanagerr   r    sentry_sdk._typesr!   r"   rG  
SOL_SOCKETSOL_TCPoptionr   AttributeErrorr8   r   r   r1  r{  h2rf  r  r  r(   r)   r*   <module>r     s   # 	 	   
   2 2 # %    * E E . : :  "/0: ?C^^<bA^^=rB^^;Q?	 F!((&)YVAY[&))LMi iX6\	 \~i
% i
X@3q3* q3h& &:E  FT   	v   s5   F  "FF  F
FFFF,+F,