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

�

_�*jF3��b�UddlZddlZddlmZddlmZddlmZddlmZddlm	Z	m
Z
mZmZm
Z
mZerAddlmZddlmZmZmZmZmZmZmZmZdd	lmZeeefZeeeeefgeeeffZeeefZee e!e"fZ#d
Z$dZ%dZ&d
Z'gZ(de)d<dd�Z*e+e,e-e.egZ/de)d<de0ddfd�Z1Gd�d�Z2dd�Z3y)�N)�array)�Mapping)�datetime)�
TYPE_CHECKING)�AnnotatedValue�capture_internal_exception�disable_capture_event�format_timestamp�	safe_repr�strip_string)�
TracebackType)�Any�Callable�ContextManager�Dict�List�Optional�Type�Union)�NotImplementedTypei@B��
z<cyclic>zList[ReprProcessor]�global_repr_processors�returnc�.�tj|�y�N)r�append)�	processors �D/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/serializer.py�add_global_repr_processorr 5s���!�!�)�,�z
List[type]�sequence_types�tyc�.�tj|�yr)r"r)r#s r�add_repr_sequence_typer%<s�����"�r!c�D�eZdZdZdd�Zd	d�Zdefd�Z								d
d�Zy)�Memo��_ids�_objsrNc� �i|_g|_yrr()�selfs r�__init__z
Memo.__init__Cs��&(��	�"$��
r!c�<�|jj|�|Sr)r*r�r,�objs  r�memoizezMemo.memoizeGs���
�
���#���r!c��|jd}t|�|jvry||jt|�<y)N���TF)r*�idr)r/s  r�	__enter__zMemo.__enter__Ks7���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__Ss&��	
�	�	�
�
�b������)�*�D�1r!)rN)r0rrzContextManager[bool])r#zOptional[Type[BaseException]]r8zOptional[BaseException]r9zOptional[TracebackType]rN)	�__name__�
__module__�__qualname__�	__slots__r-r1�boolr5r:�r!rr'r'@sH��!�I�%���4��2�+�2�)�2�
&�	2�

�2r!r'c
��������	�
���
�����t��g�g�|jdd�dk(�
|jdd��|jdd��|jdd��dd	d
tf�fd��d��fd��d���fd
��d�fd��d�fd��						d															d�
���fd�
�	d�fd��														d�������	��
���fd��
tjd�	�	|fi|��}�s�rt|t�r�d|d<|tjd�S#tjd�wxYw)au
    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, or None to disable string truncation. Defaults to None.
    :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_reprr8rrc�p��	d}���|�}|xst|�S#t$rt|�cYSwxYwr)r�	Exception)r8�
repr_valuerFs  �r�_safe_repr_wrapperz%serialize.<locals>._safe_repr_wrapperysG���	$��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�breadcrumbsrL�values��extraNF�rQ)�is_request_body�p0�_is_request_bodyrErWs  ���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^�rWs�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�requestrLreTFr^rfs�rraz#serialize.<locals>._is_request_body�s;���	��A�w�)�#��Q��6�(9�����	��	�rhc	����|��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)NrL)�
is_databagr_�should_repr_strings�remaining_depth�remaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	rr1�CYCLE_MARKERr7rN�
BaseExceptionr�sys�exc_info)r0rlr_rmrTrorn�result�_serialize_node_impl�memorVrWs        ����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)r0rXs �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)rvrn�__sentry_repr__)rNrL)rTrmrlr_rnrozutf-8�replace�rdr3�description)ryr�float�MAX_DATABAG_DEPTH�MAX_DATABAG_BREADTHrr�NotImplemented�getattr�typer?�int�math�isinf�isnan�callablerrPr
r�dict�itemsrN�serializable_str_types�tupler"�	enumerater�bytes�	bytearray�decode)r0rlr_rmrnro�is_span_attribute�hintsrrt�sentry_repr�rv_dict�i�k�v�str_k�rv_list�is_span_descriptionrXr{rbrargrJrwrE�keep_request_bodiesrDrvrWs                  ������������rruz'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)rSrrN)r�Optional[bool])NNNNNN)r0rrlr�r_r�rmr�rTzOptional[Segment]ro�Optional[Union[int, float]]rnr�rr)r0rrr)r0rrlr�r_r�rmr�rn�Optional[Union[float, int]]ror�rr)r'r7rPr	�setryr�)�event�kwargs�serialized_eventrXr{rbrargrJrwrurFrEr�rDrvrVrWs   @@@@@@@@@@@@@@@r�	serializer�\s�����(�6�D��D�)+�J� &�
�
�+B�D� I�X� U��(.�
�
�3E�t�(L���j�j��E�*�G�28�*�*�]�D�2Q�K�$�%�$�C�$�
7��8��(,�,0�04�'+�;?�9=�#0�
�#0�$�#0�*�#0�.�	#0�
%�#0�9�
#0�7�#0�
�#0�#0�J�JR�
�JR�$�JR�*�JR�.�	JR�
7�JR�9�
JR�
�JR�JR�JR�^���d�#�)�*�5�;�F�;���:�*�5E�t�*L�(2�1�
��W�%���!�!�%�(���!�!�%�(�s�,&D(�(D?)r�
ReprProcessorrN)r��Dict[str, Any]r�rrr�)4r�rrr�collections.abcrr�typingr�sentry_sdk.utilsrrr	r
rr�typesr
rrrrrrrr�sentry_sdk._typesrrP�Spanr�r��Segmentr�r��
memoryviewr��MAX_EVENT_BYTESr�r�rpr�__annotations__r r��listr��	frozensetr"r�r%r'r�r@r!r�<module>r�s����
��#�� ����#�W�W�W�4���S��>�D��c�4��S��>�2�E�:L�c�:Q�4R�R�S�M��C��H�o�G��u�i��<����������13��-�2�-�!&�t�S�)�U�C���C��t����2�2�8b)r!
Back to Directory File Manager