o
    Zh%                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ erVd 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mZ dd ZG dd deZG dd deZG dd deZdS )    N)	text_typePY2)TYPE_CHECKING)Session)
json_dumpscapture_internal_exceptions)Any)Optional)Union)Dict)List)Iterator)EventEventDataCategoryc                 C   s$   t st| tr| dd} t| S )Nutf-8replace)r   
isinstancebytesdecodejsonloads)data r   J/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/envelope.py
parse_json   s   
r   c                   @   s   e Zd Z		d$ddZedd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zed d! Zd"d# ZdS )%EnvelopeNc                 C   s:   |d urt |}|pi | _|d u rg }nt|}|| _d S N)dictheaderslistitems)selfr   r    r   r   r   __init__   s   

zEnvelope.__init__c                 C   s$   dt | jddd | jD f S )Nzenvelope with %s items (%s)z, c                 s   s    | ]}|j V  qd S r   )data_category).0xr   r   r   	<genexpr>2   s    z'Envelope.description.<locals>.<genexpr>)lenr    joinr!   r   r   r   description-   s   zEnvelope.descriptionc                 C      |  tt|ddd d S )Nr   eventpayloadtypeadd_itemItem
PayloadRef)r!   r-   r   r   r   	add_event5      zEnvelope.add_eventc                 C   r+   )Nr,   transactionr.   r1   )r!   r7   r   r   r   add_transaction;   r6   zEnvelope.add_transactionc                 C   r+   )Nr,   profiler.   r1   )r!   r9   r   r   r   add_profileA   r6   zEnvelope.add_profilec                 C   r+   )Nr,   check_inr.   r1   )r!   Zcheckinr   r   r   add_checkinG   r6   zEnvelope.add_checkinc                 C   s.   t |tr	| }| tt|ddd d S )Nr,   sessionr.   )r   r   to_jsonr2   r3   r4   )r!   r=   r   r   r   add_sessionM   s   
zEnvelope.add_sessionc                 C   r+   )Nr,   sessionsr.   r1   )r!   r@   r   r   r   add_sessionsU   r6   zEnvelope.add_sessionsc                 C   s   | j | d S r   )r    append)r!   itemr   r   r   r2   [   s   zEnvelope.add_itemc                 C   (   | j D ]}| }|d ur|  S qd S r   )r    	get_event)r!   r    r-   r   r   r   rE   a      
zEnvelope.get_eventc                 C   rD   r   )r    get_transaction_event)r!   rC   r-   r   r   r   rG   i   rF   zEnvelope.get_transaction_eventc                 C   s
   t | jS r   )iterr    r)   r   r   r   __iter__q      
zEnvelope.__iter__c                 C   s4   | t| j | d | jD ]}|| qd S )N   
)writer   r   r    serialize_into)r!   frC   r   r   r   rM   u   s
   

zEnvelope.serialize_intoc                 C      t  }| | | S r   ioBytesIOrM   getvaluer!   outr   r   r   	serialize~      
zEnvelope.serializec                 C   s>   t | }g }	 t|}|d u rn|| q	| ||dS )N   r   r    )r   readliner3   deserialize_fromrB   )clsrN   r   r    rC   r   r   r   r[      s   

zEnvelope.deserialize_fromc                 C      |  t|S r   r[   rQ   rR   r\   r   r   r   r   deserialize      zEnvelope.deserializec                 C   s   d| j | jf S )Nz<Envelope headers=%r items=%r>rY   r)   r   r   r   __repr__   s   zEnvelope.__repr__)NN)__name__
__module____qualname__r"   propertyr*   r5   r8   r:   r<   r?   rA   r2   rE   rG   rI   rM   rV   classmethodr[   r`   rb   r   r   r   r   r      s.    

	

r   c                   @   s8   e Zd Z			d
ddZdd Zedd Zdd	 ZdS )r4   Nc                 C   s   || _ || _|| _d S r   )r   r   path)r!   r   rh   r   r   r   r   r"      s   
zPayloadRef.__init__c              	   C   s   | j d u rW| jd urFt . t| jd}| | _ W d    n1 s$w   Y  W d    | j S W d    | j S 1 s>w   Y  | j S | jd urTt| j| _ | j S d| _ | j S )Nrb    )r   rh   r   openreadr   r   )r!   rN   r   r   r   	get_bytes   s$   




zPayloadRef.get_bytesc                 C   sN   | j d urdS | jd ur%| j}t|tr|dd}t|d }|r%|S dS )Nzapplication/jsonr   r   r   zapplication/octet-stream)r   rh   r   r   r   	mimetypes
guess_type)r!   rh   tyr   r   r   inferred_content_type   s   


z PayloadRef.inferred_content_typec                 C   s   d| j f S )Nz<Payload %r>)rq   r)   r   r   r   rb      s   zPayloadRef.__repr__)NNN)rc   rd   re   r"   rm   rf   rq   rb   r   r   r   r   r4      s    

r4   c                   @   s~   e Zd Z				dddZdd Zedd Zedd	 Zd
d Zdd Z	dd Z
dd Zdd Zedd Zedd ZdS )r3   Nc                 C   s   |d ur	t |}n|d u ri }|| _t|trt|d}nt|tr+t|dd}n|}|d ur5||d< |d ur=||d< |d urF||d< n	d|vrO|j|d< || _d S )N)r   r   filenamer0   content_type)	r   r   r   r   r4   r   encoderq   r/   )r!   r/   r   r0   rs   rr   r   r   r   r"      s&   





zItem.__init__c                 C   s   d| j | j| jf S )Nz-<Item headers=%r payload=%r data_category=%r>)r   r/   r#   r)   r   r   r   rb      s
   zItem.__repr__c                 C   s   | j dS )Nr0   r   getr)   r   r   r   r0      s   z	Item.typec                 C   sp   | j d}|dkrdS |dkrdS |dkrdS |dkrdS |dkr$dS |d	kr*d	S |d
kr0d
S |dkr6dS dS )Nr0   r=   
attachmentr7   r-   errorZclient_reportZinternalr9   Zstatsdr;   Zmonitordefaultru   )r!   rp   r   r   r   r#      s$   zItem.data_categoryc                 C   s
   | j  S r   )r/   rm   r)   r   r   r   rm     rJ   zItem.get_bytesc                 C   s"   | j dkr| jjdur| jjS dS )z9
        Returns an error event if there is one.
        r-   Nr0   r/   r   r)   r   r   r   rE     s   zItem.get_eventc                 C   s"   | j dkr| jjd ur| jjS d S )Nr7   rz   r)   r   r   r   rG     s   zItem.get_transaction_eventc                 C   sN   t | j}|  }t||d< |t| |d || |d d S )NlengthrK   )r   r   rm   r'   rL   r   )r!   rN   r   r   r   r   r   rM   !  s   


zItem.serialize_intoc                 C   rO   r   rP   rT   r   r   r   rV   -  rW   zItem.serializec                 C   s   |   }|s
d S t|}|d}|d ur!||}|   n|  d}|ddv r<| |tt|dd}|S | ||d}|S )Nr{   rK   r0   )r-   r7   Zmetric_bucketsr,   )r   r/   )rZ   rstripr   rv   rl   r4   )r\   rN   liner   r{   r/   rvr   r   r   r[   3  s   


zItem.deserialize_fromc                 C   r]   r   r^   r_   r   r   r   r`   J  ra   zItem.deserialize)NNNN)rc   rd   re   r"   rb   rf   r0   r#   rm   rE   rG   rM   rV   rg   r[   r`   r   r   r   r   r3      s(    


	
r3   )rQ   r   rn   Zsentry_sdk._compatr   r   Zsentry_sdk._typesr   Zsentry_sdk.sessionr   Zsentry_sdk.utilsr   r   typingr   r	   r
   r   r   r   r   r   r   objectr   r4   r3   r   r   r   r   <module>   s(     ,