Viewing File: /opt/hc_python/lib/python3.12/site-packages/sentry_sdk/__pycache__/transport.cpython-312.pyc

�

_�*j������ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZddl
mZddlmZmZmZddlmZ	ddlZ	ddlZ	ddlZeduZ	ddlZeduZddlmZmZmZmZddl Z ddl!Z!ddl"Z"ddl#m$Z$dd	l%m&Z&m'Z'm(Z(dd
l)m*Z*m+Z+m,Z,m-Z-ddl.m/Z/m0Z0m1Z1er(ddlm2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;dd
l<m=Z=m>Z>ddl?m@Z@mAZAgZBej�d�dfej�d�dfej�d�dfej�d�dffD]%ZE	eBj�eEdeEd�eEdf��'dddeHddfd�ZIGd�de�ZJ	d4deHd d!dd"fd#�ZKGd$�d%eJ�ZLGd&�d'eL�ZMGd(�d)eM�ZNGd*�d+eL�ZOesGd,�d-eN�ZPnGd.�d-eM�ZPGd/�d0eJ�ZQGd1�d2eJ�ZRd5d3�ZSy#e$rdZY��rwxYw#e$rdZY��{wxYw#e$rdZY���wxYw#e$rdZY���wxYw#eG$rY��wxYw)6�N)�ABC�abstractmethod)�defaultdict)�datetime�	timedelta�timezone)�
getproxiesF)�
TYPE_CHECKING�Dict�List�cast)�EndpointType)�Envelope�Item�
PayloadRef)�Dsn�capture_internal_exceptions�logger�mark_sentry_task_internal)�AsyncWorker�BackgroundWorker�Worker)
�Any�Callable�DefaultDict�Iterable�Mapping�Optional�Self�Tuple�Type�Union)�PoolManager�ProxyManager)�Event�EventDataCategoryc�"�ttd�S)N�SO_KEEPALIVE��getattr�socket���C/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/transport.py�<lambda>r/Ls����� ?r-�c�"�ttd�S)N�TCP_KEEPIDLEr)r,r-r.r/r/Ms��W�V�^�<r-�-c�"�ttd�S)N�
TCP_KEEPINTVLr)r,r-r.r/r/Ns��W�V�_�=r-�
c�"�ttd�S)N�TCP_KEEPCNTr)r,r-r.r/r/Os��W�V�]�;r-���responser�header�return�
Optional[str]c�b��|j��t�fd�|jD�d�S)z<Case-insensitive header lookup for httpcore-style responses.c3��K�|]:\}}|jd�j��k(r|jd����<y�w)�asciiN)�decode�lower)�.0�key�val�header_lowers   �r.�	<genexpr>z-_get_httpcore_header_value.<locals>.<genexpr>]s@�����	
�,���S��z�z�'�"�(�(�*�l�:�
�J�J�w��,�s�AAN)rC�next�headers)r;r<rGs  @r.�_get_httpcore_header_valuerKYs3����<�<�>�L��	
�$�,�,�	
�
	
�
�r-c��eZdZUdZdZded<ddd�Zdd	�Zedd
��Z		dddde
dd
ddfd�Zdd�Z		ddd�de
dddddeddf
d�Zdddefd�Zy) �	TransportzWBaseclass for all transports.

    A transport is used to send an event to sentry.
    Nz
Optional[Dsn]�
parsed_dsn�selfrr=c�v�||_|r)|dr$t|d|jd��|_yd|_y)N�dsn�org_id)�optionsr�getrN�rOrSs  r.�__init__zTransport.__init__ns4������w�u�~�!�'�%�.�'�+�+�h�2G�H�D�O�"�D�Or-c��tjdtd��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_eventzTransport.capture_eventus>��	�
�
�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,)rOr`s  r.r^zTransport.capture_envelope�s��	
r-�timeout�callback�
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,�rOrcrds   r.�flushzTransport.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,�rOs r.�killzTransport.kill�s��r-r0��quantity�reason�
data_category�Optional[EventDataCategory]�item�Optional[Item]rmc��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,�rOrnrorqrms     r.�record_lost_eventzTransport.record_lost_event�s��,r-c��y)NTr,rjs r.�
is_healthyzTransport.is_healthy����r-�N)rOrrSzOptional[Dict[str, Any]]r=N)rOrr_r%r=N�rOrr`rr=N�rOrr=N�NN)�__name__�
__module__�__qualname__�__doc__rN�__annotations__rVrarr^�floatrhrk�str�intru�boolrwr,r-r.rMrMfs����
#'�J��&�#�(�$�
��
�%)������"��
�	��8<�!%�	��
���5���	��
�
��0���D�r-rM�nowzOptional[datetime]z6Iterable[Tuple[Optional[EventDataCategory], datetime]]c#�tK�|�#tjtj�}|j	d�D]f}	|j�j	d�}|dd\}}|t
t|���z}|xr|j	d�xsdD]}||f���
�hy#ttf$rY�{wxYw�w)N�,�:r:��seconds�;ry)
rr�r�utc�split�striprr��LookupError�
ValueError)r<r��limit�
parameters�retry_after_val�
categories�retry_after�categorys        r.�_parse_rate_limitsr��s������{��l�l�8�<�<�(�����c�"��	�����,�,�S�1�J�*4�R�a�.�'�O�Z��	�#�o�2F� G�G�K�&�@�:�+;�+;�C�+@�K�G�K����+�+�L�
#���Z�(�	��	�s)�:B8�A#B#� B8�#B5�2B8�4B5�5B8c���eZdZdZdZd>d�Zd?d	�Z		d@d
d�ded
ddddeddf
d�Z	dddddeddfd�Z
						dAd�Z		dBdddddededdf
d�Z								dCd�Z
						dDd!�Zddd"eddfd#�Z	dEddd$ed%eddfd&�Zd'edefd(�Zdddefd)�Zdddefd*�Zdddefd+�Z						dFd,�Z						dGd-�Z	dHddd.eddfd/�ZdId0�ZedJd1��ZdJd2�Zddd3d4defd5�Z				dKd6�Zddd7ed8d9d:dd d;ddfd<�ZdLd=�Z y)M�HttpTransportCorez0Shared base class for sync and async transports.�rOr�Dict[str, Any]r=Nc��ddlm}tj||�|j�J�||_|j
|�|_|jjd|z�|_	i|_
tjj�|_tt �|_t%j$�|_|j)�|_t,j.|_|j3di�}|j3d|j3d��}|j3d|�t4�dnd	�}|d	k(rt4�t7j8d
�d}d}|dvr%t7j8d|�d|_d|_n||_|�||_y|j<dk(rd
|_y|j<d	k(rd|_yy)Nr)�VERSIONzsentry.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�rMrVrNrS�_create_worker�_worker�to_auth�_auth�_disabled_until�urllib3�util�Retry�_retryrr��_discarded_events�time�_last_client_report_sent�
_make_pool�_pool�
sentry_sdk�Hub�_hub_clsrT�brotlir�warning�_compression_level�_compression_algo)rOrSr��experiments�compression_level�compression_algos      r.rVzHttpTransportCore.__init__�s���-����4��)����*�*�*�)0����*�*�7�3����_�_�,�,�-?�'�-I�J��
�NP����l�l�(�(�*������	
��)-�	�	���%��_�_�&��
�#����
��k�k�.�"�5��'�O�O�)��O�O�>�?�
��'�?�?�(�
%�0�F�N���	
���t�#����N�N�e�
� &�� $���>�1��N�N�D�FV�
�'(�D�#�%)�D�"�%5�D�"��(�&7�D�#�
�
#�
#�v�
-�&'�D�#�
�
#�
#�t�
+�&'�D�#�,r-c��t��ry��NotImplementedErrorrUs  r.r�z HttpTransportCore._create_worker���!�#�#r-r0rlrnrorprqrrrmc�"�|jdsy|��|j}d}|dk(rl|j�xsi}tt	t
tttf|jd�xsg��dz}|j|d|��ne|dk(r0|r.t|j��}|j|d|��n0|d	k(r+t|j��xsd}n
|�td
��|j||fxx|z
cc<y)N�send_client_reportsr0�transaction�spans�spanrl�log_item�log_byte�
attachmentzdata category not provided)rSro�get_transaction_event�lenr
rrr��objectrTru�	get_bytes�	TypeErrorr�)rOrnrorqrmr_�
span_count�
bytes_sizes        r.ruz#HttpTransportCore.record_lost_events���|�|�1�2���� �.�.�M��H��
�-��2�2�4�:�����T�$�s�F�{�"3�4�e�i�i��6H�6N�B�O�P�ST�T���&�&�v�v�
�&�K��*�,�� ����!1�2�
��&�&�v�z�J�&�O��,�.��t�~�~�/�0�5�A��
�
"��8�9�9����}�f�4�5��A�5r-r;rr<r>c�8�|jj|�Sry)rJrT�rOr;r<s   r.�_get_header_valuez#HttpTransportCore._get_header_valueBs�����#�#�F�+�+r-�2Union[urllib3.BaseHTTPResponse, httpcore.Response]c���|j|d�}|r:tjd�|jj	t|��y|jdk(r�tjd�|j|d�}|�|jj|�ndxsd}tjtj�t|��z|jd<yy)Nzx-sentry-rate-limitsz%Rate-limited via x-sentry-rate-limits�zRate-limited via 429zRetry-After�<r�)r�rr�r��updater��statusr��parse_retry_afterrr�rr�r)rOr;r<�retry_after_valuer�s     r.�_update_rate_limitsz%HttpTransportCore._update_rate_limitsGs���
�'�'��2H�I����N�N�B�C�� � �'�'�(:�6�(B�C�
�_�_��
#��N�N�1�2� $� 6� 6�x�� O��%�0����-�-�.?�@����	
�
*2���h�l�l�)C�i�#�G�*�D� � ��&�$r-r`�Optional[Envelope]�loss_reason�
record_reasonc�X���dtddf��fd�}�j|�||�y)Nrnr=c�z�����j|d��y�jD]}�j||���y)N�error)ro�rq)ru�items)rnrqr`rOs  ��r.�record_lossz<HttpTransportCore._handle_request_error.<locals>.record_lossfs=������&�&�v�W�&�E�$�N�N�D��*�*�6��*�=�+r-)r��on_dropped_event)rOr`r�r�r�s``   r.�_handle_request_errorz'HttpTransportCore._handle_request_error`s.���	>��	>��	>�	
���k�*��M�"r-c
�(�|j|�|jdk(rOd}t|dt|dd��}|�	|d|�d�z
}tj|�|j|dd�	�y|jd
k(r|j
d�y|jdk\s|jd
krdtjd|jt|dt|dd���|j|dj|j���yy)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*rr�r�r��format)rOr;r`�size_exceeded_message�response_messages     r.�_handle_responsez"HttpTransportCore._handle_responseps��
	
� � ��*��?�?�c�!�M�
"� '��&�'�(�I�t�"D� �� �+�%�8�4D�3E�Q�)G�G�%��L�L�.�/��&�&�!�|�<�
'�
��_�_��
#�

�!�!�,�/��
�_�_��
#�x����'<��L�L�7������&�'�(�I�t�*L�M�
�

�&�&�!�{�/A�/A�(�/�/�/R�
'�
�
(=r-rJc��|jt|jj�t|jj	��d��y)N)z
User-Agentz
X-Sentry-Auth)r�r�r��client�	to_header)rOrJs  r.�_update_headersz!HttpTransportCore._update_headers�s<��	���!�$�*�*�"3�"3�4�!$�T�Z�Z�%9�%9�%;�!<�
�	
r-�_reasonc��yryr,)rOr�s  r.r�z"HttpTransportCore.on_dropped_event�rxr-�force�intervalc��|jdsy|s%|jtj�|z
ksy|j}t	t
�|_tj�|_|syt
ttj�|j�D���cgc]\\}}}|||d���c}}}d���d��Scc}}}w)Nr�)rnr�rm)�	timestamp�discarded_events)�json�
client_report)�type)	rSr�r�r�rr�rrr�)rOr�r�rr�rnrms       r.�_fetch_pending_client_reportz.HttpTransportCore._fetch_pending_client_report�s����|�|�1�2����6�6�����x�9O�O���1�1��!,�S�!1���(,�	�	���%�����!%����.�3�3�5�)�
6��.�X�v�$�$*�x�X�V�6�)�	�
�!�
�	
��)s�%C
r�c�D��dddtf�fd�}||�xs|d�S)N�bucketrr=c����jj|�}|duxr&|tjtj
�kDSry)r�rTrr�rr�)r�tsrOs  �r.�	_disabledz4HttpTransportCore._check_disabled.<locals>._disabled�s:����%�%�)�)�&�1�B��T�>�E�b�8�<�<����+E�&E�Er-)r�)rOr�r
s`  r.�_check_disabledz!HttpTransportCore._check_disabled�s/���	F�e�	F��	F���"�5�i��o�5r-c�V�td�|jj�D��S)Nc3�hK�|]*}|tjtj�kD���,y�wry)rr�rr�)rDr	s  r.rHz5HttpTransportCore._is_rate_limited.<locals>.<genexpr>�s'����
�6S��B����h�l�l�+�+�6S�s�02)�anyr��valuesrjs r.�_is_rate_limitedz"HttpTransportCore._is_rate_limited�s+���
�6:�6J�6J�6Q�6Q�6S�
�
�	
r-c�6�|jj�Sry)r��fullrjs r.�_is_worker_fullz!HttpTransportCore._is_worker_full�s���|�|� � �"�"r-c�H�|j�xs|j�Sry)rrrjs r.rwzHttpTransportCore.is_healthy�s"���(�(�*�E�d�.C�.C�.E�F�Fr-c��g}|jD]a}|j|j�r3|jdvr|jd�|j	d|���Q|j|��ct
|j|��}|jsy|jd��}|�|jj|�|j|�\}}|j�J�tjd|j|jj|jj�d	d
i}|r||d<|||fS)N)r�r��default�statsd�self_rate_limits�ratelimit_backoffr�)rJr�r�)r�z(Sending envelope [%s] project:%s host:%szContent-Typezapplication/x-sentry-envelopezContent-Encoding)r�rror�ru�appendrrJr�_serialize_enveloperNr�debug�description�
project_id�host)rOr`�	new_itemsrq�client_report_item�content_encoding�bodyrJs        r.�_prepare_envelopez#HttpTransportCore._prepare_envelope�s<���	��N�N�D��#�#�D�$6�$6�7��%�%�)V�V��)�)�*<�=��&�&�':��&�F�� � ��&�
#��H�$4�$4�I�F���~�~��"�>�>��>�K���)��N�N�!�!�"4�5�!%�!9�!9�(�!C���$����*�*�*����6�� � ��O�O�&�&��O�O� � �		
�
�;�%
���*:�G�&�'���w�&�&r-c���d}tj�}|jdk(s|j�|j	|�||fS|j}|jdk(rHt
�B|j
tj|j�|j���||fStj|d|j��5}|j	|�ddd�||fS#1swY||fSxYw)Nrr�)�quality�w)�fileobj�mode�
compresslevel)�io�BytesIOr�r��serialize_intor��write�compress�	serializer��GzipFile)rOr`r"r#�fs     r.rz%HttpTransportCore._serialize_envelopes��� ���z�z�|���"�"�a�'�4�+A�+A�+I��#�#�D�)� ��%�%� $�5�5���%�%��-�&�2D��
�
��O�O� �*�*�,�d�6M�6M��� ��%�%��]�]� �s�$�:Q�:Q����+�+�A�.��
 ��%�%��
 ��%�%�s�C*�*C6�http2c��|dd�}d}|jd�|jd}|�g}|D�chc]}|d|df��}}tD] }|d|df|vs�|j|��"|�||d<tj�}|j|jdxsVtjjd�xs5tjjd	�xstj��|jd
xstjjd�}|jdxstjjd
�}	|�|j||	�||d<|Scc}w)zDShared pool options for httpcore-based transports (Http2 and Async).�)r3�retriesN�socket_optionsrr0�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)
rOr3rSr7�o�used_options�default_optionr?r;r=s
          r.�_get_httpcore_pool_optionsz,HttpTransportCore._get_httpcore_pool_optionssw��
��%
��
JN���<�<�(�)�5�!�\�\�*:�;�N��!��N�.<�=�n���1��q��t��n��=�7�N��q�!�>�!�#4�5�\�I��%�%�n�5�8��%�(6�G�$�%��0�0�2���)�)��L�L��$�
��z�z�~�~�o�.�
��z�z�~�~�2�3�
��}�}��		
��L�L��-�S������@R�1S�	��<�<�
�+�P�r�z�z�~�~�>O�/P��� ��'�'�	�8�<�!,��
�����+>s�E6c�p�|j�y|j|j�}d}|jd}|jjdk(r'|dk7r"|xs|xrt	�jd�}|jd}|s'|dk7r"|xs|xrt	�jd�}|xsdS)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�proxyrNrQs     r.�_resolve_proxyz HttpTransportCore._resolve_proxyFs����?�?�"���$�$�T�_�_�5�����l�l�=�1���?�?�!�!�W�,�+��2C��O��L�$N�Z�\�5E�5E�g�5N�E��\�\�,�/�
��*��*��M�x�<�#L�J�L�4D�4D�V�4L�E��}��r-c�d�d|j|j|j|jd�iS)Nrc)�pool�connectr.�read)�TIMEOUTrjs r.�_timeout_extensionsz%HttpTransportCore._timeout_extensionsZs2��
�����<�<�������	�
�	
r-c��t��ryr�rjs r.�_get_pool_optionsz#HttpTransportCore._get_pool_optionser�r-rNrc��t�jd�}|sy|jd�D]J}|j�}|jj|�s|jj|�s�Jyy)N�noFr�T)r	rTr�r�r�endswith�netloc)rOrNrUrs    r.rSzHttpTransportCore._in_no_proxyhse���<�#�#�D�)�����N�N�3�'�D��:�:�<�D����'�'��-��1B�1B�1K�1K�D�1Q��(�r-c��t��ryr�rjs r.r�zHttpTransportCore._make_poolrs
��"�#�#r-�method�
endpoint_typerr#�Mapping[str, str]c��t��ryr��rOrerfr#rJs     r.�_requestzHttpTransportCore._requestws
��"�#�#r-c�b�tjd�|jj�y)N�Killing HTTP transport)rrr�rkrjs r.rkzHttpTransportCore.kill�s�����-�.������r-�rOrrSr�r=N�rOrrSr�r=rr|)rOrr;r�r=N)�network�
network_error)rOrr;r�r`r�r=N)rOrrJ�Dict[str, str]r=N)Fr�)rOrr`rr=z5Optional[Tuple[Envelope, io.BytesIO, Dict[str, str]]])rOrr`rr=z tuple[Optional[str], io.BytesIO]�F)rOrr=r>�rOrr=r�)rOrr=z�Union[PoolManager, ProxyManager, httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool, httpcore.AsyncSOCKSProxy, httpcore.AsyncHTTPProxy, httpcore.AsyncConnectionPool]r{)!r}r~rr�r\rVr�r�r�rur�r�r�r�r�r�r�rrrrrwr$rrLrW�propertyr]r_rSr�rjrkr,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
���eZdZdZdd�Z	dddded	d
dddd
ddfd�Zdd�Zddddeddfd�Z					dd�Z
	ddddeddddfd�Ze
dd��Zed d��Zej"d!d��Zy)"�BaseHttpTransportz&The base HTTP transport (synchronous).rOrr`r=Nc��|j|�}|�7|\}}}|j|j�|tj|��y�N)rJrfr`�r$�
_send_request�getvaluer�ENVELOPE�rOr`�_prepared_enveloper#rJs     r.�_send_envelopez BaseHttpTransport._send_envelope�sU��!�3�3�H�=���)�&8�#�H�d�G�����
�
���*�3�3�!�	
�
�r-r#rJrqrfrr�c��|j|�	|jd|||�}	|j	||��|j�y#t$r|j|d���wxYw#|j�wxYw�N�POSTror�)r;r`)r�rj�	Exceptionr�r��close�rOr#rJrfr`r;s      r.rzzBaseHttpTransport._send_request�s���	
���W�%�		��}�}�����	�H�	��!�!�8�h�!�G��N�N���
�	��&�&��i�&�P��	��
�N�N��s�A�A-�A*�-A?c� �t|d��S�N�transport_queue_size)�
queue_size)rrUs  r.r�z BaseHttpTransport._create_worker�s���7�3I�+J�K�Kr-r�c�h�|j|d��}|�|jt|g���yy�Nr�)r�r�)r��rr^r�rOr�rs   r.�_flush_client_reportsz'BaseHttpTransport._flush_client_reports�s8���9�9��PR�9�S�
��$��!�!�(�-��"A�B�%r-c����d��fd�}�jj|�s6�jd��jD]}�j	d|���yy)Nc���t�5�j���j�ddd�y#1swYyxYwry�rrr��r`rOs��r.�send_envelope_wrapperzABaseHttpTransport.capture_envelope.<locals>.send_envelope_wrapper�s/���,�.��#�#�H�-��*�*�,�/�.�.�s	�"7�A�
full_queue�queue_overflowr��r=N�r��submitr�r�ru�rOr`r�rqs``  r.r^z"BaseHttpTransport.capture_envelope�sR���	-�
�|�|�"�"�#8�9��!�!�,�/� �����&�&�'7�d�&�C�'�:r-rcrd�&Optional[Callable[[int, float], None]]c���tjd�|dkDr;�jj�fd���jj	||�yy)N�Flushing HTTP transportrc�(���jd��S�NT)r��r�rjs�r.r/z)BaseHttpTransport.flush.<locals>.<lambda>������(B�(B��(B�(Nr-�rrr�r�rhrgs`  r.rhzBaseHttpTransport.flush�sE���
	���.�/��Q�;��L�L��� N�O��L�L���w��1�r-c�<�tjdtd��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.r5rXN)rZr[r\r,r-r.�
_warn_hub_clszBaseHttpTransport._warn_hub_cls�s��	�
�
�\���	
r-c�B�tj�|jS)�QDEPRECATED: This attribute is deprecated and will be removed in a future release.��
HttpTransportr�r�rjs r.�hub_clszBaseHttpTransport.hub_cls�s��	�#�#�%��}�}�r-c�:�tj�||_y)r�Nr�)rO�values  r.r�zBaseHttpTransport.hub_cls�s��	�#�#�%���
r-rzryrnrr�r`rr=Nr�)rOrr=�type[sentry_sdk.Hub])rOrr�r�r=N)r}r~rr�r�bytesrzr�r�r�r^r�rh�staticmethodr�rtr��setterr,r-r.rvrv�s���0�
�"*.������"��&�	�
'��
�
�.L�C�F�C�4�C�D�C�
D��D�
�D�">B�	2��	2��	2�;�	2�
�		2��
��
�����

�^�^���r-rvc�L�eZdZUerded<dd�Zdd�Zddded	d
ddd
dddfd�Zy)r�� Union[PoolManager, ProxyManager]r�rOrr=c�\�|jjdi�jd�}|�dn
t|�dtj|j
��d�}d}|jd�|jd}|jdrD|�g}|D�chc]}|d	|d
f��}}tD] }|d	|d
f|vs�|j|��"|�||d<|jdxsVtjjd�xs5tjjd
�xstj�|d<|jdxstjjd�|d<|jdxstjjd�|d<|Scc}w)Nr��transport_num_poolsr:�
CERT_REQUIRED)�total)�	num_pools�	cert_reqsrcr7�
keep_aliverr0r8r9r:r;r<r=r>)rSrTr�r��Timeoutr\r@rrDrErFrG)rOr�rSr7rIrJrKs       r.r_zHttpTransport._get_pool_options�s����L�L�$�$�^�R�8�<�<�=R�S�	�'�/��S��^�(����T�\�\�:�
��JN���<�<�(�)�5�!�\�\�*:�;�N��<�<��%��%�!#��2@�A�.�Q�Q�q�T�1�Q�4�L�.�L�A�";��"�1�%�~�a�'8�9��M�"�)�)�.�9�#<��%�(6�G�$�%�
�L�L��$�
��z�z�~�~�o�.�
��z�z�~�~�2�3�
��}�}��		�
�� $�|�|�K�8� 
�B�J�J�N�N��=
����#�l�l�:�6�
�"�*�*�.�.��;
��
�����-Bs�F)c���|j�td��d}|j|j�}|jd}|jjdk(r'|dk7r"|xs|xrt�j
d�}|jd}|s'|dk7r"|xs|xrt�j
d�}|j�}|rf|jd}|r||d<|jd�r)d	}	d
dl	m
}|r	|fi|��Stjdi|��Stj |fi|��Stjdi|��S#t$rd}tjd
|�Y�nwxYw)N�4Cannot create HTTP-based transport without valid DSNrNrOrPrQrR�
proxy_headers�socksTr)�SOCKSProxyManagerFz�You 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,)rNr�rSrSrTr	rTr_�
startswith�urllib3.contrib.socksr��ImportErrorrr�r�r#r$)	rOrVrUrNrQ�optsr��use_socks_proxyr�s	         r.r�zHttpTransport._make_poolsu���?�?�"��S�T�T����$�$�T�_�_�5���l�l�=�1���?�?�!�!�W�,�+��2C��O��L�$N�Z�\�5E�5E�g�5N�E��\�\�,�/�
��*��*��M�x�<�#L�J�L�4D�4D�V�4L�E��%�%�'��� �L�L��9�M��(5��_�%�����(�"&���G�#�,�U�;�d�;�;�"�.�.�6��6�6��+�+�E�:�T�:�:��&�&�.��.�.��#��&+�O��N�N�]����s�8E	�	!E-�,E-rerfrr#rrJrgzurllib3.BaseHTTPResponsec�r�|jj||jj|�||��S)N)r#rJ)r��requestr��get_api_urlris     r.rjzHttpTransport._request>s;���z�z�!�!���J�J�"�"�=�1���	"�
�	
r-Nrs)rOrr=r�)	r}r~rr
r�r_r�r�rjr,r-r.r�r��sT���1�1�'�R+/�Z
��
��
�&�
��	
�
%�
�
$�

r-r�c
����eZdZd%�fd�Zd&d�Zddddd	edd
fd�Zd'd
�Z	d(dddeddddddddfd�Z	dddeddddddddfd�Z
d)dddeddfd�Zd'd�Z
d'd�Z	d(dddedddd fd!�Zd*d"�Z				d+d#�Zd,d$�Z�xZS)-�AsyncHttpTransportrOrr=Nc�x��tstd��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�rOrS�	__class__s  �r.rVzAsyncHttpTransport.__init__Ns8���(��C��
�	����!��,�,�.��	r-c� �t|d��Sr�)rrUs  r.r�z!AsyncHttpTransport._create_workerXs���g�.D�&E�F�Fr-r;rr<r>c��t||�Sry�rKr�s   r.r�z$AsyncHttpTransport._get_header_value[s��*�(�F�;�;r-r`c��K�|j|�}|�?|\}}}|j|j�|tj|���d{���y7��wrxryr}s     r.rz!AsyncHttpTransport._send_envelope`sh����!�3�3�H�=���)�&8�#�H�d�G��$�$��
�
���*�3�3�!�	%��
�
��

�s�AA�A�Ar#rJrqrfrr�c��FK�|j|�	|jd|||��d{���}	|j	||��|j��d{���y7�1#t$r|j|d���wxYw7�(#|j��d{���7wxYw�wr�)r�rjr�r�r��acloser�s      r.rzz AsyncHttpTransport._send_requestls�����	
���W�%�		�!�]�]�����	��H�	$��!�!�8�h�!�G��/�/�#�#�#����	��&�&��i�&�P��	��
$��(�/�/�#�#�#�sU�B!�A �A�A �B�B!�B�B!�A � A>�>B!�B�B�B�B!rerg�httpcore.Responsec��K�|jj||jj|�|||j���d{���S7��w�N)r�rJ�
extensions�r�r�r�r�r]ris     r.rjzAsyncHttpTransport._request�sR�����Z�Z�'�'���J�J�"�"�=�1����/�/�(�
�
�	
�
�s�AA�	A�
Ar�c��pK�|j|d��}|�|jt|g���yy�wr�r�r�s   r.r�z(AsyncHttpTransport._flush_client_reports�s<�����9�9��PR�9�S�
��$��!�!�(�-��"A�B�%�s�46c����d��fd�}�jj|�s6�jd��jD]}�j	d|���yy)Nc���K�t�5�j���d{����j��d{���ddd�y7�%7�#1swYyxYw�wryr�r�s��r.r�zCAsyncHttpTransport._capture_envelope.<locals>.send_envelope_wrapper�sK�����,�.��)�)�(�3�3�3��0�0�2�2�2�/�.�3��2��/�.�s<�A�A
�A	�A
�A�A
�	A�	A
�A
�
A�Ar�r�r�r�r�r�s``  r.�_capture_envelopez$AsyncHttpTransport._capture_envelope�sR���	3�
�|�|�"�"�#8�9��!�!�,�/� �����&�&�'7�d�&�C�'�:r-c�2�|jrA|jj�r'|jj|j|�yt	j
d�|j
d�|jD]}|jd|���y)Nz0Async Transport is not running in an event loop.�internal_sdk_errorr�)	r��
is_running�call_soon_threadsafer�rr�r�r�ru)rOr`rqs   r.r^z#AsyncHttpTransport.capture_envelope�sr���9�9����-�-�/��I�I�*�*�4�+A�+A�8�L�
�N�N�M�N��!�!�"6�7� �����&�&�';�$�&�G�'r-rcrdr��Optional[asyncio.Task[None]]c���tjd�|dkDr:�jj�fd���jj	||�Sy)Nr�rc�(���jd��Sr�r�rjs�r.r/z*AsyncHttpTransport.flush.<locals>.<lambda>�r�r-r�rgs`  r.rhzAsyncHttpTransport.flush�sF���
	���.�/��Q�;��L�L��� N�O��<�<�%�%�g�x�8�8�r-c��|jtxr)|jduxr|jjdk(��S�NrO)r3)rL�
HTTP2_ENABLEDrNrTrjs r.r_z$AsyncHttpTransport._get_pool_options�sE���.�.��2����t�+�2����&�&�'�1�/�
�	
r-c��|j�td��|j�}|j�}|r�|jd}|r||d<|jd�rT	|j
�}d|vr(|jd�}|rtjd�tjdd|i|��Stjdd|i|��Stjdi|��S#t$rtjd|�Y�6wxYw�	Nr�r�r�r7zqYou 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,)rNr�rWr_rSr��copy�poprr��httpcore�AsyncSOCKSProxyr��AsyncHTTPProxy�AsyncConnectionPool)rOrVr�r��
socks_optsr7s      r.r�zAsyncHttpTransport._make_pool�s���?�?�"��S�T�T��#�#�%���%�%�'��� �L�L��9�M��(5��_�%�����(�
�!%����J�'�:�5�)3���8H�)I��)�"�N�N�!T��$�3�3�R�e�R�z�R�R� �.�.�G��G�$�G�G��+�+�3�d�3�3��$���N�N�J����s�"AC!�!D�Dc�P�tjd�|jj�	t	�5|j
j
|jj��cddd�S#1swYyxYw#t$rtjd�YywxYw)Nrlz&Event loop not running, aborting kill.)rrr�rkrr��create_taskr�r�r�r�rjs r.rkzAsyncHttpTransport.kill�ss�����-�.�������	�*�,��y�y�,�,�T�Z�Z�->�->�-@�A�-�,�,���	��N�N�C�D��	�s.�
B�3A8�.	B�8B�=B�B�B%�$B%rmrnrzryrrrs)rOrr=zVUnion[httpcore.AsyncSOCKSProxy, httpcore.AsyncHTTPProxy, httpcore.AsyncConnectionPool])rOrr=r�)r}r~rrVr�r�r�rr�rzrjr�r�r�r^r�rhr_r�rk�
__classcell__�r�s@r.r�r�Ms0���/�G�<��<� %�<�/2�<�	�<�

�"*.�$��$��$�"�$�&�	$�
'�$�
�
$�.

��

��

�&�

��	

�
%�

�
�


�C�&�C��C�$�C�
	D�	H�>B�
��
��
�;�
�
(�	
�
� 4�� 4�	a� 4�D	r-r�c� ��eZdZd�fd�Z�xZS)�Http2Transportc�N��t�|�|�tjd�y)NzhYou tried to use HTTP2Transport but don't have httpcore[http2] installed. Falling back to HTTPTransport.)r�rVrr�r�s  �r.rVzHttp2Transport.__init__�s����G��W�%��N�N�z�
r-rm)r}r~rrVr�r�s@r.r�r��s
���	�	r-r�c�t�eZdZUdZdZerded<ddddd	ed
dfd�Zddd
eddddddd
dfd�Z	dd�Z
				dd�Zy)r�z&The HTTP2 transport based on httpcore.�zeUnion[
                httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool
            ]r�rOrr;r�r<r=r>c��t||�Sryr�r�s   r.r�z Http2Transport._get_header_values��.�h��?�?r-rerfrr#rrJrgc��|jj||jj|�|||j��}|Sr�r�)rOrerfr#rJr;s      r.rjzHttp2Transport._requestsH���z�z�)�)���
�
�&�&�}�5����3�3�*��H��Or-c�t�|j|jduxr|jjdk(��Sr�)rLrNrTrjs r.r_z Http2Transport._get_pool_optionss;���2�2��o�o�T�1�W�d�o�o�6L�6L�PW�6W�3��
r-c���|j�td��|j�}|j�}|r�|jd}|r||d<|jd�rD	d|vr(|j
d�}|rtjd�tjdd|i|��Stjdd|i|��Stjdi|��S#t$rtjd|�Y�6wxYwr�)rNr�rWr_rSr�r�rr�r��
SOCKSProxyr��	HTTPProxy�ConnectionPool)rOrVr�r�r7s     r.r�zHttp2Transport._make_pools�����&� �!W�X�X��'�'�)�E��)�)�+�D�� $���_� =�
� �,9�D��)��#�#�G�,��+�t�3�-1�X�X�6F�-G�N�-� &���%X�!"� (�2�2�K�U�K�d�K�K�$�-�-�F��F��F�F��*�*�2�T�2�2��(�����N�!���s�"AC�C3�2C3Nrs)rOrr=zGUnion[httpcore.SOCKSProxy, httpcore.HTTPProxy, httpcore.ConnectionPool])r}r~rr�r\r
r�r�r�rjr_r�r,r-r.r�r��s���4�����
�	@��	@�$7�	@�AD�	@�
�	@�
	��	��	�*�	��		�
)�	�!�
	� 	�
	3��	3�
V�	3r-c��eZdZdZdd�Zedefd��Zdd�Z	dde	dd	dd
fd�Z
dd�Z		dd
d�deddddde
ddf
d�Zdefd�Zdedd
fd�Zy)�_EnvelopePrinterTransportz[Wraps another transport, printing envelope contents to the SDK debug logger before sending.r=Nc�0�tj||j��||_|j|_tjd�|_|jjt
j�d|j_
|jjsstj�}|jt
j�|jtjd��|jj|�yy)N)rSzsentry_sdk.envelopesFz%(message)s)rMrVrS�_innerrN�logging�	getLogger�envelope_logger�setLevel�INFO�	propagate�handlers�
StreamHandler�setFormatter�	Formatter�
addHandler)rO�	transport�handlers   r.rVz"_EnvelopePrinterTransport.__init__Bs������4��):�):��;����#�.�.���&�0�0�1G�H������%�%�g�l�l�3�).����&��#�#�,�,��+�+�-�G����W�\�\�*�� � ��!2�!2�=�!A�B�� � �+�+�G�4�	-r-c�.�|jjSry)rr�rjs r.r�z#_EnvelopePrinterTransport.__class__Ps���{�{�$�$�$r-c	�z�	|jjd�|jjdtj|jdt
���|jD]�}|jjd|j�|jjdtj|jdt
���	tj|j��}|jjdtj|dt
�����|jjd	�|jj|�y#ttf$r7|jjdt|j���Y��AwxYw#t$rY�pwxYw)
Nz--- Sentry Envelope ---zHeaders: %sr:)�indentrz  Item type: %sz  Item headers: %sz
  Payload:
%sz  Payload: <binary %d bytes>z--- End Envelope ---)r�infor�dumpsrJr�r�r�loadsr�r�r�r�r�rr^)rOr`rq�payloads    r.r^z*_EnvelopePrinterTransport.capture_envelopeTsY��	�� � �%�%�&?�@�� � �%�%��t�z�z�(�*:�*:�1�c�R�
�!�����$�$�)�)�*;�T�Y�Y�G��$�$�)�)�(��J�J�t�|�|�A�s�C��
�"�j�j����)9�:�G��(�(�-�-�(��
�
�7�1�c�B��'�"
� � �%�%�&<�=�	
���$�$�X�.��#�I�.���(�(�-�-�6��D�N�N�,�-�����	��	�s8�CF.�AE%�,F.�%AF+�'F.�*F+�+F.�.	F:�9F:rcrdrerc�:�|jj||�Sry)rrhrgs   r.rhz_EnvelopePrinterTransport.flushqs��
�{�{� � ��(�3�3r-c�6�|jj�Sry)rrkrjs r.rkz_EnvelopePrinterTransport.killxs���{�{���!�!r-r0rlrnrorprqrrrmc�B�|jj||||��y)Nrl)rrurts     r.ruz+_EnvelopePrinterTransport.record_lost_event{s��	
���%�%�f�m�T�H�%�Ur-c�6�|jj�Sry)rrwrjs r.rwz$_EnvelopePrinterTransport.is_healthy�s���{�{�%�%�'�'r-�namec�.�t|j|�Sry)r*r)rOr!s  r.�__getattr__z%_EnvelopePrinterTransport.__getattr__�s���t�{�{�D�)�)r-)rrMr=Nr�ry)r=rr|)r}r~rr�rVrtrr�r^r�rhrkr�r�rur�rwr#r,r-r.rr?s���e�5��%�4�%��%�/�@%)�4��4�"�4�
�	4�"�8<�!%�	V��
V��V�5�V��	V��
V�
�V�(�D�(�*��*��*r-rc�8�eZdZdZ				dd�Z				dd�Zdd�Zy)	�_FunctionTransportz�
    DEPRECATED: Users wishing to provide a custom transport should subclass
    the Transport class, rather than providing a function.
    Nc�<�tj|�||_yry)rMrV�_func)rO�funcs  r.rVz_FunctionTransport.__init__�s��	���4� ���
r-c�&�|j|�yry)r')rOr_s  r.raz _FunctionTransport.capture_event�s��	
�
�
�5��r-c�L�|j�}|�|j|�yyry)�	get_eventra)rOr`r_s   r.r^z#_FunctionTransport.capture_envelope�s+���"�"�$�������u�%�r-)r(zCallable[[Event], None]r=N)r_r%r=Nr�)r}r~rr�rVrar^r,r-r.r%r%�s:���
�'��
�����
��&r-r%c��|d}|jdi�jdd�}|jdi�jdd�}td�|jd�xsgD��}|rtnt}|rQtrK	tj�|r|rtjd�t}ntjd	�n|rtjd�d}t|t�r|}nUt|t�rt|t�r|}n2t|�r't!j"dt$d
��t'|�}|�
|dr||�}|�;t(j*jdd�j-�dvrt/|�}|S#t$rtjd
�Y��wxYw)Nrr��transport_http2F�transport_asyncc3�NK�|]}|jjdk(���y�w)�AsyncioIntegrationN)r�r})rD�integrations  r.rHz!make_transport.<locals>.<genexpr>�s*�����<�K�	���&�&�*>�>�<�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.z�Function transports are deprecated and will be removed in a future release.Please provide a Transport instance or subclass, instead.r:rXrQ�SENTRY_PRINT_ENVELOPESrP)�1�true�yes)rTrr�r�r�r�r�rr�r�r��
isinstancerMr�
issubclass�callablerZr[r\r%rDrErCr)rS�
ref_transport�use_http2_transport�use_async_transport�async_integration�
transport_clsrs       r.�make_transportr?�s����K�(�M�!�+�+�n�b�9�=�=�>O�QV�W��!�+�+�n�b�9�=�=�>O�QV�W����"�;�;�~�6�<�"�<����.��=���8�	U��$�$�&� �&��N�N�?��!3�
����E���
����}�	
�(,�I��-��+�!�	�	�M�4�	(�Z�
�y�-Q�%�
�	�-�	 ��
�
�
H���		
�'�}�5�	���W�U�^�!�'�*�	�������� �"�"��e�g�%�"&�.�i�8�	����C�	U��N�N�S�T�	U�s�A	F�G�?Gry)rSr�r=zOptional[Transport])Tr�r�r+rr	rDr+rAr�rZ�abcrr�collectionsrrrr�urllib.requestr	r�r�r��h2r��anyior��typingr
rrr
rFr�r�r�r�sentry_sdk.enveloperrr�sentry_sdk.utilsrrrr�sentry_sdk.workerrrrrrrrrrrr r!r"�urllib3.poolmanagerr#r$�sentry_sdk._typesr%r&r@�
SOL_SOCKET�SOL_TCP�optionr�AttributeErrorr�rKrMr�r�rvr�r�r�rr%r?r,r-r.�<module>rOs`����	���	�
�
���#�#�2�2�%������
��D�(�M�&�� (�� 4��3�2����*�:�:���D�C�����>�:������?��C��^�^�<�b�A��^�^�=�r�B��^�^�;�Q�?�	�F�
�!�(�(�&��)�Y�V�A�Y�[�&��)�)L�M��
��
��
��
�[��[�~.2����*��=��$l�	�l�b
Z�)�Z�zf
�%�f
�R^�*�^�B����C3�*�C3�LJ*�	�J*�Z&��&�:>��o$��
�F���
���H������M����&� %��&��\�
�	
�
�sZ�F4�
G�G�G�"G,�4F?�>F?�G
�G
�G�G�G)�(G)�,G4�3G4
Back to Directory File Manager