Ë
    çÞËjªE  ã                   óŠ  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dl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mZmZmZmZmZ d d
lmZ d dlmZ d dl m!Z! e!r1d 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(m)Z)  e#de$de"f   ¬«      Z*dZ+dZ,d„ Z-d„ Z.d„ Z/ G d„ de«      Z0d„ Z1d„ Z2d„ Z3d„ Z4d „ Z5d!„ Z6y)"é    N)Údeepcopy)ÚdatetimeÚ	timedeltaÚtimezone)Úenviron)Úcontinue_trace)ÚOP)Úshould_send_default_pii)ÚTRANSACTION_SOURCE_COMPONENT)ÚAnnotatedValueÚcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚloggerÚTimeoutThreadÚreraise)ÚIntegration)Ú_filter_headers)ÚTYPE_CHECKING)ÚAny)ÚTypeVar)ÚCallable)ÚOptional)ÚEventProcessorÚEventÚHintÚF.)ÚboundiÜ  g     @�@c                 ó8   ‡ — t        t        ‰ «      ˆ fd„«       }|S )Nc                  óØ  •— t        j                  «       }t        «       5  t        j                  «       j	                  «        t        j                  «       }|rAt        |«      r6t        ||j                  dddœ¬«      \  }}t        j                  ||¬«       n6t        t        j                  | d   «      «      }t        j                  |«       d d d «        ‰| i |¤ŽS # 1 sw Y   ŒxY w)NÚ
aws_lambdaF©ÚtypeÚhandled©Úclient_optionsÚ	mechanism©Úhinté   )Ú
sentry_sdkÚ
get_clientr   Úget_isolation_scopeÚclear_breadcrumbsÚsysÚexc_infoÚallr   ÚoptionsÚcapture_eventÚ_event_from_error_jsonÚjsonÚloads)ÚargsÚkwargsÚclientr0   Úsentry_eventr)   Ú
init_errors         €ú_/var/www/photos/backend/venv/lib/python3.12/site-packages/sentry_sdk/integrations/aws_lambda.pyÚsentry_init_errorz+_wrap_init_error.<locals>.sentry_init_error-   sÃ   ø€ ô ×&Ñ&Ó(ˆä(Ó*ñ 	7Ü×*Ñ*Ó,×>Ñ>Ô@ä—|‘|“~ˆHÙœC œMÜ%9ØØ#)§>¡>Ø'3ÀÑFô&Ñ"�˜dô
 ×(Ñ(¨¸DÖAô  6´d·j±jÀÀaÁÓ6IÓJ�Ü×(Ñ(¨Ô6÷	7ñ" ˜4Ð* 6Ñ*Ð*÷#	7ð 	7ús    B0C Ã C))r   ÚAwsLambdaIntegration)r;   r=   s   ` r<   Ú_wrap_init_errorr?   +   s&   ø€ äÔ 4°jÓAó+ó Bð+ð. Ðó    c                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc           
      óâ  •— t        j                  «       }|j                  t        «      }|€ ‰| |g|¢­i |¤ŽS t	        | t
        «      rt        | «      dk\  r| d   }t        | «      }n| }d}t	        |t        «      si }|j                  «       }t        j                  «       5 }	d }
t        «       5  |	j                  «        |	j                  t        |||«      «       |	j                  d|j                  j!                  d«      d   «       |dkD  r$|	j                  dd«       |	j                  d|«       |j"                  r<|t$        kD  r3|t$        z
  t&        z  }t)        ||t&        z  «      }
|
j+                  «        d d d «       |j-                  d	i «      }t	        |t        «      si }t/        |t0        j2                  |j4                  t6        t        j8                  ¬
«      }t        j:                  || |dœ¬«      5  	  ‰| |g|¢­i |¤Ž|
r|
j=                  «        cd d d «       cd d d «       S # 1 sw Y   Œ´xY w# t>        $ rT tA        jB                  «       }tE        ||jF                  dddœ¬«      \  }}t        jH                  ||¬«       tK        |Ž  Y nw xY w	 |
r)|
j=                  «        n# |
r|
j=                  «        w w xY wd d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)Nr*   r   Ú
aws_regionú:é   Úbatch_requestTÚ
batch_sizeÚheaders)ÚopÚnameÚsourceÚorigin)Ú	aws_eventÚaws_context)Úcustom_sampling_contextr!   Fr"   r%   r(   )&r+   r,   Úget_integrationr>   Ú
isinstanceÚlistÚlenÚdictÚget_remaining_time_in_millisÚisolation_scoper   r.   Úadd_event_processorÚ_make_request_event_processorÚset_tagÚinvoked_function_arnÚsplitÚtimeout_warningÚTIMEOUT_WARNING_BUFFERÚMILLIS_TO_SECONDSr   ÚstartÚgetr   r	   ÚFUNCTION_AWSÚfunction_namer   rL   Ústart_transactionÚstopÚ	Exceptionr/   r0   r   r2   r3   r   )rM   rN   r7   r8   r9   ÚintegrationÚrequest_datarG   Úconfigured_timeÚscopeÚtimeout_threadÚwaiting_timerH   Útransactionr0   r:   r)   Úhandlers                    €r<   Úsentry_handlerz%_wrap_handler.<locals>.sentry_handlerJ   så  ø€ ô ×&Ñ&Ó(ˆØ×,Ñ,Ô-AÓBˆàÐÙ˜9 kÐC°DÒC¸FÑCÐCä�i¤Ô&¬3¨y«>¸QÒ+>Ø$ Q™<ˆLÜ˜Y›‰Jà$ˆLØˆJä˜,¬Ô-ð ˆLà%×BÑBÓDˆä×'Ñ'Ó)ð C	.¨UØ!ˆNÜ,Ó.ñ +Ø×'Ñ'Ô)Ø×)Ñ)Ü1Ø$ k°?óôð
 —‘Ø  +×"BÑ"B×"HÑ"HÈÓ"MÈaÑ"Pôð  ’>Ø—M‘M /°4Ô8Ø—M‘M ,°
Ô;ð
  ×/Ò/Ø'Ô*@Ò@ð (Ô*@Ñ@Ü)ñ$*�Lô &3Ø$Ø'Ô*;Ñ;ó&�Nð #×(Ñ(Ô*÷=+ð@ #×&Ñ& y°"Ó5ˆGô ˜g¤tÔ,Ø�ä(ØÜ—?‘?Ø ×.Ñ.Ü3Ü+×2Ñ2ôˆKô ×-Ñ-Øà!*Ø#.ñ)ôñ .ð.Ù" 9¨kÐK¸DÒKÀFÑKñ &Ø&×+Ñ+Ô-÷).ð .÷_C	.ñ C	.÷+ð +ûôl !ò 'Ü"Ÿ|™|›~�HÜ)=Ø Ø'-§~¡~Ø+7ÀEÑ"Jô*Ñ&�L $ô
 ×,Ñ,¨\ÀÕEÜ˜XÓ&ð'úð 'á%Ø&×+Ñ+Õ-øñ &Ø&×+Ñ+Õ-ð &ú÷'.÷ .ñ .ú÷_C	.÷ C	.ñ C	.ús{   Â#K%Â0CH/Å<B K%Ç<KÇ>H;È
KÈ	K%È/H8	È4K%È;AJÊJ/ÊJÊJ/ÊKÊ/KËKË	K%ËK	ËK%Ë%K.)Ú	functoolsÚwraps)rm   rn   s   ` r<   Ú_wrap_handlerrq   H   s)   ø€ ä‡_�_�WÓóe.ó ðe.ðN Ðr@   c                  ó¸   — t        «       5  t        j                  «       } | j                  t        «      }|�| j                  «        d d d «       y # 1 sw Y   y xY w©N)r   r+   r,   rP   r>   Úflush)r9   rf   s     r<   Ú_drain_queueru   µ   sM   € ä	$Ó	&ñ Ü×&Ñ&Ó(ˆØ×,Ñ,Ô-AÓBˆØÐ"ð �L‰LŒN÷÷ ñ ús   ‹<AÁAc                   ó2   — e Zd ZdZde› �Zdd„Zed„ «       Zy)r>   r!   zauto.function.c                 ó   — || _         y rs   )r\   )Úselfr\   s     r<   Ú__init__zAwsLambdaIntegration.__init__Ä   s
   € à.ˆÕr@   c                  ó~  ‡‡‡— t        «       } | st        j                  d«       y t        | d«      st        j                  d«       y t        | d«      }|rI| j                  Šˆfd„}|| _        | j
                  Šˆfd„}|| _        | j                  Šˆfd„}|| _        y t        | j                  j                  «      | j                  _	        | j                  Šˆfd„}|| _        d	„ } || j                  j                  «      | j                  _
         || j                  j                  «      | j                  _        y )
NzfNot running in AWS Lambda environment, AwsLambdaIntegration disabled (could not find bootstrap module)Úhandle_event_requestzjNot running in AWS Lambda environment, AwsLambdaIntegration disabled (could not find handle_event_request)Úhandle_http_requestc                 ó2   •— t        | «      }  ‰| g|¢­i |¤ŽS rs   ©rq   )Úrequest_handlerr7   r8   Úold_handle_event_requests      €r<   Úsentry_handle_event_requestzDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_requestà   s"   ø€ ä"/°Ó"@�Ù/°ÐQÀ$ÒQÈ&ÑQÐQr@   c                 ó2   •— t        | «      }  ‰| g|¢­i |¤ŽS rs   r~   )r   r7   r8   Úold_handle_http_requests      €r<   Úsentry_handle_http_requestzCAwsLambdaIntegration.setup_once.<locals>.sentry_handle_http_requesté   s"   ø€ ä"/°Ó"@�Ù.¨ÐPÀÒPÈÑPÐPr@   c                  ó(   •— t        «         ‰| i |¤ŽS rs   ©ru   )r7   r8   Úold_to_jsons     €r<   Úsentry_to_jsonz7AwsLambdaIntegration.setup_once.<locals>.sentry_to_jsonõ   s   ø€ ä”Ù" DÐ3¨FÑ3Ð3r@   c                 ó4   •— t        |«      } ‰| |g|¢­i |¤ŽS rs   r~   )Úlambda_runtime_clientr   r7   r8   r€   s       €r<   r�   zDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_request  s1   ø€ ô #0°Ó"@�Ù/Ø)¨?ðØ=AòØEKñð r@   c                 ó   ‡ — ˆ fd„}|S )Nc                  ó(   •— t        «         ‰| i |¤ŽS rs   r†   )r7   r8   Úfs     €r<   ÚinnerzKAwsLambdaIntegration.setup_once.<locals>._wrap_post_function.<locals>.inner  s   ø€ ä ”NÙ˜dÐ- fÑ-Ð-r@   © )r�   rŽ   s   ` r<   Ú_wrap_post_functionz<AwsLambdaIntegration.setup_once.<locals>._wrap_post_function  s   ø€ ô.ð
 �r@   )Úget_lambda_bootstrapr   ÚwarningÚhasattrr{   r|   Úto_jsonr?   ÚLambdaRuntimeClientÚpost_init_errorÚpost_invocation_resultÚpost_invocation_error)	Úlambda_bootstrapÚpre_37r�   r„   rˆ   r�   r€   rƒ   r‡   s	         @@@r<   Ú
setup_oncezAwsLambdaIntegration.setup_onceÈ   sK  ú€ ô 0Ó1ÐÙÜ�N‰NðRôð äÐ'Ð)?Ô@Ü�N‰NðVôð äÐ)Ð+@ÓAˆáØ'7×'LÑ'LÐ$ôRð
 5PÐÔ1à&6×&JÑ&JÐ#ôQð
 4NÐÔ0ð
 +×2Ñ2ˆKô4ð
 (6ÐÕ$äCSØ ×4Ñ4×DÑDóDÐ×0Ñ0Ô@ð (8×'LÑ'LÐ$ôð 5PÐÔ1ò
ñ $Ø$×8Ñ8×OÑOóð ×0Ñ0ÔGñ $Ø$×8Ñ8×NÑNóð ×0Ñ0ÕFr@   N)F)Ú__name__Ú
__module__Ú__qualname__Ú
identifierrL   ry   Ústaticmethodr›   r�   r@   r<   r>   r>   À   s.   „ Ø€JØ˜j˜\Ð*€Fó/ð ñXó ñXr@   r>   c                  ó<  — dt         j                  v rt         j                  d   S dt         j                  v ret         j                  d   } t        | d«      r,t        | j                  d«      r| j                  j                  S t        | d«      r| j                  S | S y )NÚ	bootstrapÚ__main__Úawslambdaricmain)r/   Úmodulesr“   r¤   r¢   )Úmodules    r<   r‘   r‘   $  sŠ   € ð$ ”c—k‘kÑ!Ü�{‰{˜;Ñ'Ð'Ø	”s—{‘{Ñ	"Ü—‘˜ZÑ(ˆä�6Ð-Ô.´7Ø×#Ñ# [ô4
ð ×*Ñ*×4Ñ4Ð4Ü�V˜[Ô)à×#Ñ#Ð#ð ˆàr@   c                 ód   ‡ ‡‡— t        j                  t        j                  «      }|fˆˆ ˆfd„	}|S )Nc                 ó@  •— ‰j                  «       }‰|z
  }| j                  di «      }‰j                  ‰j                  ‰j                  ‰j
                  ||dœ|d<   t        ‰|«      ‰j                  ‰j                  dœ|d<   | j                  di «      }d‰v r‰d   |d<   t        ‰‰«      |d	<   d
‰v r‰d
   |d<   d‰v rt        ‰d   «      |d<   t        «       r‹| j                  di «      }‰j                  d«      }|€i }|j                  d«      }	|	�|j                  d|	«       |j                  d«      }
|
�|j                  d|
«       d‰v r?‰j                  dd«      |d<   n)‰j                  dd «      rt        j                  «       |d<   t        |«      | d<   | S )NÚextra)rb   Úfunction_versionrZ   Úaws_request_idÚexecution_duration_in_millisÚremaining_time_in_millisÚlambda)ÚurlÚ	log_groupÚ
log_streamzcloudwatch logsÚrequestÚ
httpMethodÚmethodr¯   ÚqueryStringParametersÚquery_stringrH   ÚuserÚidentityÚuserArnÚidÚsourceIpÚ
ip_addressÚbodyÚ Údata)rU   Ú
setdefaultrb   rª   rZ   r«   Ú_get_cloudwatch_logs_urlÚlog_group_nameÚlog_stream_namer`   Ú_get_urlr   r
   r   Úremoved_because_raw_datar   )r:   r)   Ú
start_timeÚremaining_time_in_milisÚexec_durationr©   r²   Ú	user_infor¸   rº   ÚiprN   rM   Úconfigured_timeouts              €€€r<   Úevent_processorz6_make_request_event_processor.<locals>.event_processorM  sÈ  ø€ à"-×"JÑ"JÓ"LÐØ*Ð-DÑDˆà×'Ñ'¨°Ó4ˆà(×6Ñ6Ø +× <Ñ <Ø$/×$DÑ$DØ)×8Ñ8Ø,9Ø(?ñ
ˆˆh‰ô ,¨K¸ÓDØ$×3Ñ3Ø%×5Ñ5ñ$
ˆÐÑ ð ×"Ñ" 9¨bÓ1ˆà˜9Ñ$Ø )¨,Ñ 7ˆG�HÑä! )¨[Ó9ˆ�‰à" iÑ/Ø&/Ð0GÑ&HˆG�NÑ#à˜	Ñ!Ü!0°¸9Ñ1EÓ!FˆG�IÑä"Ô$Ø$×/Ñ/°¸Ó;ˆIà —}‘} ZÓ0ˆHØÐØ�à—‘˜iÓ(ˆBØˆ~Ø×$Ñ$ T¨2Ô.à—‘˜jÓ)ˆBØˆ~Ø×$Ñ$ \°2Ô6à˜Ñ"Ø"+§-¡-°¸Ó";�˜’à�}‰}˜V TÔ*ô #1×"IÑ"IÓ"K�˜‘ä"*¨7Ó"3ˆ�YÑàÐr@   )r   Únowr   Úutc)rM   rN   rË   rÆ   rÌ   s   ```  r<   rX   rX   I  s&   ú€ ä—‘œhŸl™lÓ+€Jà7A÷ ;ðz Ðr@   c                 ó   — | j                  dd «      }| j                  d«      }|€i }|j                  dd «      }|j                  dd «      }|r|r|rdj                  |||«      S dj                  |j                  «      S )NÚpathrH   ÚHostzX-Forwarded-Protoz	{}://{}{}zawslambda:///{})r`   Úformatrb   )rM   rN   rÐ   rH   ÚhostÚprotos         r<   rÄ   rÄ   �  s~   € à�=‰=˜ Ó&€Dà�m‰m˜IÓ&€GØ€Øˆà�;‰;�v˜tÓ$€DØ�K‰KÐ+¨TÓ2€EÙ‘™$Ø×!Ñ! %¨¨tÓ4Ð4Ø×#Ñ# K×$=Ñ$=Ó>Ð>r@   c                 ód  — d}t        j                  dd«      }dj                  |j                  d«      rdnd|| j                  | j
                  |t        d¬	«      z
  j                  |«      t        j                  t        j                  «      t        d
¬	«      z   j                  |«      ¬«      }|S )zË
    Generates a CloudWatchLogs console URL based on the context object

    Arguments:
        aws_context {Any} -- context from lambda handler

    Returns:
        str -- AWS Console URL to logs.
    z%Y-%m-%dT%H:%M:%SZÚ
AWS_REGIONr¾   z�https://console.{domain}/cloudwatch/home?region={region}#logEventViewer:group={log_group};stream={log_stream};start={start_time};end={end_time}zcn-zamazonaws.cnzaws.amazon.comr*   )Úsecondsé   )ÚdomainÚregionr°   r±   rÆ   Úend_time)r   r`   rÒ   Ú
startswithrÂ   rÃ   r   Ústrftimer   rÍ   r   rÎ   )rN   rÆ   ÚformatstringrÚ   r¯   s        r<   rÁ   rÁ   œ  s£   € ð (€LÜ�[‰[˜ rÓ*€Fð	-÷ �fØ!'×!2Ñ!2°5Ô!9‰~Ð?OØØ×,Ñ,Ø×.Ñ.Ø¤°1Ô!5Ñ5×?Ñ?ÀÓMÜ—,‘,œxŸ|™|Ó,¬yÀÔ/CÑC×MÑMØó
ð ó 	ð	 ð €Jr@   c                 óÖ   — g }| D ]a  }t        j                  d|j                  «       «      }|sŒ*|j                  «       \  }}}t	        |«      }|j                  |||d d d d dœ«       Œc |S )Nz File "(.+)", line (\d+), in (.+))ÚfilenameÚfunctionÚlinenoÚvarsÚpre_contextÚcontext_lineÚpost_context)ÚreÚmatchÚstripÚgroupsÚintÚappend)Úformatted_tbÚframesÚframerè   Ú	file_nameÚline_numberÚ	func_names          r<   Ú_parse_formatted_tracebackró   ¼  sy   € à€FØò ˆÜ—‘Ð<¸e¿k¹k»mÓLˆÚØ05·±³Ñ-ˆI�{ IÜ˜kÓ*ˆKØ�M‰Mà )Ø )Ø)Ø Ø#'Ø$(Ø$(ñõ
ðð  €Mr@   c                 ó˜   — dd| j                  d«      | j                  d«      dt        | j                  dg «      «      iddd	œd
œgidœ}|S )a9  
    Converts the error JSON from AWS Lambda into a Sentry error event.
    This is not a full fletched event, but better than nothing.

    This is an example of where AWS creates the error JSON:
    https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/2.2.1/awslambdaric/bootstrap.py#L479
    ÚerrorÚvaluesÚ	errorTypeÚerrorMessagerî   Ú
stackTracer!   Fr"   )r#   ÚvalueÚ
stacktracer'   )ÚlevelÚ	exception)r`   ró   )Ú
error_jsonÚevents     r<   r4   r4   Ò  sj   € ð àà&ŸN™N¨;Ó7Ø'Ÿ^™^¨NÓ;à Ô"<Ø&ŸN™N¨<¸Ó<ó#ð#ð !-Ø#(ñ"ñðð
ñ€Eð* €Lr@   )7ro   r5   rç   r/   Úcopyr   r   r   r   Úosr   r+   Úsentry_sdk.apir   Úsentry_sdk.constsr	   Úsentry_sdk.scoper
   Úsentry_sdk.tracingr   Úsentry_sdk.utilsr   r   r   r   r   r   r   Úsentry_sdk.integrationsr   Ú$sentry_sdk.integrations._wsgi_commonr   Útypingr   r   r   r   r   Úsentry_sdk._typesr   r   r   r   r]   r^   r?   rq   ru   r>   r‘   rX   rÄ   rÁ   ró   r4   r�   r@   r<   ú<module>r     sÀ   ðÛ Û Û 	Û 
Ý ß 2Ñ 2Ý ã Ý )Ý  Ý 4Ý ;÷÷ ñ õ 0Ý @å  áÝÝÝÝç=Ñ=á�˜8 C¨ HÑ-Ô.€Að Ð ØÐ òò:jòZôa˜;ô aòH"òJAòH?òò@ó,r@   