
    \je                        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	 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*d       Zddde de!fdZ" G d d      Z#ddde!fdZ$	 d+dd d!e!dd"fd#Z%d$e&d%d&de!fd'Z' G d( d)      Z(y# e$ r dZY w xY w),    )contextmanagerN)deepcopy)SENSITIVE_DATA_SUBSTITUTE)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_PROXY_AUTHORIZATIONHTTP_X_API_KEYr   HTTP_X_REAL_IPc              #   \   K   | ]$  }|j                  d       s|t        d       d  & yw)HTTP_N)
startswithlen).0xs     N/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>r#   (   s+      Q\\'5JAc'lns   ,,)CONNECTDELETEGETPATCHPOSTPUTTRACEreturnc               #      K   d  y wN r.       r"   nullcontextr0   :   s	     	s   clientz&Optional[sentry_sdk.client.BaseClient]content_lengthc                 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)r1   r2   bodiess      r"   request_body_within_boundsr:   ?   s[     ~^^34F' 	;g8.5"8	;h9>E#9 r/   c                       e Zd ZdZddZddZdefdZddZdd	Z	dd
Z
ddZdefdZddZddZdddefdZddZy)RequestExtractorz,
    Base class for request extraction.
    r   r+   Nc                     || _         y r-   )request)selfr>   s     r"   __init__zRequestExtractor.__init__W   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_activer2   getr   dictrB   r:   r   removed_because_over_size_limitraw_datar	   
ValueErrorparsed_bodyremoved_because_raw_datar   )r?   eventr1   rC   r2   request_inforJ   rL   s           r"   extract_into_eventz#RequestExtractor.extract_into_eventZ   s    &&(!BF,,.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envrG   rK   r?   s    r"   r2   zRequestExtractor.content_length   s6    	txxz~~&6:;; 		s   (+ 	77c                     t               r-   NotImplementedErrorrU   s    r"   rB   zRequestExtractor.cookies       !##r/   c                     t               r-   rW   rU   s    r"   rJ   zRequestExtractor.raw_data   rY   r/   c                     t               r-   rW   rU   s    r"   formzRequestExtractor.form   rY   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-   )	r\   	ExceptionfilesrH   itemskeysr   rM   json)r?   r\   r_   rC   keys        r"   rL   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_typerT   rG   rU   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)	rg   rJ   r	   rK   
isinstancestrrb   loadsdecode)r?   rJ   s     r"   rb   zRequestExtractor.json   s    	<<> ==? (C(zz(++zz(//'":;; )*5       		s>   B A0 B $B #B 0BB BB 	BBc                     t               r-   rW   rU   s    r"   r_   zRequestExtractor.files   rY   r/   filec                     t               r-   rW   )r?   rn   s     r"   size_of_filezRequestExtractor.size_of_file   rY   r/   c                     t               r-   rW   rU   s    r"   rT   zRequestExtractor.env   rY   r/   )r>   r   r+   N)rN   r   r+   N)r+   zMutableMapping[str, Any])r+   zOptional[Union[str, bytes]])r+   zOptional[Dict[str, Any]])r+   zOptional[Any])r+   zDict[str, Any])__name__
__module____qualname____doc__r@   rP   rS   r2   rB   rJ   r\   rL   boolrg   rb   r_   rp   rT   r.   r/   r"   r<   r<   M   sb    '2R $$$,E E0$$ $3 $$r/   r<   ctzOptional[str]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)rw   mts     r"   rf   rf      sM    
(		#q	!!	$B
   	!MM.) !KK r/   headerszMapping[str, str]use_annotated_valuez(Mapping[str, Union[AnnotatedValue, str]]c           	          t               r| S |rt        j                         }nt        }| j	                         D ci c]0  \  }}||j                         j                  dd      t        vr|n|2 c}}S c c}}w )N-_)r   r   rI   r   r`   upperreplaceSENSITIVE_HEADERS)r   r   
substitutekvs        r"   _filter_headersr      su       #CCE
.
 MMOAq 	
""3,4EEA:U  s   5A6codecode_rangeslist[HttpStatusCodeRange]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)ri   rS   	TypeErrorr   warning)r   r   targets      r"   _in_http_status_code_ranger      sc      fc"v~	v~    	NNX	s   (A	A	c                   (    e Zd ZdZddZdedef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.
    r+   Nc                     || _         y r-   )_code_ranges)r?   r   s     r"   r@   zHttpCodeRangeContainer.__init__  s
    'r/   itemc                 .    t        || j                        S r-   )r   r   )r?   r   s     r"   __contains__z#HttpCodeRangeContainer.__contains__  s    )$0A0ABBr/   )r   r   r+   N)rr   rs   rt   ru   r@   objectrv   r   r.   r/   r"   r   r      s"    
(C CD Cr/   r   )r+   zIterator[None])T))
contextlibr   rb   copyr   rD   sentry_sdk._typesr   sentry_sdk.scoper   sentry_sdk.utilsr   r   django.http.requestr	   ImportErrortypingr
   r   r   r   r   r   r   r   r   r   SENSITIVE_ENV_KEYStupler   DEFAULT_HTTP_METHODS_TO_CAPTUREr0   rS   rv   r:   r<   rf   r   r   r   r   r.   r/   r"   <module>r      s"   %    7 4 3 8 !%<
   1  
#  
 
4FI	}$ }$@o $  !%  0&
:	(
C 
Cc    s   C CC