Ë
    çÞËjþ  ã                   ó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     úa/var/www/photos/backend/venv/lib/python3.12/site-packages/sentry_sdk/integrations/_wsgi_common.pyú	<genexpr>r!   &   s+   è ø€ ò Ø°Q·\±\À'Õ5J€A„cˆ'ƒl€nÔñù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Ñ4€Fà�'Ñò 	;Ø�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÷   € ä×&Ñ&Ó(ˆØ×ÑÔ!Øàˆà×,Ñ,Ó.ˆØ—y‘y ¨BÓ/ˆä"Ô$Ü&*¨4¯<©<«>Ó&:ˆL˜Ñ#ä)¨&°.ÔAÜ!×AÑAÓC‰Dð ˆ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   € ð	Ü�t—x‘x“z—~‘~Ð&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                 ó  — | j                  «       }| j                  «       }|s|rMi }|rt        |j                  «       «      }|r,|j	                  «       D ]  }t        j                  «       ||<   Œ |S | j                  «       S r*   )rY   ÚfilesrE   ÚitemsÚkeysr   rJ   Újson)r<   rY   r[   r@   Úkeys        r    rI   zRequestExtractor.parsed_body–   st   € à�y‰y‹{ˆØ—
‘
“ˆÙ‘5ØˆDÙÜ˜DŸJ™J›LÓ)�ÙØ Ÿ:™:›<ò J�CÜ .× GÑ GÓ I�D˜’IðJð ˆKà�y‰y‹{Ðr,   c                 óR   — t        | j                  «       j                  d«      «      S )NÚCONTENT_TYPE)Ú_is_json_content_typerQ   rD   rR   s    r    Úis_jsonzRequestExtractor.is_json¦   s   € ä$ T§X¡X£Z§^¡^°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)	rc   rG   r   rH   Ú
isinstanceÚstrr^   ÚloadsÚdecode)r<   rG   s     r    r^   zRequestExtractor.jsonª   s’   € ð	Ø—<‘<”>Øð ØŸ=™=›?�ð ÐØä˜(¤CÔ(Ü—z‘z (Ó+Ð+ä—z‘z (§/¡/°'Ó":Ó;Ð;øô )¬*Ð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   rc   r^   r[   rl   rQ   r+   r,   r    r9   r9   K   sE   „ ñòò(2òTò$ò$ò$òò 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    rb   rb   Ð   sM   € à
Š(�×	Ñ	˜#˜qÓ	! !Ñ	$€Bà
Ð Ñ ò 	!Ø�M‰M˜.Ó)ò !Ø�K‰K˜Ó ð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   € äÔ Øˆð —M‘M“O÷ñ ˆAˆqð 	
à�w‰w‹y× Ñ   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)re   rP   Ú	TypeErrorr   Úwarning)ÚcodeÚcode_rangesÚtargets      r    Ú_in_http_status_code_rangerŠ   é   sa   € àò ˆÜ�fœcÔ"Ø�vŠ~ÙØð	Ø�v‰~Ùð ðð øô ò 	Ü�N‰NØ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   € ä)¨$°×0AÑ0AÓBÐBr,   N)rn   ro   rp   rq   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   rb   rƒ   rŠ   rŒ   r+   r,   r    ú<module>r�      sÂ   ðÝ %Û Ý ã Ý 4ß 3ð Ý8õ !áÝÝÝÝÝ%ÝÝß<ð	Ð ñ ñ Ø1ôó Ð ð
#Ð ð ñ
ó ð
ò

÷B$ñ B$òJòò÷&Cò Cøðc ò  ØÒð ús   ¤B  Â B*Â)B*