§
    xÅjí  ã            
       ó&  — d dl Z d dlm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 erd dlmZmZmZmZ d d	lmZ d d
lmZ  G d„ de¦  «        Zd"d„Z	 	 	 	 	 	 d#d„Zdddddddedef
d„Zd$d„Zdddefd„Z	 	 	 	 	 	 d%d„Z	 	 	 	 	 	 d&d!„ZdS )'é    N)ÚEnum)ÚTYPE_CHECKING)Ú0_apply_data_collection_filtering_to_query_string)Ú_filter_headers)Úshould_send_default_pii)Úhas_data_collection_enabled)ÚAnyÚDictÚOptionalÚUnion)ÚLiteral)ÚAnnotatedValuec                   ó   — e Zd ZdZdZdS )Ú_RootPathInPathÚexcludedÚeitherN)Ú__name__Ú
__module__Ú__qualname__ÚEXCLUDEDÚEITHER© ó    úUC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/_asgi_common.pyr   r      s   € € € € € Ø€HØ€F€F€Fr   r   Ú
asgi_scoper	   ÚreturnúDict[str, str]c                 ó°   — i }| d         D ]J\  }}|                      d¦  «        }|                      d¦  «        }||v r||         dz   |z   ||<   ŒE|||<   ŒK|S )z^
    Extract headers from the ASGI scope, in the format that the Sentry protocol expects.
    Úheadersúlatin-1z, )Údecode)r   r   Úraw_keyÚ	raw_valueÚkeyÚvalues         r   Ú_get_headersr&      sx   € ð !#€GØ(¨Ô3ð !ð !Ñˆ�Ø�nŠn˜YÑ'Ô'ˆØ× Ò  Ñ+Ô+ˆØ�'ˆ>ˆ>Ø" 3œ<¨$Ñ.°Ñ6ˆG�C‰LˆLà ˆG�C‰LˆLà€Nr   úDict[str, Any]Úroot_path_in_pathÚstrc                 ó  — |t           j        u r-|                      dd¦  «        |                      dd¦  «        z   S | d         }|                      dd¦  «        }|r||k    s|                     |dz   ¦  «        r|S ||z   S )NÚ	root_pathÚ Úpathú/)r   r   ÚgetÚ
startswith)r   r(   r-   r+   s       r   Ú	_get_pathr1   (   s�   € ð �OÔ4Ð4Ð4Ø�~Š~˜k¨2Ñ.Ô.°·²ÀÈÑ1KÔ1KÑKÐKð �fÔ€DØ—’˜{¨BÑ/Ô/€Iàð ˜ 	Ò)Ð)¨T¯_ª_¸YÈ¹_Ñ-MÔ-MÐ)Øˆà�tÑÐr   Údefault_schemezLiteral['ws', 'http']Úhostz$Optional[Union[AnnotatedValue, str]]r-   c                 óì   — |                       d|¦  «        }|                       dd¦  «        }|r	|›d|›|›�S |�:|\  }}dddddœ                      |¦  «        }||k    r|›d|›d|›|›�S |›d|›|›�S |S )	zR
    Extract URL from the ASGI scope, without also including the querystring.
    ÚschemeÚserverNz://éP   i»  )ÚhttpÚhttpsÚwsÚwssú:)r/   )r   r2   r3   r-   r5   r6   ÚportÚdefault_ports           r   Ú_get_urlr?   8   sµ   € ð �^Š^˜H nÑ5Ô5€Fà�^Š^˜H dÑ+Ô+€Fàð 2Ø$˜f˜f d d¨D¨DÐ1Ð1àÐØ‰
ˆˆdØ "¨S¸À3ÐGÐG×KÒKÈFÑSÔSˆØ�<ÒÐØ%+ V V¨T¨T¨T°4°4¸¸Ð>Ð>Ø$˜f˜f d d¨D¨DÐ1Ð1Ø€Kr   úOptional[str]c                 ó˜   — |                       d¦  «        }|sdS t          j                             |                     d¦  «        ¦  «        S )zb
    Extract querystring from the ASGI scope, in the format that the Sentry protocol expects.
    Úquery_stringNr    )r/   ÚurllibÚparseÚunquoter!   )r   Úqss     r   Ú
_get_queryrG   Q   sD   € ð 
�Š˜Ñ	'Ô	'€BØð ØˆtÝŒ<×Ò §	¢	¨)Ñ 4Ô 4Ñ5Ô5Ð5r   c                 ó  — t          | ¦  «        }	 |d                              d¦  «        d                              ¦   «         S # t          t          f$ r Y nw xY w	 |d         S # t          $ r Y nw xY w|                      d¦  «        d         S )zh
    Extract IP Address from the ASGI scope based on request headers with fallback to scope client.
    zx-forwarded-forú,r   z	x-real-ipÚclient)r&   ÚsplitÚstripÚKeyErrorÚ
IndexErrorr/   )r   r   s     r   Ú_get_iprO   [   s¯   € õ ˜:Ñ&Ô&€GðØÐ(Ô)×/Ò/°Ñ4Ô4°QÔ7×=Ò=Ñ?Ô?Ð?øÝ•jÐ!ð ð ð ØˆðøøøðØ�{Ô#Ð#øÝð ð ð Øˆðøøøð �>Š>˜(Ñ#Ô# AÔ&Ð&s#   ‘2A ÁAÁAÁA$ Á$
A1Á0A1c           	      óÌ  — i }| d         }t          j        ¦   «         j        }|dv rÒ|                      d¦  «        |d<   t	          | ¦  «        }t          |d¬¦  «        |d<   t          |¦  «        r6t          | ¦  «        }|r$t          ||d         d         ¬	¦  «        }|r||d
<   nt          | ¦  «        |d
<   t          | |dk    rdnd|                     d¦  «        t          | |¬¦  «        ¬¦  «        |d<   |                      d¦  «        }|rTt          |¦  «        r#|d         d         rdt          | ¦  «        i|d<   n"t          ¦   «         rdt          | ¦  «        i|d<   |S )zG
    Returns data related to the HTTP request from the ASGI scope.
    Útype©r8   Ú	websocketÚmethodF©Úuse_annotated_valuer   Údata_collectionÚurl_query_params©rB   Ú	behaviourrB   r8   r:   r3   ©r   r(   ©r-   ÚurlrJ   Ú	user_infoÚREMOTE_ADDRÚenv)Ú
sentry_sdkÚ
get_clientÚoptionsr/   r&   r   r   rG   r   r?   r1   rO   r   )	r   r(   Úrequest_dataÚtyÚclient_optionsr   rF   Úfiltered_query_stringrJ   s	            r   Ú_get_request_datarh   m   s¼  € ð &(€LØ	�FÔ	€BÝÔ*Ñ,Ô,Ô4€NØ	Ð"Ð"Ð"Ø!+§¢°Ñ!9Ô!9ˆ�XÑå˜zÑ*Ô*ˆå"1ØØ %ð#
ñ #
ô #
ˆ�YÑõ
 ' ~Ñ6Ô6ð 	BÝ˜JÑ'Ô'ˆBØð IåDØ%'Ø"0Ð1BÔ"CÐDVÔ"Wðñ ô ð &ð )ð IØ3H�L Ñ0øå+5°jÑ+AÔ+AˆL˜Ñ(å&ØØ˜F’l�lˆFˆF¨Ø�KŠK˜ÑÔÝ jÐDUÐVÑVÔVð	
ñ 
ô 
ˆ�UÑð �^Š^˜HÑ%Ô%€FØð GÝ& ~Ñ6Ô6ð 	GØÐ/Ô0°Ô=ð KØ'4µg¸jÑ6IÔ6IÐ&J�˜UÑ#øÝ$Ñ&Ô&ð 	GØ#0µ'¸*Ñ2EÔ2EÐ"FˆL˜ÑàÐr   údict[str, Any]c                 ór  — i }| d         }t          j        ¦   «         j        }|dv �r¤|                      d¦  «        r| d                              ¦   «         |d<   t          | ¦  «        }t          |d¬¦  «        }|                     ¦   «         D ]\  }}||d|                     ¦   «         › �<   Œ t          |¦  «        rŠd}	t          | ¦  «        }
|
r$t          |
|d	         d
         ¬¦  «        }	|	r|	|d<   t          | |¬¦  «        }||d<   t          | |dk    rdnd|                     d¦  «        |¬¦  «        }|	�|› d|	› �n||d<   n…t          ¦   «         rwt          | ¦  «        }
|
r|
|d<   t          | |¬¦  «        }||d<   t          | |dk    rdnd|                     d¦  «        |¬¦  «        }t          | ¦  «        }|�|› d|› �n||d<   |                      d¦  «        }|rTt          |¦  «        r#|d	         d         rt          | ¦  «        }||d<   n"t          ¦   «         rt          | ¦  «        }||d<   |S )zL
    Return attributes related to the HTTP request from the ASGI scope.
    rQ   rR   rT   zhttp.request.methodFrU   zhttp.request.header.NrW   rX   rY   z
http.queryr[   zurl.pathr8   r:   r3   r\   ú?zurl.fullrJ   r^   zclient.address)ra   rb   rc   r/   Úupperr&   r   ÚitemsÚlowerr   rG   r   r1   r?   r   rO   )r   r(   Ú
attributesre   rf   r   Úfiltered_headersÚheaderr%   rg   Úqueryr-   Úurl_without_query_stringrB   Úasgi_scope_clientÚips                   r   Ú_get_request_attributesrv   ¡   sò  € ð $&€Jà	�FÔ	€BÝÔ*Ñ,Ô,Ô4€NØ	Ð"Ð"Ñ"Ø�>Š>˜(Ñ#Ô#ð 	MØ0:¸8Ô0D×0JÒ0JÑ0LÔ0LˆJÐ,Ñ-å˜zÑ*Ô*ˆå*¨7ÈÐNÑNÔNÐØ-×3Ò3Ñ5Ô5ð 	Hð 	H‰MˆF�EØBGˆJÐ>¨f¯lªl©n¬nÐ>Ð>Ñ?Ð?å& ~Ñ6Ô6ð 1	Ø$(Ð!Ý˜zÑ*Ô*ˆEàð EåDØ%*Ø"0Ð1BÔ"CÐDVÔ"Wðñ ô ð &ð )ð EØ/D�J˜|Ñ,å¨
ÐFWÐXÑXÔXˆDØ%)ˆJ�zÑ"å'/ØØ š,˜,��¨DØ—’˜FÑ#Ô#Øð	(ñ (ô (Ð$ð )Ð4ð ,ÐEÐEÐ.CÐEÐEÐEà-ð �zÑ"Ð"õ %Ñ&Ô&ð 	Ý˜zÑ*Ô*ˆEØð 1Ø+0�
˜<Ñ(å¨
ÐFWÐXÑXÔXˆDØ%)ˆJ�zÑ"å'/ØØ š,˜,��¨DØ—’˜FÑ#Ô#Øð	(ñ (ô (Ð$õ & jÑ1Ô1ˆLð  Ð+ð ,Ð<Ð<¨lÐ<Ð<Ð<à-ð �zÑ"ð #Ÿš xÑ0Ô0ÐØð .Ý& ~Ñ6Ô6ð 	.ØÐ/Ô0°Ô=ð 2Ý˜ZÑ(Ô(�Ø/1�
Ð+Ñ,øÝ$Ñ&Ô&ð 	.Ý˜Ñ$Ô$ˆBØ+-ˆJÐ'Ñ(àÐr   )r   r	   r   r   )r   r'   r(   r   r   r)   )r   r	   r   r@   )r   r	   r(   r   r   r'   )r   r	   r(   r   r   ri   )rC   Úenumr   Útypingr   ra   Úsentry_sdk.data_collectionr   Ú$sentry_sdk.integrations._wsgi_commonr   Úsentry_sdk.scoper   Úsentry_sdk.utilsr   r	   r
   r   r   Útyping_extensionsr   r   r   r&   r1   r)   r?   rG   rO   rh   rv   r   r   r   ú<module>r~      s(  ðØ €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø WÐ WÐ WÐ WÐ WÐ WØ @Ð @Ð @Ð @Ð @Ð @Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8àð 0Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1à)Ð)Ð)Ð)Ð)Ð)à/Ð/Ð/Ð/Ð/Ð/ðð ð ð ð �dñ ô ð ð
ð ð ð ð Ø ðØ5Fðà
ðð ð ð ð Ø ðà+ðð 1ðð ð	ð
 	ðð ð ð ð26ð 6ð 6ð 6ð'˜ð ' #ð 'ð 'ð 'ð 'ð$1Øð1à(ð1ð ð1ð 1ð 1ð 1ðhRØðRà(ðRð ðRð Rð Rð Rð Rð Rr   