o
    i}                  	   @   s  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 zd dlZW n eyK   dZY nw 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#rd 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j8dd dfej9dd dfej9dd dfej9dd d ffD ]Z:ze7;e:d  e:d  e:d! f W q e<y   Y qw G d"d# d#eZ=	d9d$e>d%d&d'd(fd)d*Z?G d+d, d,e=Z@G d-d. d.e@ZAz
d dlBZBd dlCZCW n eyU   G d/d0 d0eAZDY n	w G d1d0 d0e@ZDG d2d3 d3e=ZEd:d7d8ZFdS );    )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                   C   
   t tdS )NSO_KEEPALIVEgetattrsocket r(   r(   Q/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/transport.py<lambda>0      
 r*      c                   C   r#   )NTCP_KEEPIDLEr%   r(   r(   r(   r)   r*   1   r+   -   c                   C   r#   )NTCP_KEEPINTVLr%   r(   r(   r(   r)   r*   2   r+   
   c                   C   r#   )NTCP_KEEPCNTr%   r(   r(   r(   r)   r*   3   r+         c                   @   s   e Zd ZU dZdZded< d'd(d
dZd)ddZed*ddZ		d'ddde
ddd	dfddZd+ddZ		d,dddeddd d!d"ed	df
d#d$Zddd	efd%d&ZdS )-	TransportzWBaseclass for all transports.

    A transport is used to send an event to sentry.
    NzOptional[Dsn]
parsed_dsnselfr   optionsOptional[Dict[str, Any]]returnc                 C   sB   || _ |r|d d ur|d rt|d |d| _d S d | _d S )Ndsnorg_id)r7   r
   getr5   r6   r7   r(   r(   r)   __init__E   s   
zTransport.__init__eventr!   c                 C   s.   t jdtdd t }|| | | dS )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!r3   
stacklevelN)warningswarnDeprecationWarningr   	add_eventcapture_envelope)r6   r?   enveloper(   r(   r)   capture_eventL   s   
zTransport.capture_eventrG   r   c                 C      dS )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(   )r6   rG   r(   r(   r)   rF   ^   s   	zTransport.capture_envelopetimeoutcallbackzOptional[Any]c                 C   rI   )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(   r6   rJ   rK   r(   r(   r)   flushi   s   zTransport.flushc                 C   rI   )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(   r6   r(   r(   r)   killv   s   zTransport.killr,   quantityreasondata_categoryOptional[EventDataCategory]itemOptional[Item]rQ   c                C   rI   )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(   )r6   rR   rS   rU   rQ   r(   r(   r)   record_lost_event   s   zTransport.record_lost_eventc                 C   rI   )NTr(   rN   r(   r(   r)   
is_healthy      zTransport.is_healthyN)r6   r   r7   r8   r9   N)r6   r   r?   r!   r9   Nr6   r   rG   r   r9   Nr6   r   r9   NNN)__name__
__module____qualname____doc__r5   __annotations__r>   rH   r   rF   floatrM   rO   strintrW   boolrX   r(   r(   r(   r)   r4   =   sD   
 



r4   headernowzOptional[datetime]r9   z6Iterable[Tuple[Optional[EventDataCategory], datetime]]c              
   c   s    |d u rt tj}| dD ]8}z+| d}|d d \}}|tt|d }|r2|dp3dD ]}||fV  q4W q tt	fyH   Y qw d S )N,:r3   seconds;rZ   )
r   rh   r   utcsplitstripr   re   LookupError
ValueError)rg   rh   limit
parametersretry_after_val
categoriesretry_aftercategoryr(   r(   r)   _parse_rate_limits   s   ry   c                   @   s  e Zd ZdZdZd^d	d
Z		d_dddedddddeddf
ddZdddddeddfddZ							d`ddZ
ejdfdddedd d!d"d#d$ddfd%d&Zddd'eddfd(d)Z	+daddd,ed-eddfd.d/Zdbddd,eddfd0d1Zd2edefd3d4Zdddefd5d6Zdddefd7d8Zdddefd9d:Zdcd<d=Z			#	;		>ddd?d@ZdedAdBZdddCdDdefdEdFZ				GdfdHdIZdddJed!d"ddddKddfdLdMZ	#	;		dgdNdOZ	dhdddPedQdRddfdSdTZdidUdVZ e!djdWdXZ"e#dkdZd[Z$e$j%dld]d[Z$dS )mBaseHttpTransportzThe base HTTP transport.   r6   r   r7   Dict[str, Any]r9   Nc                 C   sL  ddl m} t| | | jd usJ || _t|d d| _| jd| | _	i | _
tj | _tt| _t | _|  | _tj| _|di }|d|d}|d	|d us]td u r_d
nd}|dkrstd u rstd d
}d }|dvrtd| d| _d | _n|| _|d ur|| _d S | jd
krd| _d S | jdkrd| _d S d S )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}   r4   r>   r5   r7   r   _workerto_auth_auth_disabled_untilurllib3utilRetry_retryr   re   _discarded_eventstime_last_client_report_sent
_make_pool_pool
sentry_sdkHub_hub_clsr<   brotlir   warning_compression_level_compression_algo)r6   r7   r}   experimentscompression_levelcompression_algor(   r(   r)   r>      sX   






zBaseHttpTransport.__init__r,   rP   rR   rS   rT   rU   rV   rQ   c                C   s   | j d sd S |d urY|j}d}|dkr7| pi }ttttttf  |	dp)g d }| j
|d|d n*|dkrL|rLt| }| j
|d|d n|d	krXt| pWd}n|d u ratd
| j||f  |7  < d S )Nsend_client_reportsr,   transactionspansspanrP   log_itemlog_byte
attachmentzdata category not provided)r7   rS   get_transaction_eventlenr   r   r   rd   objectr<   rW   	get_bytes	TypeErrorr   )r6   rR   rS   rU   rQ   r?   
span_count
bytes_sizer(   r(   r)   rW      s&   
&z#BaseHttpTransport.record_lost_eventresponser   rg   Optional[str]c                 C   s   |j |S rZ   )headersr<   r6   r   rg   r(   r(   r)   _get_header_value  s   z#BaseHttpTransport._get_header_value2Union[urllib3.BaseHTTPResponse, httpcore.Response]c                 C   s   |  |d}|rtd | jt| d S |jdkrEtd |  |d}|d ur1| j|nd p4d}t	
tjt|d | jd < d S d S )Nzx-sentry-rate-limitsz%Rate-limited via x-sentry-rate-limits  zRate-limited via 429zRetry-After<   rk   )r   r   r   r   updatery   statusr   parse_retry_afterr   rh   r   rn   r   )r6   r   rg   retry_after_valuerw   r(   r(   r)   _update_rate_limits  s"   


z%BaseHttpTransport._update_rate_limitsbodyr   zDict[str, str]endpoint_typer	   rG   zOptional[Envelope]c           	         s|  dt dd f fdd}|t jjt j d z
d|||}W n ty8   d |d  w z| |j	d	krkd
}t
|dt
|dd }|d ur\|d| d7 }t| d |d n9|j	dkrvd n5|j	dks|j	dk rtd|j	t
|dt
|dd  d|j	 |d W |  d S W |  d S W |  d S W |  d S |  w )NrR   r9   c                    s8    d u rj | dd d S  jD ]	}j | |d qd S )Nerror)rS   rU   )rW   items)rR   rU   rG   r6   r(   r)   record_loss;  s
   
z4BaseHttpTransport._send_request.<locals>.record_loss)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_{})rd   r   r   client	to_header_request	Exceptionon_dropped_eventr   r   r&   r   r   formatclose)	r6   r   r   r   rG   r   r   size_exceeded_messageresponse_messager(   r   r)   _send_request4  sb   









	zBaseHttpTransport._send_request_reasonc                 C   s   d S rZ   r(   )r6   r   r(   r(   r)   r   x  rY   z"BaseHttpTransport.on_dropped_eventFr   forceintervalc                 C   st   | j d sd S |s| jt | k sd S | j}tt| _t | _|s%d S ttt dd | D ddddS )Nr   c                 S   s    g | ]\\}}}|||d qS ))rR   rx   rQ   r(   ).0rx   rR   rQ   r(   r(   r)   
<listcomp>  s    
zBBaseHttpTransport._fetch_pending_client_report.<locals>.<listcomp>)	timestampdiscarded_events)jsonclient_report)type)	r7   r   r   r   r   re   r   r   r   )r6   r   r   r   r(   r(   r)   _fetch_pending_client_report{  s&   


z.BaseHttpTransport._fetch_pending_client_reportc                 C   s0   | j |dd}|d ur| t|gd d S d S )Nr   )r   r   )r   )r   rF   r   )r6   r   r   r(   r(   r)   _flush_client_reports  s   z'BaseHttpTransport._flush_client_reportsrx   c                    s&   dddt f fdd}||p|d S )Nbucketr   r9   c                    s$    j | }|d uo|ttjkS rZ   )r   r<   r   rh   r   rn   )r   tsrN   r(   r)   	_disabled  s   z4BaseHttpTransport._check_disabled.<locals>._disabled)rf   )r6   rx   r   r(   rN   r)   _check_disabled  s   z!BaseHttpTransport._check_disabledc                 C   s   t dd | j D S )Nc                 s   s     | ]}|t tjkV  qd S rZ   )r   rh   r   rn   )r   r   r(   r(   r)   	<genexpr>  s    
z5BaseHttpTransport._is_rate_limited.<locals>.<genexpr>)anyr   valuesrN   r(   r(   r)   _is_rate_limited  s   z"BaseHttpTransport._is_rate_limitedc                 C   s
   | j  S rZ   )r   fullrN   r(   r(   r)   _is_worker_full  s   
z!BaseHttpTransport._is_worker_fullc                 C   s   |   p|   S rZ   )r   r   rN   r(   r(   r)   rX     s   zBaseHttpTransport.is_healthyr   c                 C   s   g }|j D ]}| |jr|jdv r| d | jd|d q|| qt|j|d}|j s1d S | jdd}|d urA|j | | 	|\}}| j
d usOJ td|j| j
j| j
j d	d
i}|rf||d< | j| |tj|d d S )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   rG   )r   r   rS   r   rW   appendr   r   r   _serialize_enveloper5   r   debugdescription
project_idhostr   getvaluer	   ENVELOPE)r6   rG   	new_itemsrU   client_report_itemcontent_encodingr   r   r(   r(   r)   _send_envelope  s@   


z BaseHttpTransport._send_envelope tuple[Optional[str], io.BytesIO]c                 C   s   d }t  }| jdks| jd u r|| ||fS | j}| jdkr6td ur6|tj| | jd ||fS t	j
|d| jd}|| W d    ||fS 1 sRw   Y  ||fS )Nr   r   )qualityw)fileobjmodecompresslevel)ioBytesIOr   r   serialize_intor   writecompress	serializer   GzipFile)r6   rG   r   r   fr(   r(   r)   r     s,   


z%BaseHttpTransport._serialize_envelopec                 C      t  rZ   NotImplementedErrorrN   r(   r(   r)   _get_pool_options  s   z#BaseHttpTransport._get_pool_optionsr5   r
   c                 C   sN   t  d}|s
dS |dD ]}| }|j|s!|j|r$ dS qdS )NnoFri   T)r   r<   ro   rp   r   endswithnetloc)r6   r5   no_proxyr   r(   r(   r)   _in_no_proxy  s   zBaseHttpTransport._in_no_proxybUnion[PoolManager, ProxyManager, httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool]c                 C   r
  rZ   r  rN   r(   r(   r)   r   	  s   zBaseHttpTransport._make_poolmethodMapping[str, str]c                 C   r
  rZ   r  r6   r  r   r   r   r(   r(   r)   r     s   zBaseHttpTransport._requestc                    sH   d fdd}j |s d  jD ]}jd|d qd S d S )Nr9   c                      s>   t       W d    d S 1 sw   Y  d S rZ   )r   r   r   r(   r   r(   r)   send_envelope_wrapper  s   

"zABaseHttpTransport.capture_envelope.<locals>.send_envelope_wrapper
full_queuequeue_overflowr   r9   N)r   submitr   r   rW   )r6   rG   r  rU   r(   r   r)   rF     s   

z"BaseHttpTransport.capture_enveloperJ   rK   z&Optional[Callable[[int, float], None]]c                    s<   t d |dkr j fdd  j|| d S d S )NzFlushing HTTP transportr   c                      s    j ddS )NT)r   )r   r(   rN   r(   r)   r*   -  s    z)BaseHttpTransport.flush.<locals>.<lambda>)r   r   r   r  rM   rL   r(   rN   r)   rM   %  s
   
zBaseHttpTransport.flushc                 C   s   t d | j  d S )NzKilling HTTP transport)r   r   r   rO   rN   r(   r(   r)   rO   0  s   
zBaseHttpTransport.killc                   C   s   t jdtdd dS )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(   r)   _warn_hub_cls4  s
   
zBaseHttpTransport._warn_hub_clstype[sentry_sdk.Hub]c                 C   s   t   | jS )QDEPRECATED: This attribute is deprecated and will be removed in a future release.HttpTransportr  r   rN   r(   r(   r)   hub_cls=  s   zBaseHttpTransport.hub_clsvaluec                 C   s   t   || _dS )r  Nr   )r6   r#  r(   r(   r)   r"  C  s   
r6   r   r7   r|   r9   Nr]   )r6   r   r   r   r9   N)Fr   )Fr[   )r6   r   rG   r   r9   r   r6   r   r9   r|   )r6   r   r9   r  rG   r   r9   NrZ   r\   r  )r6   r   r9   r  )r6   r   r#  r  r9   N)&r^   r_   r`   ra   TIMEOUTr>   rd   re   rW   r   r   r	   r   bytesr   r   rf   r   r   r   r   r   rX   r   r   r  r  r   r   rF   rc   rM   rO   staticmethodr  propertyr"  setterr(   r(   r(   r)   rz      s    
?
(


D
 
3




	


rz   c                   @   sP   e Zd ZU erded< dddZdd	d
ZdddeddddddddfddZdS )r!   Union[PoolManager, ProxyManager]r   r6   r   r9   r|   c                 C   s  | j di d}|d u rdnt|dtj| jdd}d }| j d d ur+| j d }| j d rQ|d u r6g }d	d
 |D }tD ]}|d |d f|vrP|| q?|d urY||d< | j d pmtj	dpmtj	dpmt
 |d< | j d pztj	d|d< | j d ptj	d|d< |S )Nr   transport_num_poolsr3   CERT_REQUIRED)total)	num_pools	cert_reqsrJ   socket_options
keep_alivec                 S      h | ]
}|d  |d fqS r   r,   r(   r   or(   r(   r)   	<setcomp>_      z2HttpTransport._get_pool_options.<locals>.<setcomp>r   r,   ca_certsSSL_CERT_FILEREQUESTS_CA_BUNDLE	cert_fileCLIENT_CERT_FILEkey_fileCLIENT_KEY_FILE)r7   r<   re   r   Timeoutr'  KEEP_ALIVE_SOCKET_OPTIONSr   osenvironcertifiwhere)r6   r0  r7   r2  used_optionsdefault_optionr(   r(   r)   r  N  s@   





zHttpTransport._get_pool_optionsc           	      C   s,  | j d u r	tdd }| | j }| jd }| j jdkr+|dkr+|p*| o*t d}| jd }|sA|dkrA|p@| o@t d}|  }|r| jd }|rR||d< |drd	}zd
dl	m
} W n tyr   d}td| Y nw |r}||fi |S tjdi |S tj|fi |S tjdi |S )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(   )r5   rr   r  r7   schemer   r<   r  
startswithurllib3.contrib.socksrQ  ImportErrorr   r   r   r   r    )	r6   proxyr  rJ  rM  optsrO  use_socks_proxyrQ  r(   r(   r)   r   w  s>   




zHttpTransport._make_poolr  r   r	   r   r   r   r  zurllib3.BaseHTTPResponsec                 C   s   | j j|| j|||dS )N)r   r   )r   requestr   get_api_urlr  r(   r(   r)   r     s   
zHttpTransport._requestNr%  )r6   r   r9   r,  )	r^   r_   r`   r   rb   r  r   rd   r   r(   r(   r(   r)   r!  J  s$   
 

)-r!  c                       s   e Zd Zd	 fddZ  ZS )
Http2Transportr6   r   r7   r|   r9   Nc                    s   t  | td d S )NzhYou tried to use HTTP2Transport but don't have httpcore[http2] installed. Falling back to HTTPTransport.)superr>   r   r   r=   	__class__r(   r)   r>     s   zHttp2Transport.__init__r$  )r^   r_   r`   r>   __classcell__r(   r(   r]  r)   r[    s    r[  c                   @   sz   e Zd ZU dZdZerded< ddddd	ed
dfddZdddeddddddd
dfddZ	dddZ
			
	dddZdS ) r[  z&The HTTP2 transport based on httpcore.   zeUnion[
                httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool
            ]r   r6   r   r   zhttpcore.Responserg   r9   r   c                    s   t  fdd|jD d S )Nc                 3   s0    | ]\}}| d   kr| d V  qdS )asciiN)decodelower)r   keyvalrg   r(   r)   r     s    z3Http2Transport._get_header_value.<locals>.<genexpr>)nextr   r   r(   rf  r)   r     s   
z Http2Transport._get_header_valuer  r   r	   r   r   r   r  c                 C   s8   | j j|| j|||d| j| j| j| jdid}|S )NrJ   )poolconnectr  read)r   r   
extensions)r   rY  r   rZ  r'  )r6   r  r   r   r   r   r(   r(   r)   r     s   
zHttp2Transport._requestr|   c                 C   s   | j d uo
| j jdkdd}| jd d ur| jd ng }dd |D }tD ]}|d |d f|vr6|| q%||d< t }|| jd	 pUtj	
d
pUtj	
dpUt  | jd patj	
d}| jd pltj	
d}|d urw||| ||d< |S )NrK  r  )http2retriesr2  c                 S   r4  r5  r(   r6  r(   r(   r)   r8    r9  z3Http2Transport._get_pool_options.<locals>.<setcomp>r   r,   r:  r;  r<  r=  r>  r?  r@  ssl_context)r5   rR  r7   rB  r   sslcreate_default_contextload_verify_locationsrC  rD  r<   rE  rF  load_cert_chain)r6   r7   r2  rG  rH  rn  r=  r?  r(   r(   r)   r    s:   






z Http2Transport._get_pool_optionsGUnion[httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool]c                 C   s(  | j d u r	tdd }| | j }| jd }| j jdkr+|dkr+|p*| o*t d}| jd }|sA|dkrA|p@| o@t d}|  }|r| jd }|rR||d< |drzd	|v rh|	d	}|rht
d
 tjdd|i|W S  ty   t
d| Y nw tjdd|i|S tjdi |S )NrI  rJ  rK  rL  rM  rN  rO  rP  r2  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(   )r5   rr   r  r7   rR  r   r<   r  rS  popr   r   httpcore
SOCKSProxyRuntimeError	HTTPProxyConnectionPool)r6   rV  r  rJ  rM  rW  rO  r2  r(   r(   r)   r     s@   





zHttp2Transport._make_poolNr%  )r6   r   r9   rs  )r^   r_   r`   ra   r'  r   rb   rd   r   r   r  r   r(   r(   r(   r)   r[    sB   
 


$c                   @   s>   e Zd ZdZ				dddZ					dd
dZdddZdS )_FunctionTransportz
    DEPRECATED: Users wishing to provide a custom transport should subclass
    the Transport class, rather than providing a function.
    funcCallable[[Event], None]r9   Nc                 C   s   t |  || _d S rZ   )r4   r>   _func)r6   r|  r(   r(   r)   r>   E  s   

z_FunctionTransport.__init__r?   r!   c                 C   s   |  | d S rZ   )r~  )r6   r?   r(   r(   r)   rH   L  s   
z _FunctionTransport.capture_eventrG   r   c                 C   s"   |  }|d ur| | d S d S rZ   )	get_eventrH   )r6   rG   r?   r(   r(   r)   rF   S  s   z#_FunctionTransport.capture_envelope)r|  r}  r9   N)r?   r!   r9   Nr&  )r^   r_   r`   ra   r>   rH   rF   r(   r(   r(   r)   r{  ?  s    

r{  r7   r|   Optional[Transport]c                 C   s   | d }|  di  dd}|rtnt}t|tr|S t|tr(t|tr(|}nt|r8tj	dt
dd t|S | d r@|| S d S )	N	transportr   transport_http2FzFunction transports are deprecated and will be removed in a future release.Please provide a Transport instance or subclass, instead.r3   r@   r:   )r<   r[  r!  
isinstancer4   r   
issubclasscallablerB   rC   rD   r{  )r7   ref_transportuse_http2_transporttransport_clsr(   r(   r)   make_transport\  s$   

r  rZ   )r7   r|   r9   r  )Gabcr   r   r  rC  r   r'   ro  r   rB   r   r   r   collectionsr   urllib.requestr   r   rU  r   rE  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"   rB  
SOL_SOCKETSOL_TCPoptionr   AttributeErrorr4   rd   ry   rz   r!  rv  h2r[  r{  r  r(   r(   r(   r)   <module>   s    "_
    i~