o
    h                     @   sF  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 Zdd ZG dd dZ dd Z!dd Z"dd Z#G d 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                 c   s*    | ]}| d r|td d V  qdS )HTTP_N)
startswithlen).0x r   f/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>&   s    

r    )CONNECTDELETEGETPATCHPOSTPUTTRACEc                   c   s    d V  d S Nr   r   r   r   r   nullcontext8   s   
r)   c                 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)clientcontent_lengthbodiesr   r   r   request_body_within_bounds>   s   
r2   c                   @   sp   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )RequestExtractorz,
    Base class for request extraction.
    c                 C   
   || _ d S r(   )request)selfr5   r   r   r   __init__U      
zRequestExtractor.__init__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 )Nr5   cookiesdata)
sentry_sdk
get_client	is_activer0   getr   dictr9   r2   r   removed_because_over_size_limitraw_datar   
ValueErrorparsed_bodyremoved_because_raw_datar   )r6   eventr/   r:   r0   request_inforA   rC   r   r   r   extract_into_eventY   s2   


z#RequestExtractor.extract_into_eventc                 C   s,   zt |  ddW S  ty   Y dS w )NCONTENT_LENGTHr   )intenvr>   rB   r6   r   r   r   r0      s
   zRequestExtractor.content_lengthc                 C      t  r(   NotImplementedErrorrK   r   r   r   r9         zRequestExtractor.cookiesc                 C   rL   r(   rM   rK   r   r   r   rA      rO   zRequestExtractor.raw_datac                 C   rL   r(   rM   rK   r   r   r   form   rO   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(   )	rP   	Exceptionfilesr?   itemskeysr   rD   json)r6   rP   rR   r:   keyr   r   r   rC      s&   zRequestExtractor.parsed_bodyc                 C   s   t |  dS )NCONTENT_TYPE)_is_json_content_typerJ   r>   rK   r   r   r   is_json   s   zRequestExtractor.is_jsonc              	   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)	rY   rA   r   rB   
isinstancestrrU   loadsdecode)r6   rA   r   r   r   rU      s"   
zRequestExtractor.jsonc                 C   rL   r(   rM   rK   r   r   r   rR      rO   zRequestExtractor.filesc                 C   rL   r(   rM   )r6   filer   r   r   size_of_file   rO   zRequestExtractor.size_of_filec                 C   rL   r(   rM   rK   r   r   r   rJ      rO   zRequestExtractor.envN)__name__
__module____qualname____doc__r7   rG   r0   r9   rA   rP   rC   rY   rU   rR   r_   rJ   r   r   r   r   r3   K   s    	*r3   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)ctmtr   r   r   rX      s
   
rX   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   r@   )r   kvr   r   r   
<dictcomp>   s    z#_filter_headers.<locals>.<dictcomp>)r   rS   )headersr   r   r   _filter_headers   s
   rt   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)rZ   rI   	TypeErrorr   warning)codecode_rangestargetr   r   r   _in_http_status_code_range   s   
rz   c                   @   s    e Zd ZdZdd Z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.
    c                 C   r4   r(   )_code_ranges)r6   rx   r   r   r   r7   	  r8   zHttpCodeRangeContainer.__init__c                 C   s   t || jS r(   )rz   r|   )r6   itemr   r   r   __contains__  s   z#HttpCodeRangeContainer.__contains__N)r`   ra   rb   rc   r7   r~   r   r   r   r   r{     s    r{   )%
contextlibr   rU   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tuplero   DEFAULT_HTTP_METHODS_TO_CAPTUREr)   r2   r3   rX   rt   rz   r{   r   r   r   r   <module>   sF    
 
