o
    ir                     @   sx  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
 zd dlmZ W n ey5   dZY nw d dlmZ erpd 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d eD ZdZed/ddZdddede fddZ!G dd dZ"dd de fd!d"Z#	#	$		%d0d&d'Z$d(e%d)d*de fd+d,Z&G d-d. d.Z'dS )1    )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                 c   s*    | ]}| d r|td d V  qdS )HTTP_N)
startswithlen).0x r   a/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>&   s    

r    )CONNECTDELETEGETPATCHPOSTPUTTRACEreturnIterator[None]c                   c   s    d V  d S Nr   r   r   r   r   nullcontext8   s   
r+   clientz&Optional[sentry_sdk.client.BaseClient]content_lengthc                 C   s@   | d u r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)r,   r-   bodiesr   r   r   request_body_within_bounds=   s   
r4   c                   @   s   e Zd ZdZd&ddZd'd
dZdefddZd(ddZd)ddZ	d*ddZ
d*ddZdefddZd+ddZd*ddZd ddefd!d"Zd,d$d%ZdS )-RequestExtractorz,
    Base class for request extraction.
    requestr	   r(   Nc                 C   
   || _ d S r*   )r6   )selfr6   r   r   r   __init__U      
zRequestExtractor.__init__eventr   c              	   C   s   t  }| s
d S d }|  }|di }t r!t|  |d< t||s+t	
 }n(d }z|  }W n ttfy>   Y nw |  }|d urJ|}n	|rQt	 }nd }|d ur[||d< t||d< d S )Nr6   cookiesdata)
sentry_sdk
get_client	is_activer-   getr   dictr<   r4   r   removed_because_over_size_limitraw_datar   
ValueErrorparsed_bodyremoved_because_raw_datar   )r8   r;   r,   r=   r-   request_inforD   rF   r   r   r   extract_into_eventX   s2   


z#RequestExtractor.extract_into_eventc                 C   s,   zt |  ddW S  ty   Y dS w )NCONTENT_LENGTHr   )intenvrA   rE   r8   r   r   r   r-      s
   zRequestExtractor.content_lengthMutableMapping[str, Any]c                 C      t  r*   NotImplementedErrorrM   r   r   r   r<         zRequestExtractor.cookiesOptional[Union[str, bytes]]c                 C   rO   r*   rP   rM   r   r   r   rD      rR   zRequestExtractor.raw_dataOptional[Dict[str, Any]]c                 C   rO   r*   rP   rM   r   r   r   form   rR   zRequestExtractor.formc                 C   s   z|   }W n ty   d }Y nw z|  }W n ty#   d }Y nw |s(|rCi }|r2t| }|rA| D ]}t ||< q8|S |  S r*   )	rU   	ExceptionfilesrB   itemskeysr   rG   json)r8   rU   rW   r=   keyr   r   r   rF      s&   zRequestExtractor.parsed_bodyc                 C   s   t |  dS )NCONTENT_TYPE)_is_json_content_typerL   rA   rM   r   r   r   is_json   s   zRequestExtractor.is_jsonOptional[Any]c              	   C   s   z6|   sW d S z|  }W n ttfy   d }Y nw |d u r#W d S t|tr.t|W S t|dW S  ty@   Y d S w )Nzutf-8)	r^   rD   r   rE   
isinstancestrrZ   loadsdecode)r8   rD   r   r   r   rZ      s"   
zRequestExtractor.jsonc                 C   rO   r*   rP   rM   r   r   r   rW      rR   zRequestExtractor.filesfilec                 C   rO   r*   rP   )r8   rd   r   r   r   size_of_file   rR   zRequestExtractor.size_of_fileDict[str, Any]c                 C   rO   r*   rP   rM   r   r   r   rL      rR   zRequestExtractor.env)r6   r	   r(   N)r;   r   r(   N)r(   rN   )r(   rS   )r(   rT   )r(   r_   )r(   rf   )__name__
__module____qualname____doc__r9   rI   rK   r-   r<   rD   rU   rF   boolr^   rZ   rW   re   rL   r   r   r   r   r5   K   s    
	
)





r5   ctzOptional[str]c                 C   s0   | pd ddd }|dkp|do|dS )N ;   r   zapplication/jsonzapplication/z+json)splitr   endswith)rl   mtr   r   r   r]      s
   
r]   headersMapping[str, str](Mapping[str, Union[AnnotatedValue, str]]c                 C   s   t  r| S dd |  D S )Nc                 S   s2   i | ]\}}||  d dtvr|nt qS )-_)upperreplaceSENSITIVE_HEADERSr   rC   )r   kvr   r   r   
<dictcomp>   s    z#_filter_headers.<locals>.<dictcomp>)r   rX   )rs   r   r   r   _filter_headers   s
   r~   codecode_rangeslist[HttpStatusCodeRange]c              	   C   sX   |D ]'}t |tr| |kr dS qz
| |v rW  dS W q ty)   td Y qw dS )NTzFfailed_request_status_codes has to be a list of integers or containersF)r`   rK   	TypeErrorr   warning)r   r   targetr   r   r   _in_http_status_code_range   s   
r   c                   @   s,   e Zd ZdZdddZdedefd	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                 C   r7   r*   )_code_ranges)r8   r   r   r   r   r9      r:   zHttpCodeRangeContainer.__init__itemc                 C   s   t || jS r*   )r   r   )r8   r   r   r   r   __contains__  s   z#HttpCodeRangeContainer.__contains__)r   r   r(   N)rg   rh   ri   rj   r9   objectrk   r   r   r   r   r   r      s    
r   )r(   r)   )rs   rt   r(   ru   )(
contextlibr   rZ   copyr   r>   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tuplerz   DEFAULT_HTTP_METHODS_TO_CAPTUREr+   rK   rk   r4   r5   r]   r~   r   r   r   r   r   r   r   <module>   sf    
 	

