U 췀g'@sddlZddlZddlZddlmZddlmZmZddlm Z e rddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZmZd d ZGdddZGdddZGdddZdS)N)Session) json_dumpscapture_internal_exceptions) TYPE_CHECKING)Any)Optional)Union)Dict)List)Iterator)EventEventDataCategorycCs t|tr|dd}t|S)Nutf-8replace) isinstancebytesdecodejsonloads)datarA/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/envelope.py parse_jsons  rc@seZdZdZd'ddZeddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zed!d"Zed#d$Zd%d&ZdS)(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). NcCs:|dk rt|}|pi|_|dkr(g}nt|}||_dSN)dictheaderslistitems)selfrrrrr__init__$s zEnvelope.__init__cCs$dt|jddd|jDfS)Nzenvelope with %s items (%s)z, css|] }|jVqdSr) data_category).0xrrr 8sz'Envelope.description..)lenrjoinrrrr description3szEnvelope.descriptioncCs|tt|ddddS)Nreventpayloadtypeadd_itemItem PayloadRef)rr*rrr add_event;szEnvelope.add_eventcCs|tt|ddddS)Nr) transactionr+r.)rr3rrradd_transactionAszEnvelope.add_transactioncCs|tt|ddddS)Nr)profiler+r.)rr5rrr add_profileGszEnvelope.add_profilecCs|tt|ddddS)Nr) profile_chunkr+r.)rr7rrradd_profile_chunkMszEnvelope.add_profile_chunkcCs|tt|ddddS)Nr)check_inr+r.)rZcheckinrrr add_checkinUszEnvelope.add_checkincCs.t|tr|}|tt|ddddS)Nr)sessionr+)rrto_jsonr/r0r1)rr;rrr add_session[s zEnvelope.add_sessioncCs|tt|ddddS)Nr)sessionsr+r.)rr>rrr add_sessionscszEnvelope.add_sessionscCs|j|dSr)rappend)ritemrrrr/iszEnvelope.add_itemcCs(|jD]}|}|dk r|SqdSr)r get_event)rrr*rrrrBos   zEnvelope.get_eventcCs(|jD]}|}|dk r|SqdSr)rget_transaction_event)rrAr*rrrrCws   zEnvelope.get_transaction_eventcCs t|jSr)iterrr'rrr__iter__szEnvelope.__iter__cCs4|t|j|d|jD]}||q dS)N )writerrrserialize_into)rfrArrrrHs  zEnvelope.serialize_intocCst}|||SrioBytesIOrHgetvalueroutrrr serializes zEnvelope.serializecCs<t|}g}t|}|dkr$q0||q|||dS)Nrr)rreadliner0deserialize_fromr@)clsrIrrrArrrrSs   zEnvelope.deserialize_fromcCs|t|SrrSrKrLrTrrrr deserializeszEnvelope.deserializecCsd|j|jfS)NzrQr'rrr__repr__szEnvelope.__repr__)NN)__name__ __module__ __qualname____doc__r propertyr(r2r4r6r8r:r=r?r/rBrCrErHrP classmethodrSrWrXrrrrrs0     rc@s2eZdZd ddZddZeddZdd ZdS) r1NcCs||_||_||_dSr)rrpath)rrr_rrrrr szPayloadRef.__init__c Csj|jdkr`|jdk rJt(t|jd}||_W5QRXW5QRXn|jdk r`t|j|_|jphdS)Nrb)rr_ropenreadrr)rrIrrr get_bytess     zPayloadRef.get_bytescCsN|jdk rdS|jdk rJ|j}t|tr4|dd}t|d}|rJ|SdS)Nzapplication/jsonrrrzapplication/octet-stream)rr_rrr mimetypes guess_type)rr_tyrrrinferred_content_types    z PayloadRef.inferred_content_typecCs d|jfS)Nz )rhr'rrrrXszPayloadRef.__repr__)NNN)rYrZr[r rdr]rhrXrrrrr1s   r1c@sveZdZdddZddZeddZedd Zd d Zd d Z ddZ ddZ ddZ e ddZe ddZdS)r0NcCs|dk rt|}n |dkri}||_t|tr:t|d}n t|trVt|dd}n|}|dk rj||d<|dk rz||d<|dk r||d<nd|kr|j|d<||_dS)N)rrfilenamer- content_type) rrrrr1strencoderhr,)rr,rr-rjrirrrr s&      z Item.__init__cCsd|j|j|jfS)Nz-)rr,r!r'rrrrXs z Item.__repr__cCs |jdS)Nr-rgetr'rrrr-sz Item.typecCs|jd}|dks|dkr dS|dkr,dS|dkr8dS|dkrDdS|dkrPd S|d kr\d S|d krhd S|d krtd S|dkrdSdSdS)Nr-r;r> attachmentr3r*errorZ client_reportZinternalr5r7ZstatsdZ metric_bucketr9Zmonitordefaultrm)rrgrrrr!s( zItem.data_categorycCs |jSr)r,rdr'rrrrdszItem.get_bytescCs"|jdkr|jjdk r|jjSdS)z9 Returns an error event if there is one. r*Nr-r,rr'rrrrB szItem.get_eventcCs"|jdkr|jjdk r|jjSdS)Nr3rrr'rrrrC)szItem.get_transaction_eventcCsNt|j}|}t||d<|t||d|||ddS)NlengthrF)rrrdr%rGr)rrIrrrrrrH/s    zItem.serialize_intocCst}|||SrrJrNrrrrP;s zItem.serializecCs|}|sdSt|}|d}|dk rB||}|n|d}|ddkrv||tt|dd}n |||d}|S)NrsrFr-)r*r3Zmetric_bucketsr))rr,)rRrstriprrnrcr1)rTrIlinerrsr,rvrrrrSAs     zItem.deserialize_fromcCs|t|SrrUrVrrrrWXszItem.deserialize)NNNN)rYrZr[r rXr]r-r!rdrBrCrHrPr^rSrWrrrrr0s&      r0)rKrreZsentry_sdk.sessionrZsentry_sdk.utilsrrtypingrrrrr r r Zsentry_sdk._typesr r rrr1r0rrrrs$        *