o
    ٰi%                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 e	rNd 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dZG dd dZG dd dZG dd dZdS )    N)Session)
json_dumpscapture_internal_exceptions)TYPE_CHECKING)Any)Optional)Union)Dict)List)Iterator)EventEventDataCategorydataUnion[bytes, str]returnr   c                 C   s    t | tr| dd} t| S )Nutf-8replace)
isinstancebytesdecodejsonloads)r    r   G/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/envelope.py
parse_json   s   

r   c                   @   sD  e Zd ZdZ		d<					d=dd	Zedefd
dZ				d>ddZ				d?ddZ					d@ddZ
				dAddZ				dBddZ				dCdd Z	!			dDd"d#Z	$	%		dEd&d'ZdFd)d*ZdFd+d,ZdGd.d/Z	0			dHd1d2Zdefd3d4Ze	0			 dId5d6Zed7edd fd8d9Zdefd:d;ZdS )JEnvelopea.  
    Represents a Sentry Envelope. The calling code is responsible for adhering to the constraints
    documented in the Sentry docs: https://develop.sentry.dev/sdk/envelopes/#data-model. In particular,
    each envelope may have at most one Item with type "event" or "transaction" (but not both).
    NheadersOptional[Dict[str, Any]]itemsOptional[List[Item]]r   c                 C   s:   |d urt |}|pi | _|d u rg }nt|}|| _d S N)dictr   listr   )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>5   s    z'Envelope.description.<locals>.<genexpr>)lenr   joinr#   r   r   r   description1   s   zEnvelope.descriptioneventr   c                 C      |  tt|ddd d S )Nr   r-   payloadtypeadd_itemItem
PayloadRef)r#   r-   r   r   r   	add_event8      zEnvelope.add_eventtransactionc                 C   r.   )Nr/   r9   r0   r3   )r#   r9   r   r   r   add_transaction>   r8   zEnvelope.add_transactionprofiler   c                 C   r.   )Nr/   r;   r0   r3   )r#   r;   r   r   r   add_profileD   r8   zEnvelope.add_profileprofile_chunkc              
   C   s*   |  tt|ddd|ddid d S )Nr/   r=   platformpython)r1   r2   r   )r4   r5   r6   get)r#   r=   r   r   r   add_profile_chunkJ   s   zEnvelope.add_profile_chunkcheckinc                 C   r.   )Nr/   check_inr0   r3   )r#   rB   r   r   r   add_checkinV   r8   zEnvelope.add_checkinsessionUnion[Session, Any]c                 C   s.   t |tr	| }| tt|ddd d S )Nr/   rE   r0   )r   r   to_jsonr4   r5   r6   )r#   rE   r   r   r   add_session\   s   
zEnvelope.add_sessionsessionsc                 C   r.   )Nr/   rI   r0   r3   )r#   rI   r   r   r   add_sessionsd   r8   zEnvelope.add_sessionsitemr5   c                 C   s   | j | d S r    )r   append)r#   rK   r   r   r   r4   j   s   zEnvelope.add_itemOptional[Event]c                 C   (   | j D ]}| }|d ur|  S qd S r    )r   	get_event)r#   r   r-   r   r   r   rO   p      
zEnvelope.get_eventc                 C   rN   r    )r   get_transaction_event)r#   rK   r-   r   r   r   rQ   w   rP   zEnvelope.get_transaction_eventIterator[Item]c                 C   s
   t | jS r    )iterr   r+   r   r   r   __iter__~      
zEnvelope.__iter__fc                 C   s4   | t| j | d | jD ]}|| qd S )N   
)writer   r   r   serialize_into)r#   rV   rK   r   r   r   rY      s
   

zEnvelope.serialize_intoc                 C      t  }| | | S r    ioBytesIOrY   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   readliner5   deserialize_fromrL   )clsrV   r   r   rK   r   r   r   rf      s   

zEnvelope.deserialize_fromr   c                 C      |  t|S r    rf   r\   r]   rg   r   r   r   r   deserialize      zEnvelope.deserializec                 C   s   d| j | jf S )Nz<Envelope headers=%r items=%r>rd   r+   r   r   r   __repr__   s   zEnvelope.__repr__)NN)r   r   r   r   r   N)r-   r   r   N)r9   r   r   N)r;   r   r   N)r=   r   r   N)rB   r   r   N)rE   rF   r   N)rI   r   r   N)rK   r5   r   Nr   rM   )r   rR   rV   r   r   N)rV   r   r   r   )__name__
__module____qualname____doc__r$   propertystrr,   r7   r:   r<   rA   rD   rH   rJ   r4   rO   rQ   rT   rY   r   ra   classmethodrf   rk   rm   r   r   r   r   r      s    












	r   c                   @   sZ   e Zd Z			d							dd	d
ZdefddZedefddZdefddZ	dS )r6   Nr   Optional[bytes]pathOptional[Union[bytes, str]]r   Optional[Any]r   c                 C   s   || _ || _|| _d S r    )r   r   rx   )r#   r   rx   r   r   r   r   r$      s   
zPayloadRef.__init__c              	   C   s   | j d u rD| jd ur9t # t| jd}| | _ W d    n1 s$w   Y  W d    n1 s3w   Y  n| jd urDt| j| _ | j pHdS )Nrb    )r   rx   r   openreadr   r   )r#   rV   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   rx   r   r   r   	mimetypes
guess_type)r#   rx   tyr   r   r   inferred_content_type   s   


z PayloadRef.inferred_content_typec                 C   s   d| j f S )Nz<Payload %r>)r   r+   r   r   r   rm      s   zPayloadRef.__repr__)NNN)r   rw   rx   ry   r   rz   r   N)
rp   rq   rr   r$   r   r   rt   ru   r   rm   r   r   r   r   r6      s"    


r6   c                   @   s   e Zd Z				d'										d(d
dZdefddZed)ddZed*ddZde	fddZ
d+ddZd+ddZ				d,ddZde	fdd Ze				!d-d"d#Zed$e	dd!fd%d&ZdS ).r5   Nr1   Union[bytes, str, PayloadRef]r   r   r2   Optional[str]content_typefilenamec                 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   r   r2   r   )	r!   r   r   r   r6   ru   encoder   r1   )r#   r1   r   r2   r   r   r   r   r   r$      s&   





zItem.__init__r   c                 C   s   d| j | j| jf S )Nz-<Item headers=%r payload=%r data_category=%r>)r   r1   r%   r+   r   r   r   rm      s
   zItem.__repr__c                 C   s   | j dS )Nr2   r   r@   r+   r   r   r   r2      s   z	Item.typer   c                 C   s   | j d}|dk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r.d
S |dkr4dS |dkr:dS |dkr@dS |dkrFdS dS )Nr2   rE   rI   
attachmentr9   r-   errorloglog_itemtrace_metricclient_reportinternalr;   r=   rC   monitordefaultr   )r#   r   r   r   r   r%      s,   zItem.data_categoryc                 C   s
   | j  S r    )r1   r   r+   r   r   r   r     rU   zItem.get_bytesrM   c                 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r2   r1   r   r+   r   r   r   rO     s   zItem.get_eventc                 C   s"   | j dkr| jjd ur| jjS d S )Nr9   r   r+   r   r   r   rQ     s   zItem.get_transaction_eventrV   r   c                 C   sN   t | j}|  }t||d< |t| |d || |d d S )NlengthrW   )r!   r   r   r)   rX   r   )r#   rV   r   r   r   r   r   rY   #  s   


zItem.serialize_intoc                 C   rZ   r    r[   r_   r   r   r   ra   /  rb   zItem.serializeOptional[Item]c                 C   s   |   }|s
d S t|}|d}|d ur!||}|   n|  d}|ddv r<| |tt|dd}|S | ||d}|S )Nr   rW   r2   )r-   r9   r/   )r   r1   )re   rstripr   r@   r~   r6   )rg   rV   liner   r   r1   rvr   r   r   rf   4  s   


zItem.deserialize_fromr   c                 C   rh   r    ri   rj   r   r   r   rk   K  rl   zItem.deserialize)NNNN)
r1   r   r   r   r2   r   r   r   r   r   )r   r   )r   r   rn   ro   )rV   r   r   r   )rp   rq   rr   r$   ru   rm   rt   r2   r%   r   r   rO   rQ   rY   ra   rv   rf   rk   r   r   r   r   r5      sT    



r5   )r   r   r   r   )r\   r   r   sentry_sdk.sessionr   sentry_sdk.utilsr   r   typingr   r   r   r   r	   r
   r   sentry_sdk._typesr   r   r   r   r6   r5   r   r   r   r   <module>   s&    
 &