
    lh"F                        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)TransactionSource)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                  ||       nJ| d   }t        |t              rt        j                  |      }t        |      }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
isinstancestrjsonloads_event_from_error_json)argskwargsclientr0   sentry_eventr)   
error_info
init_errors          t/var/www/pru.catia.catastroantioquia-mas.com/tasa/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 "!W
j#.!%J!7J5jA((6%	7( 4*6**)	7 	7s   CC44C=)r   AwsLambdaIntegration)r>   r@   s   ` r?   _wrap_init_errorrB   +   s&     4jA+ B+4     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        j8                  t        j:                  
      }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 tC        jD                         }tG        ||jH                  ddd      \  }}t        jJ                  ||       tM        |  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_integrationrA   r4   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   	COMPONENTrO   start_transactionstop	Exceptionr/   r0   r   r2   r3   r   )rP   rQ   r9   r:   r;   integrationrequest_datarJ   configured_timescopetimeout_threadwaiting_timerK   transactionr0   r<   r)   handlers                    r?   sentry_handlerz%_wrap_handler.<locals>.sentry_handlerM   s    &&(,,-AB9kCDCFCCi&3y>Q+>$Q<LYJ$LJ,- L%BBD'') C	.U!N,. +'')))1$k?
  +"B"B"H"H"Ma"P >MM/48MM,
;
  //'*@@ (*@@)$*L &3$'*;;&N #((*=+@ #&&y"5G gt,(?? ..(22+22K --!*#.) .."9kKDKFK &&++-). ._C	. C	.+ +l ! '"||~H)= '-~~+7E"J*&L$
 ,,\EX&' '%&++- &&++- &'. . ._C	. C	. C	.s{   #K/0CH9<B
K/KIK&	K/9I	>K/AJ"J9!J""J9&K9KK	K/K#	K//K8)	functoolswraps)rp   rq   s   ` r?   _wrap_handlerrt   K   s)    __We. e.N rC   c                      t               5  t        j                         } | j                  t              }|| j                          d d d        y # 1 sw Y   y xY wN)r   r+   r,   rS   rA   flush)r;   ri   s     r?   _drain_queuerx      sM    	$	& &&(,,-AB" LLN  s   <AAc                   2    e Zd ZdZde ZddZed        Zy)rA   r!   zauto.function.c                     || _         y rv   )r^   )selfr^   s     r?   __init__zAwsLambdaIntegration.__init__   s
    .rC   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 rv   rt   )request_handlerr9   r:   old_handle_event_requests      r?   sentry_handle_event_requestzDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_request   s"    "/"@/Q$Q&QQrC   c                 2    t        |       }  | g|i |S rv   r   )r   r9   r:   old_handle_http_requests      r?   sentry_handle_http_requestzCAwsLambdaIntegration.setup_once.<locals>.sentry_handle_http_request   s"    "/"@.PPPPrC   c                  (    t                 | i |S rv   rx   )r9   r:   old_to_jsons     r?   sentry_to_jsonz7AwsLambdaIntegration.setup_once.<locals>.sentry_to_json   s    "D3F33rC   c                 4    t        |      } | |g|i |S rv   r   )lambda_runtime_clientr   r9   r:   r   s       r?   r   zDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_request  s1     #0"@/)?=AEK rC   c                       fd}|S )Nc                  (    t                 | i |S rv   r   )r9   r:   fs     r?   innerzKAwsLambdaIntegration.setup_once.<locals>._wrap_post_function.<locals>.inner  s     Nd-f--rC    )r   r   s   ` r?   _wrap_post_functionz<AwsLambdaIntegration.setup_once.<locals>._wrap_post_function  s    .
 rC   )get_lambda_bootstrapr   warninghasattrr~   r   to_jsonrB   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NNR ')?@NNV )+@A'7'L'L$R
 5P1&6&J&J#Q
 4N0
 +22K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FrC   N)F)__name__
__module____qualname__
identifierrO   r|   staticmethodr   r   rC   r?   rA   rA      s.    Jj\*F/ X XrC   rA   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    $ ckk!{{;''	s{{	"Z(6-.7##[4
 **444V[)### rC   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)rd   function_versionr\   aws_request_idexecution_duration_in_millisremaining_time_in_millislambda)url	log_group
log_streamzcloudwatch logsrequest
httpMethodmethodr   queryStringParametersquery_stringrK   useridentityuserArnidsourceIp
ip_addressbody data)rW   
setdefaultrd   r   r\   r   _get_cloudwatch_logs_urllog_group_namelog_stream_namerb   _get_urlr   r
   r   removed_because_raw_datar   )r<   r)   
start_timeremaining_time_in_milisexec_durationr   r   	user_infor   r   iprQ   rP   configured_timeouts              r?   event_processorz6_make_request_event_processor.<locals>.event_processorP  s   "-"J"J"L*-DD''4(66 + < <$/$D$D)88,9(?
h ,KD$33%55$
  ""9b19$ ), 7GH!)[9"i/&/0G&HGN#	!!091E!FGI"$$//;I }}Z0Hi(B~$$T2.j)B~$$\26""+--";}}VT* #1"I"I"K"*7"3YrC   )r   nowr   utc)rP   rQ   r   r   r   s   ```  r?   rZ   rZ   L  s&    hll+J7A ;z rC   c                     | j                  dd       }| j                  d      }|i }|j                  dd       }|j                  dd       }|r|r|rdj                  |||      S dj                  |j                        S )NpathrK   HostzX-Forwarded-Protoz	{}://{}{}zawslambda:///{})rb   formatrd   )rP   rQ   r   rK   hostprotos         r?   r   r     s~    ==&DmmI&G;;vt$DKK+T2E$!!%t44##K$=$=>>rC   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   zhttps://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   rb   r   
startswithr   r   r   strftimer   r   r   r   )rQ   r   formatstringr   r   s        r?   r   r     s     (L[[r*F	- f!'!2!25!9~?O,,..1!55??M,,x||,y/CCMM
  		  JrC   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 <ekkmL05-I{Ik*KMM ) )) #'$($(
  MrC   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)rb   r   )
error_jsonevents     r?   r8   r8     sj     &NN;7'^^N; "<&NN<<## !-#("
E* LrC   )7rr   r6   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`   rB   rt   rx   rA   r   rZ   r   r   r   r8   r   rC   r?   <module>r     s      	 
  2 2   )   4 0   0 @  ==8CH-.A   @jZa; aH"JAH?@,rC   