
    tnir                        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 n# e$ r dZY nw xY w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"Z$d#e%d$d%de fd&Z& G d' d(          Z'dS )+    )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              #   n   K   | ]0}|                     d           |t          d           d         V  1dS )HTTP_N)
startswithlen).0xs     a/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>r!   &   sV        Q\\'5J5Jc'llnn         )CONNECTDELETEGETPATCHPOSTPUTTRACEreturnIterator[None]c               #      K   d V  d S N r.   r"   r    nullcontextr/   8   s      	EEEEEr"   clientz&Optional[sentry_sdk.client.BaseClient]content_lengthc                 b    | dS | j         d         }|dk    p|dk    o|dk    p|dk    o|dk     S )NFmax_request_body_sizeneversmalli  mediumi'  )options)r0   r1   bodiess      r    request_body_within_boundsr9   =   s[     ~u^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dS )!RequestExtractorz,
    Base class for request extraction.
    requestr
   r*   Nc                     || _         d S r-   )r<   )selfr<   s     r    __init__zRequestExtractor.__init__U   s    r"   eventr   c                 N   t          j                    }|                                sd S d }|                                 }|                    di           }t                      r$t          |                                           |d<   t          ||          st          j
                    }n`d }	 |                                 }n# t          t          f$ r Y nw xY w|                                 }||}n|rt          j                    }nd }|||d<   t!          |          |d<   d S )Nr<   cookiesdata)
sentry_sdk
get_client	is_activer1   getr   dictrB   r9   r   removed_because_over_size_limitraw_datar   
ValueErrorparsed_bodyremoved_because_raw_datar   )r>   r@   r0   rC   r1   request_inforJ   rL   s           r    extract_into_eventz#RequestExtractor.extract_into_eventX   sC   &((!! 	FBF,,..yyB//"$$ 	;&*4<<>>&:&:L#)&.AA 	!ACCDD H==??(*5    
 **,,K&" %>@@#'L #L11is   /C CCc                     	 t          |                                                     dd                    S # t          $ r Y dS w xY w)NCONTENT_LENGTHr   )intenvrG   rK   r>   s    r    r1   zRequestExtractor.content_length   sN    	txxzz~~&6::;;; 	 	 	11	s   47 
AAMutableMapping[str, Any]c                     t                      r-   NotImplementedErrorrT   s    r    rB   zRequestExtractor.cookies       !###r"   Optional[Union[str, bytes]]c                     t                      r-   rW   rT   s    r    rJ   zRequestExtractor.raw_data   rY   r"   Optional[Dict[str, Any]]c                     t                      r-   rW   rT   s    r    formzRequestExtractor.form   rY   r"   c                 ~   	 |                                  }n# t          $ r d }Y nw xY w	 |                                 }n# t          $ r d }Y nw xY w|s|rVi }|r!t          |                                          }|r-|                                D ]}t          j                    ||<   |S |                                 S r-   )	r^   	ExceptionfilesrH   itemskeysr   rM   json)r>   r^   ra   rC   keys        r    rL   zRequestExtractor.parsed_body   s    	99;;DD 	 	 	DDD		JJLLEE 	 	 	EEE	  	5 	D *DJJLL)) J ::<< J JC . G I IDIIKyy{{s    &&? AAc                 j    t          |                                                     d                    S )NCONTENT_TYPE)_is_json_content_typerS   rG   rT   s    r    is_jsonzRequestExtractor.is_json   s$    $TXXZZ^^N%C%CDDDr"   Optional[Any]c                 Z   	 |                                  sd S 	 |                                 }n# t          t          f$ r d }Y nw xY w|d S t	          |t
                    rt          j        |          S t          j        |                    d                    S # t          $ r Y nw xY wd S )Nzutf-8)	ri   rJ   r   rK   
isinstancestrrd   loadsdecode)r>   rJ   s     r    rd   zRequestExtractor.json   s    	<<>> t ==??(*5         
 t(C(( <z(+++z(//'":":;;; 	 	 	D	 ts=   B . B AB AB (B 4&B 
B('B(c                     t                      r-   rW   rT   s    r    ra   zRequestExtractor.files   rY   r"   filec                     t                      r-   rW   )r>   rq   s     r    size_of_filezRequestExtractor.size_of_file   rY   r"   Dict[str, Any]c                     t                      r-   rW   rT   s    r    rS   zRequestExtractor.env   rY   r"   )r<   r
   r*   N)r@   r   r*   N)r*   rU   )r*   rZ   )r*   r\   )r*   rj   )r*   rt   )__name__
__module____qualname____doc__r?   rO   rR   r1   rB   rJ   r^   rL   boolri   rd   ra   rs   rS   r.   r"   r    r;   r;   K   s0           '2 '2 '2 '2R    $ $ $ $$ $ $ $$ $ $ $   ,E E E E E   0$ $ $ $$ $3 $ $ $ $$ $ $ $ $ $r"   r;   ctzOptional[str]c                     | pd                     dd          d         }|dk    p)|                    d          o|                    d          S )N ;   r   zapplication/jsonzapplication/z+json)splitr   endswith)r{   mts     r    rh   rh      sV    
(		#q	!	!!	$B
   	!MM.)) !KK  r"   headersMapping[str, str](Mapping[str, Union[AnnotatedValue, str]]c                 ^    t                      r| S d |                                 D             S )Nc                     i | ]J\  }}||                                                     d d          t          vr|nt          j                    KS )-_)upperreplaceSENSITIVE_HEADERSr   rI   )r   kvs      r    
<dictcomp>z#_filter_headers.<locals>.<dictcomp>   se        Aq 	
wwyy  c**2CCC A?AA	  r"   )r   rb   )r   s    r    _filter_headersr      sB          MMOO   r"   codecode_rangeslist[HttpStatusCodeRange]c                     |D ]M}t          |t                    r
| |k    r dS !	 | |v r dS *# t          $ r t          j        d           Y Jw xY wdS )NTzFfailed_request_status_codes has to be a list of integers or containersF)rl   rR   	TypeErrorr   warning)r   r   targets      r    _in_http_status_code_ranger      s       fc"" 	v~~tt	v~~tt  	 	 	NX    	
 5s   -AAc                   *    e Zd ZdZd	dZdedefdZdS )
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   r   r*   Nc                     || _         d S 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    )$0ABBBr"   )r   r   r*   N)rv   rw   rx   ry   r?   objectrz   r   r.   r"   r    r   r      s\         
( ( ( (C CD C C C C C Cr"   r   )r*   r+   )r   r   r*   r   )(
contextlibr   rd   copyr   rD   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/   rR   rz   r9   r;   rh   r   r   r   r   r.   r"   r    <module>r      s   % % % % % %            4 4 4 4 4 4 3 3 3 3 3 3 3 3 8888888        !           =%%%%%%<<<<<<<<	  E  1     
#  
 
 
 
4FI	   }$ }$ }$ }$ }$ }$ }$ }$@o $     /    
:	   (
C 
C 
C 
C 
C 
C 
C 
C 
C 
Cs   + 55