
    lh                     Z   d dl mZ d dlZd dlmZ d dlZd dlmZ d dlm	Z	m
Z
 	 d dlmZ d dlmZ er2d 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 d dlmZmZ dZ ed eD              ZdZed        Zd Z G d d      Z d Z!d Z"d Z# G d d      Z$y# e$ r dZY w xY w)    )contextmanagerN)deepcopy)should_send_default_pii)AnnotatedValuelogger)RawPostDataException)TYPE_CHECKING)Any)Dict)Iterator)Mapping)MutableMapping)Optional)Union)EventHttpStatusCodeRange)REMOTE_ADDRHTTP_X_FORWARDED_FORHTTP_SET_COOKIEHTTP_COOKIEHTTP_AUTHORIZATIONHTTP_X_API_KEYr   HTTP_X_REAL_IPc              #   \   K   | ]$  }|j                  d       s|t        d       d  & yw)HTTP_N)
startswithlen).0xs     v/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>r!   &   s+      Q\\'5JAc'lns   ,,)CONNECTDELETEGETPATCHPOSTPUTTRACEc               #      K   d  y wN r+       r    nullcontextr-   8   s      
s   c                 j    | y| j                   d   }|dk(  xs |dk(  xr |dkD  xs |dk(  xr |dkD   S )NFmax_request_body_sizeneversmalli  mediumi'  )options)clientcontent_lengthbodiess      r    request_body_within_boundsr7   >   sY    ~^^34F' 	;g8.5"8	;h9>E#9 r,   c                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)RequestExtractorz,
    Base class for request extraction.
    c                     || _         y r*   )request)selfr;   s     r    __init__zRequestExtractor.__init__U   s	    r,   c                    t        j                         }|j                         sy d }| j                         }|j	                  di       }t               rt        | j                               |d<   t        ||      st        j                         }nAd }	 | j                         }| j                         }||}n|rt        j                         }nd }|||d<   t!        |      |d<   y # t        t        f$ r Y Uw xY w)Nr;   cookiesdata)
sentry_sdk
get_client	is_activer5   getr   dictr?   r7   r   removed_because_over_size_limitraw_datar   
ValueErrorparsed_bodyremoved_because_raw_datar   )r<   eventr4   r@   r5   request_inforG   rI   s           r    extract_into_eventz#RequestExtractor.extract_into_eventY   s    &&(!,,.yyB/"$&*4<<>&:L#)&.A!AACD H==? **,K&"%>>@#'L #L1i! )*5  s   C( (C:9C:c                 t    	 t        | j                         j                  dd            S # t        $ r Y yw xY w)NCONTENT_LENGTHr   )intenvrD   rH   r<   s    r    r5   zRequestExtractor.content_length   s6    	txxz~~&6:;; 		s   (+ 	77c                     t               r*   NotImplementedErrorrR   s    r    r?   zRequestExtractor.cookies       !##r,   c                     t               r*   rT   rR   s    r    rG   zRequestExtractor.raw_data   rV   r,   c                     t               r*   rT   rR   s    r    formzRequestExtractor.form   rV   r,   c                 L   	 | j                         }	 | j                         }|s|rMi }|rt        |j	                               }|r,|j                         D ]  }t        j                         ||<    |S | j                         S # t        $ r d }Y w xY w# t        $ r d }Y w xY wr*   )	rY   	ExceptionfilesrE   itemskeysr   rJ   json)r<   rY   r\   r@   keys        r    rI   zRequestExtractor.parsed_body   s    	99;D	JJLE 5DDJJL) ::< JC . G G IDIJ Kyy{#  	D	  	E	s"   B B BBB#"B#c                 R    t        | j                         j                  d            S )NCONTENT_TYPE)_is_json_content_typerQ   rD   rR   s    r    is_jsonzRequestExtractor.is_json   s    $TXXZ^^N%CDDr,   c                 ,   	 | j                         sy 	 | j                         }|y t	        |t
              rt        j                  |      S t        j                  |j                  d            S # t        t        f$ r d }Y _w xY w# t        $ r Y y w xY w)Nzutf-8)	rd   rG   r   rH   
isinstancestrr_   loadsdecode)r<   rG   s     r    r_   zRequestExtractor.json   s    	<<> ==? (C(zz(++zz(//'":;; )*5       		s>   B A0 B $B #B 0BB BB 	BBc                     t               r*   rT   rR   s    r    r\   zRequestExtractor.files   rV   r,   c                     t               r*   rT   )r<   files     r    size_of_filezRequestExtractor.size_of_file   rV   r,   c                     t               r*   rT   rR   s    r    rQ   zRequestExtractor.env   rV   r,   N)__name__
__module____qualname____doc__r=   rM   r5   r?   rG   rY   rI   rd   r_   r\   rm   rQ   r+   r,   r    r9   r9   K   sE    (2T$$$.E2$$$r,   r9   c                     | xs dj                  dd      d   }|dk(  xs$ |j                  d      xr |j                  d      S )N ;   r   zapplication/jsonzapplication/z+json)splitr   endswith)ctmts     r    rc   rc      sM    
(		#q	!!	$B
   	!MM.) !KK r,   c           	          t               r| S | j                         D ci c]B  \  }}||j                         j                  dd      t        vr|nt        j                         D c}}S c c}}w )N-_)r   r]   upperreplaceSENSITIVE_HEADERSr   rF   )headerskvs      r    _filter_headersr      sn      MMO Aq 	
wwy  c*2CC ??A	B  s   AA+c                     |D ]!  }t        |t              r| |k(  r y	 | |v r y# y# t        $ r t        j                  d       Y Ew xY w)NTzFfailed_request_status_codes has to be a list of integers or containersF)rf   rP   	TypeErrorr   warning)codecode_rangestargets      r    _in_http_status_code_ranger      sa     fc"v~	v~    	NNX	s   (A	A	c                       e Zd ZdZd Zd Zy)HttpCodeRangeContainerz
    Wrapper to make it possible to use list[HttpStatusCodeRange] as a Container[int].
    Used for backwards compatibility with the old `failed_request_status_codes` option.
    c                     || _         y r*   )_code_ranges)r<   r   s     r    r=   zHttpCodeRangeContainer.__init__	  s
    'r,   c                 .    t        || j                        S r*   )r   r   )r<   items     r    __contains__z#HttpCodeRangeContainer.__contains__  s    )$0A0ABBr,   N)ro   rp   rq   rr   r=   r   r+   r,   r    r   r     s    
(Cr,   r   )%
contextlibr   r_   copyr   rA   sentry_sdk.scoper   sentry_sdk.utilsr   r   django.http.requestr   ImportErrortypingr	   r
   r   r   r   r   r   r   sentry_sdk._typesr   r   SENSITIVE_ENV_KEYStupler   DEFAULT_HTTP_METHODS_TO_CAPTUREr-   r7   r9   rc   r   r   r   r+   r,   r    <module>r      s    %    4 3 8 !%<	   1  
#  
 


I$ I$X&C Cq    s   B   B*)B*