§
    xÅj3"  ã                   óˆ  — 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	 d dl
mZmZmZ 	 d dlmZ eefZn# e$ r dZefZY nw xY wd dlmZ erd d	lmZmZmZmZmZmZ d d
lmZmZ dZ ed„ eD ¦   «         ¦  «        Z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)dS )%é    N)Údeepcopy)ÚSENSITIVE_DATA_SUBSTITUTE)Ú%_apply_key_value_collection_filtering)Úshould_send_default_pii)ÚAnnotatedValueÚhas_data_collection_enabledÚlogger)ÚRawPostDataException)ÚTYPE_CHECKING)ÚAnyÚDictÚ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              #   ón   K  — | ]0}|                      d ¦  «        ¯|t          d ¦  «        d…         V — Œ1dS )ÚHTTP_N)Ú
startswithÚlen)Ú.0Úxs     úUC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/_wsgi_common.pyú	<genexpr>r#   &   sV   è è € ð ð Ø°Q·\²\À'Ñ5JÔ5JðØ…cˆ'�l„l€n€nÔðð ð ð ð ð ó    )ÚCONNECTÚDELETEÚGETÚPATCHÚPOSTÚPUTÚTRACEÚclientz&Optional[sentry_sdk.client.BaseClient]Úcontent_lengthÚreturnc                 ó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)r,   r-   Úbodiess      r"   Úrequest_body_within_boundsr6   7   s[   € ð €~ØˆuàŒ^Ð3Ô4€Fà�'Òð 	;Ø�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 ©N)r9   )Úselfr9   s     r"   Ú__init__zRequestExtractor.__init__O   s   € ØˆŒˆˆr$   Úeventr   c                 ó,  — t          j        ¦   «         }|                     ¦   «         sd S d }|                      ¦   «         }|                     di ¦  «        }d}t          |j        ¦  «        r^t          t          |  	                    ¦   «         ¦  «        |j        d         d         ¬¦  «        }|r||d<   d|j        d         d         v }n2t          ¦   «         r$t          |  	                    ¦   «         ¦  «        |d<   |r}t          ||¦  «        st          j        ¦   «         }nYd }	 |                      ¦   «         }n# t          $ r Y nw xY w|                      ¦   «         }	|	�|	}n|rt          j        ¦   «         }nd }|�||d<   t%          |¦  «        |d<   d S )	Nr9   TÚdata_collectionÚcookies©ÚitemsÚ	behaviourÚincoming_requestÚhttp_bodiesÚdata)Ú
sentry_sdkÚ
get_clientÚ	is_activer-   Úgetr   r4   r   ÚdictrA   r   r6   r   Úremoved_because_over_size_limitÚraw_dataÚ_RAW_DATA_EXCEPTIONSÚparsed_bodyÚremoved_because_raw_datar   )
r<   r>   r,   rG   r-   Úrequest_infoÚattach_request_bodyrA   rN   rP   s
             r"   Úextract_into_eventz#RequestExtractor.extract_into_eventR   sÌ  € ÝÔ&Ñ(Ô(ˆØ×ÒÑ!Ô!ð 	ØˆFàBFˆà×,Ò,Ñ.Ô.ˆØ—y’y ¨BÑ/Ô/ˆð #Ðå& v¤~Ñ6Ô6ð 	;Ý;Ý˜4Ÿ<š<™>œ>Ñ*Ô*Ø œ.Ð):Ô;¸IÔFðñ ô ˆGð ð 2Ø*1�˜YÑ'ð # f¤nÐ5FÔ&GÈÔ&VÐVð  Ðõ %Ñ&Ô&ð 	;Ý&*¨4¯<ª<©>¬>Ñ&:Ô&:ˆL˜Ñ#àð 	 Ý-¨f°nÑEÔEð  Ý%ÔEÑGÔG��ð  �ðØ#Ÿ}š}™œ�H�HøÝ+ð ð ð ð �Dðøøøð
 #×.Ò.Ñ0Ô0�ØÐ*Ø&�D�DØð  Ý)ÔBÑDÔD�D�Dà�DàÐØ#'ˆL˜Ñ å# LÑ1Ô1ˆˆiÑÐÐs   Ä%D: Ä:
EÅEc                 ó�   — 	 t          |                      ¦   «                              dd¦  «        ¦  «        S # t          $ r Y dS w xY w)NÚCONTENT_LENGTHr   )ÚintÚenvrK   Ú
ValueError©r<   s    r"   r-   zRequestExtractor.content_length‹   sN   € ð	Ý�t—x’x‘z”z—~’~Ð&6¸Ñ:Ô:Ñ;Ô;Ð;øÝð 	ð 	ð 	Ø�1�1ð	øøøs   ‚47 ·
AÁAúMutableMapping[str, Any]c                 ó   — t          ¦   «         ‚r;   ©ÚNotImplementedErrorrZ   s    r"   rA   zRequestExtractor.cookies‘   ó   € Ý!Ñ#Ô#Ð#r$   úOptional[Union[str, bytes]]c                 ó   — t          ¦   «         ‚r;   r]   rZ   s    r"   rN   zRequestExtractor.raw_data”   r_   r$   úOptional[Dict[str, Any]]c                 ó   — t          ¦   «         ‚r;   r]   rZ   s    r"   ÚformzRequestExtractor.form—   r_   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;   )	rd   Ú	ExceptionÚfilesrL   rC   Úkeysr   rQ   Újson)r<   rd   rg   rG   Úkeys        r"   rP   zRequestExtractor.parsed_bodyš   sî   € ð	Ø—9’9‘;”;ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøð	Ø—J’J‘L”LˆEˆEøÝð 	ð 	ð 	ØˆEˆEˆEð	øøøð ð 	�5ð 	ØˆDØð *Ý˜DŸJšJ™LœLÑ)Ô)�Øð JØ Ÿ:š:™<œ<ð Jð J�CÝ .Ô GÑ IÔ I�D˜‘I�IàˆKà�yŠy‰{Œ{Ðs   ‚ —&¥&ª? ¿AÁAc                 ój   — t          |                      ¦   «                              d¦  «        ¦  «        S )NÚCONTENT_TYPE)Ú_is_json_content_typerX   rK   rZ   s    r"   Úis_jsonzRequestExtractor.is_json°   s$   € Ý$ T§X¢X¡Z¤Z§^¢^°NÑ%CÔ%CÑDÔDÐDr$   úOptional[Any]c                 óL  — 	 |                       ¦   «         sd S 	 |                      ¦   «         }n# t          $ 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)	rn   rN   rO   Ú
isinstanceÚstrri   ÚloadsÚdecoderY   )r<   rN   s     r"   ri   zRequestExtractor.json³   sÈ   € ð	Ø—<’<‘>”>ð Ø�tð ØŸ=š=™?œ?��øÝ'ð  ð  ð  ð  ���ð øøøð
 ÐØ�tå˜(¥CÑ(Ô(ð <Ý”z (Ñ+Ô+Ð+å”z (§/¢/°'Ñ":Ô":Ñ;Ô;Ð;øÝð 	ð 	ð 	ØˆDð	øøøð ˆts8   ‚B ™. ­B ®=ºB ¼=½B Á(B Á-&B Â
B!Â B!c                 ó   — t          ¦   «         ‚r;   r]   rZ   s    r"   rg   zRequestExtractor.filesË   r_   r$   Úfilec                 ó   — t          ¦   «         ‚r;   r]   )r<   rv   s     r"   Úsize_of_filezRequestExtractor.size_of_fileÎ   r_   r$   úDict[str, Any]c                 ó   — t          ¦   «         ‚r;   r]   rZ   s    r"   rX   zRequestExtractor.envÑ   r_   r$   )r9   r   r.   N)r>   r   r.   N)r.   r[   )r.   r`   )r.   rb   )r.   ro   )r.   ry   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   rT   rW   r-   rA   rN   rd   rP   Úboolrn   ri   rg   rx   rX   © r$   r"   r8   r8   E   s0  € € € € € ðð ðð ð ð ð72ð 72ð 72ð 72ðr ð ð ð ð ð$ð $ð $ð $ð$ð $ð $ð $ð$ð $ð $ð $ðð ð ð ð,E˜ð Eð Eð Eð Eðð ð ð ð0$ð $ð $ð $ð$ ð $¨3ð $ð $ð $ð $ð$ð $ð $ð $ð $ð $r$   r8   Ú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"   rm   rm   Õ   sV   € Ø
ˆ(�×	Ò	˜#˜qÑ	!Ô	! !Ô	$€Bà
Ð Ò ð 	!Ø�MŠM˜.Ñ)Ô)ð !Ø�KŠK˜Ñ Ô ðr$   TÚheaderszMapping[str, str]Úuse_annotated_valuez(Mapping[str, Union[AnnotatedValue, str]]c                 ó¬  ‡— t          j        ¦   «         j        }t          |¦  «        ra|d         }t	          | |d         d         ¬¦  «        }|D ]7}t          |t          ¦  «        r |                     ¦   «         dv r
t          ||<   Œ8|S t          ¦   «         r| S |st          nt          j        ¦   «         Šˆfd„|                      ¦   «         D ¦   «         S )Nr@   Úhttp_headersr9   rB   )Úcookiez
set-cookiec                 ó~   •— i | ]9\  }}||                      ¦   «                              d d¦  «        t          vr|n‰“Œ:S )ú-Ú_)ÚupperÚreplaceÚSENSITIVE_HEADERS)r    ÚkÚvÚ
substitutes      €r"   ú
<dictcomp>z#_filter_headers.<locals>.<dictcomp>û   s]   ø€ ð 
ð 
ð 
ñ ��1ð à—7’7‘9”9×$Ò$ S¨#Ñ.Ô.Õ6GÐGÐGð �àð	
ð 
ð 
r$   )rH   rI   r4   r   r   rq   rr   Úlowerr   r   r   rM   rC   )r‰   rŠ   Úclient_optionsÚdata_collection_configurationÚfilteredrj   r–   s         @r"   Ú_filter_headersrœ   Þ   s  ø€ õ  Ô*Ñ,Ô,Ô4€Nå" >Ñ2Ô2ð 
Ø(6Ð7HÔ(IÐ%å8ØØ3°NÔCÀIÔNð
ñ 
ô 
ˆð
 ð 	:ð 	:ˆCÝ˜#�sÑ#Ô#ð :¨¯	ª	©¬Ð7OÐ(OÐ(OÝ 9�˜‘øàˆå"Ñ$Ô$ð 	ØˆNð 'ðBÕ%Ð%åÔ?ÑAÔAð 	ð
ð 
ð 
ð 
ð  Ÿš™œð
ñ 
ô 
ð 	
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)rq   rW   Ú	TypeErrorr	   Úwarning)r�   rž   Útargets      r"   Ú_in_http_status_code_ranger¤     s•   € ð ð ð ˆÝ�f�cÑ"Ô"ð 	Ø�vŠ~ˆ~Ø�t�tØð	Ø�vˆ~ˆ~Ø�t�tð øåð 	ð 	ð 	ÝŒ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)r{   r|   r}   r~   r=   Úobjectr   r«   r€   r$   r"   r¦   r¦     s\   € € € € € ðð ð
(ð (ð (ð (ðC ð C¨Dð Cð Cð Cð Cð Cð Cr$   r¦   )T)*ri   Úcopyr   rH   Úsentry_sdk._typesr   Úsentry_sdk.data_collectionr   Úsentry_sdk.scoper   Úsentry_sdk.utilsr   r   r	   Údjango.http.requestr
   rY   rO   ÚImportErrorÚtypingr   r   r   r   r   r   r   r   r   ÚSENSITIVE_ENV_KEYSÚtupler“   ÚDEFAULT_HTTP_METHODS_TO_CAPTURErW   r   r6   r8   rm   rœ   r¬   r¤   r¦   r€   r$   r"   ú<module>r¸      s˜  ðØ €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø LÐ LÐ LÐ LÐ LÐ LØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð)Ø8Ð8Ð8Ð8Ð8Ð8à0°*Ð=ÐÐøØð )ð )ð )ØÐØ&˜=ÐÐÐð)øøøð !Ð  Ð  Ð  Ð  Ð  àð =ØJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJà<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð
Ð ð �Eð ð Ø1ðñ ô ñ ô Ð ð
#Ð ðØ4ðØFIðà	ðð ð ð ðM$ð M$ð M$ð M$ð M$ñ M$ô M$ð M$ð`˜oð °$ð ð ð ð ð !%ð$
ð $
Ø ð$
àð$
ð 0ð$
ð $
ð $
ð $
ðNØ
ðØ:ðà	ðð ð ð ð(
Cð 
Cð 
Cð 
Cð 
Cñ 
Cô 
Cð 
Cð 
Cð 
Cs   ¬
7 ·
AÁA