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

�

h0i�4��l�ddlZddlZddlmZmZmZddlmZddlmZm	Z	m
Z
mZmZm
Z
ddlmZer]ddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZeeefZeeeeefgeeeffZeeefZ ee!e"e#fZ$dZ%dZ&dZ'dZ(gZ)d�Z*eegZ+d�Z,Gd�d�Z-d�Z.y)�N)�Mapping�Sequence�Set)�datetime)�AnnotatedValue�capture_internal_exception�disable_capture_event�format_timestamp�	safe_repr�strip_string)�
TYPE_CHECKING)�
TracebackType)�Any)�Callable)�ContextManager)�Dict)�List)�Optional)�Type)�Union)�NotImplementedTypei@B��
z<cyclic>c�.�tj|�y�N)�global_repr_processors�append)�	processors �D/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/serializer.py�add_global_repr_processorr =s���!�!�)�,�c�.�tj|�yr)�sequence_typesr)�tys r�add_repr_sequence_typer%Es�����"�r!c�(�eZdZdZd�Zd�Zd�Zd�Zy)�Memo��_ids�_objsc� �i|_g|_yrr()�selfs r�__init__z
Memo.__init__Ms����	���
r!c�<�|jj|�|Sr)r*r�r,�objs  r�memoizezMemo.memoizeRs���
�
���#���r!c��|jd}t|�|jvry||jt|�<y)N���TF)r*�idr)r/s  r�	__enter__zMemo.__enter__Ws7���j�j��n��
�c�7�d�i�i���!$�D�I�I�b��g��r!c�~�|jjt|jj��d�yr)r)�popr4r*)r,r$�value�tbs    r�__exit__z
Memo.__exit__`s&��	
�	�	�
�
�b������)�*�D�1r!N)�__name__�
__module__�__qualname__�	__slots__r-r1r5r:�r!rr'r'Js��!�I��
�
�2r!r'c�*�������	�
���
�����t��g�g�|jdd�dk(�
|jdd��|jdd��|jdd���fd����fd	�����fd
���fd���fd��						d�
���fd
�	�	�fd���������	��
���fd��
tjd�	�	|fi|��}�s�rt	|t
�r�d|d<|tjd�S#tjd�wxYw)at
    A very smart serializer that takes a dict and emits a json-friendly dict.
    Currently used for serializing the final Event and also prematurely while fetching the stack
    local variables for each frame in a stacktrace.

    It works internally with 'databags' which are arbitrary data structures like Mapping, Sequence and Set.
    The algorithm itself is a recursive graph walk down the data structures it encounters.

    It has the following responsibilities:
    * Trimming databags and keeping them within MAX_DATABAG_BREADTH and MAX_DATABAG_DEPTH.
    * Calling safe_repr() on objects appropriately to keep them informative and readable in the final payload.
    * Annotating the payload with the _meta field whenever trimming happens.

    :param max_request_body_size: If set to "always", will never trim request bodies.
    :param max_value_length: The max length to strip strings to, defaults to sentry_sdk.consts.DEFAULT_MAX_VALUE_LENGTH
    :param is_vars: If we're serializing vars early, we want to repr() things that are JSON-serializable to make their type more apparent. For example, it's useful to see the difference between a unicode-string and a bytestring when viewing a stacktrace.
    :param custom_repr: A custom repr function that runs before safe_repr on the object to be serialized. If it returns None or throws internally, we will fallback to safe_repr.

    �max_request_body_sizeN�always�max_value_length�is_varsF�custom_reprc�p��	d}���|�}|xst|�S#t$rt|�cYSwxYwr)r�	Exception)r8�
repr_valuerEs  �r�_safe_repr_wrapperz%serialize.<locals>._safe_repr_wrapper�sG���	$��J��&�(��/�
��1��5�!1�1���	$��U�#�#�	$�s��5�5c�P��t��t��krY	�t��dz
}�djt|�i�}�j	|�t��t��kr�Y�djdi�j|�y#t$ri}Y�[wxYw)N�r3�)�len�
setdefault�str�
IndexErrorr�update)�meta�segment�node�
meta_stack�paths   ��r�	_annotatezserialize.<locals>._annotate�s�����*�o��T��*�
��s�:���2�3��!�"�~�0�0��W��r�B��
���d�#��*�o��T��*�	�2��!�!�"�b�)�0�0��6���
���
�s�/B�B%�$B%c���	�ry��}|dvr|S�d}|dk(r�ddk(r�dy|dk(ry	y
#t$rYy	wxYw)z�
        A databag is any value that we need to trim.
        True for stuff like vars, request bodies, breadcrumbs and extra.

        :returns: `True` for "yes", `False` for :"no", `None` for "maybe soon".
        T)TNr�breadcrumbsrK�values��extraNF�rP)�is_request_body�p0�_is_request_bodyrDrVs  ���r�_is_databagzserialize.<locals>._is_databag�sr���	���.�0�O��,�.�&�&��a��B��]�"�t�A�w�(�':��Q����W�}������	��	�s�3�3�3�3�	?�?c�H��	�ddk(r	�ddk(ryy#t$rYywxYw)Nr�spansr[�dataTFr]�rVs�r�_is_span_attributez%serialize.<locals>._is_span_attribute�s;���	��A�w�'�!�d�1�g��&7�����	��	����	!�!c�H��	�ddk(r	�ddk(ryy#t$rYywxYw)Nr�requestrKrdTFr]res�rr`z#serialize.<locals>._is_request_body�s;���	��A�w�)�#��Q��6�(9�����	��	�rgc	����|��j|�	�	j|�5}|r3tcddd�|�"�j��
t	��dzd�=SS�||||||��cddd�|�"�j��
t	��dzd�=SS#1swYnxYwnx#t
$rlt
tj��|r&Y|�"�j��
t	��dzd�=yyY|�"�j��
t	��dzd�=yywxYw	|�"�j��
t	��dzd�=yy#|�"�j��
t	��dzd�=wwxYw)NrK)�
is_databagr^�should_repr_strings�remaining_depth�remaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	rr1�CYCLE_MARKERr7rM�
BaseExceptionr�sys�exc_info)r0rkr^rlrSrnrm�result�_serialize_node_impl�memorUrVs        ����r�_serialize_nodez"serialize.<locals>._serialize_node�s�������K�K�� �	0����c�"�f��'�#�"�(�"����
��s�4�y�1�}��/�#�!,��)�$3�(;�$3�&7�
�	#�"�(�"����
��s�4�y�1�}��/�#�)#�"��"���	�&�s�|�|�~�6��V��"����
��s�4�y�1�}��/�#���"����
��s�4�y�1�}��/�#�	��#�(�"����
��s�4�y�1�}��/�#��w�"����
��s�4�y�1�}��/�#�sQ�B%�B�	B%�
B�*	B%�B!�B%�$E�%(D�
E�3E�D�E�&E)c�d��t|t�r�di|j��|j}|S)Nr?)�
isinstancer�metadatar8)r0rWs �r�_flatten_annotatedz%serialize.<locals>._flatten_annotated�s*����c�>�*��%����%��)�)�C��
r!c�B��t|t�rd}|��}|���}|���}|r+|r�rtd�}td�}n|�t}|�t}�|�}|�-|dkr(�ddgg��|r�t�|�����Sy��}|s|r1tr+�|d�}tD]}|||�}	|	tus��|	�cStt|�d	d�}
|�t|tttf�rF|s:t|t�r2tj|�stj|�r�|�S|St|
�r|
|�St|t �r|st#t%|��S�|�St|t&�r~t)|j+��}i}d}|j+�D]L\}
}|�||k\r�t-|��
�|St#|
�}�||||||�|dz
nd|��}|||<|dz
}�N|St|t.�sqt|t1t2��rXg}t5|�D]F\}}|�||k\r�t-|��
�|S|j7�||||||�|dz
nd|����H|S|r	�|�}nJt|t8�st|t:�r|j=d
d�}t|t"�s�|�}t-��dk(xr�ddk(xr�ddk(}|r|S�t|����S)NF�infrz!limit�x)�rem)�
max_length)rurm�__sentry_repr__)rMrK)rSrlrkr^rmrnzutf-8�replace�rcr3�description)rxr�float�MAX_DATABAG_DEPTH�MAX_DATABAG_BREADTHrr�NotImplemented�getattr�type�bool�int�math�isinf�isnan�callablerrOr
r�dict�itemsrM�serializable_str_types�tupler#�	enumerater�bytes�	bytearray�decode)r0rkr^rlrmrn�is_span_attribute�hintsrrs�sentry_repr�rv_dict�i�k�v�str_k�rv_list�is_span_descriptionrWrzrar`rfrIrvrD�keep_request_bodiesrCrurVs                  ������������rrtz'serialize.<locals>._serialize_node_impl�sz����c�>�*�"'���&�")����$��J��"�.�0�O���#6�"'��,��$)�%�L�!�"�*�&7�O�$�,�(;�%� ��%���&�?�a�+?��H�c�?�+�,��)� �!3�C�!8�EU�V����.�0���+�1G�!�o�F�E�3�	�"�3��.����/�-�f�5�5�4�
�d�3�i�):�D�A���;�*�S�4��e�*<�=�"��3��&�D�J�J�s�O�t�z�z�#��)�#�.�.��
�
�k�
"��s�#�#�
��X�
&�+��$�S�)�*�
�(��,�
���W�
%��s�y�y�{�#�C��G��A��	�	����1�$�0�Q�:K�5K��#�c�(�+��"�N��A���#��!�(;�)�$3�/>�/J��!�+�PT�&7�
��"#�����Q���%$�(�N��C�!7�8�Z���~�&�>
��G�!�#����1�$�0�Q�:K�5K��#�c�(�+�� �N����#�� !�,?�#-�(7�3B�3N�O�a�/�TX�*;�
��'�&�N��$�S�)�C��#�u�%��C��)C��j�j��)�4���c�3�'�(��-��
��I��N�O�t�A�w�'�1�O�d�2�h�-�6O�	���J�!�,�s�?O�"P�Q�Qr!Tr�_meta)NNNNNN)r'r7r	�setrxr�)�event�kwargs�serialized_eventrWrzrar`rfrIrvrtrErDr�rCrurUrVs   @@@@@@@@@@@@@@@r�	serializer�js����*�6�D�
�D��J� �*�*�%<�d�C�x�O���z�z�"4�d�;���j�j��E�*�G��*�*�]�D�1�K�$�7��:���� ����$0�$0�L�KR�KR�`���d�#�)�*�5�;�F�;���:�*�5E�t�*L�(2�1�
��W�%���!�!�%�(���!�!�%�(�s�?&C;�;D)/rqr��collections.abcrrrr�sentry_sdk.utilsrrr	r
rr�typingr
�typesrrrrrrrrr�sentry_sdk._typesrrO�Span�
ReprProcessorr��Segmentr�r��
memoryviewr��MAX_EVENT_BYTESr�r�rorr r#r%r'r�r?r!r�<module>r�s���
��2�2����!��#���%������4���S��>�D��c�4��S��>�2�E�:L�c�:Q�4R�R�S�M��C��H�o�G��u�i��<������������-�
�C����
2�2�@k)r!
Back to Directory File Manager