§
    xÅjÊG  ã                   óx  — d dl Z d dlmZ d dlmZ d dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlmZmZ d dlmZmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' erUd dlm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl!m5Z5  e0d¦  «        Z6 e0d¦  «        Z7 e0d¦  «        Z8 G d„ de.¦  «        Z9 e"d¦  «        Z:dZ;d;de<de<de<de<fd„Z=	 d<d!d"d#e>de<fd$„Z? G d%„ d&¦  «        Z@	 d=d'dd(d)d*e<d+dd,d-ddfd.„ZAd>d0„ZBd?d2„ZCd@d4„ZD G d5„ d6¦  «        ZEd!d"d#e>dd7fd8„ZF	 d<d!d"d#e>dd9fd:„ZGdS )Aé    N)Úpartial)ÚTYPE_CHECKING)Ú_get_headersÚget_host)Úcontinue_trace)ÚOPÚSPANDATA)Ú0_apply_data_collection_filtering_to_query_string)ÚDEFAULT_HTTP_METHODS_TO_CAPTUREÚ_filter_headers)ÚScopeÚshould_send_default_piiÚuse_isolation_scope)Útrack_session)ÚSegmentNameSourceÚStreamedSpan)ÚSpanÚTransactionSource)Úhas_span_streaming_enabled)Ú
ContextVarÚcapture_internal_exceptionsÚevent_from_exceptionÚhas_data_collection_enabledÚnullcontextÚreraise)
ÚAnyÚCallableÚContextManagerÚDictÚIteratorÚOptionalÚProtocolÚTupleÚTypeVarÚUnion)ÚEventÚEventProcessor)ÚExcInfoÚWsgiResponseIterÚWsgiResponseHeadersÚWsgiExcInfoc            	       ó*   — e Zd Z	 d
deddddddfd	„ZdS )ÚStartResponseNÚstatusÚresponse_headersr*   Úexc_infoúOptional[WsgiExcInfo]Úreturnr)   c                 ó   — d S ©N© )Úselfr.   r/   r0   s       úMC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/wsgi.pyÚ__call__zStartResponse.__call__2   s	   € ð ˆDó    r4   )Ú__name__Ú
__module__Ú__qualname__Ústrr8   r5   r9   r7   r-   r-   1   sX   € € € € € ð
 15ð		ð 	àð	ð 4ð	ð .ð		ð
  ð	ð 	ð 	ð 	ð 	ð 	r9   r-   Úsentry_wsgi_middleware_appliedzgeneric WSGI requestúutf-8ÚreplaceÚsÚcharsetÚerrorsr2   c                 óT   — |                       d¦  «                             ||¦  «        S )NÚlatin1)ÚencodeÚdecode)rA   rB   rC   s      r7   Úwsgi_decoding_dancerH   ?   s$   € Ø�8Š8�HÑÔ×$Ò$ W¨fÑ5Ô5Ð5r9   FÚenvironúDict[str, str]Úuse_x_forwarded_forc                 ó~  — |                       dd¦  «                             d¦  «        }|                       dd¦  «                             d¦  «        }|› d|› �}|                       d¦  «        }|r|                       d|¦  «        }|›dt          | |¦  «        ›dt	          |¦  «                             d¦  «        ›�S )zPReturn the absolute URL without query string for the given WSGI
    environment.ÚSCRIPT_NAMEÚ ú/Ú	PATH_INFOúwsgi.url_schemeÚHTTP_X_FORWARDED_PROTOz://)ÚgetÚrstripÚlstripr   rH   )rI   rK   Úscript_nameÚ	path_infoÚpathÚschemes         r7   Úget_request_urlrZ   C   sÊ   € ð
 —+’+˜m¨RÑ0Ô0×7Ò7¸Ñ<Ô<€KØ—’˜K¨Ñ,Ô,×3Ò3°CÑ8Ô8€IØÐ'Ð'˜IÐ'Ð'€Dà�[Š[Ð*Ñ+Ô+€FØð ?Ø—’Ð5°vÑ>Ô>ˆð 	ˆˆÝ�Ð-Ñ.Ô.Ð.Ð.Ý˜DÑ!Ô!×(Ò(¨Ñ-Ô-Ð-ðð r9   c                   óJ   — e Zd ZdZddefdddededd	d
df
d„Z	 	 	 	 	 	 dd„ZdS )ÚSentryWsgiMiddleware©ÚapprK   Úspan_originÚhttp_methods_to_captureFÚmanualr^   z3Callable[[Dict[str, str], Callable[..., Any]], Any]rK   r_   r`   zTuple[str, ...]r2   Nc                 ó>   — || _         || _        || _        || _        d S r4   r]   )r6   r^   rK   r_   r`   s        r7   Ú__init__zSentryWsgiMiddleware.__init___   s)   € ð ˆŒØ#6ˆÔ Ø&ˆÔØ'>ˆÔ$Ð$Ð$r9   rI   rJ   Ústart_responseúCallable[..., Any]r   c                 óÄ  — t                                d¦  «        r|                      ||¦  «        S t          j        ¦   «         }t          |j        ¦  «        }t                                d¦  «         	 t          j        ¦   «         5 }t          |d¬¦  «        5  t          ¦   «         5  |                     ¦   «          d|_        |                     t          || j        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                     dd¦  «                             ¦   «         }d }|| j        v �r’|�rEt          j                             t)          t+          |¦  «        ¦  «        ¦  «         t-          j        d|i¦  «         t1          |j        ¦  «        rE|j        d	         d
         r1t3          |¦  «        }|r |                     t6          j        |¦  «         n?t;          ¦   «         r1t3          |¦  «        }|r |                     t6          j        |¦  «         t          j                             t>          t@          j!        | j"        tF          j$        dœd ¬¦  «        }|| %                    ¦   «         _&        nJt'          |tF          j$        t>          tN          j!        | j"        ¬¦  «        }	t          j(        |	d|i¬¦  «        }|ptS          ¦   «         }|5 }
tU          |
tV          ¦  «        rjt          ¦   «         5  tY          || j        ¦  «         -                    ¦   «         D ]\  }}|
                     ||¦  «         Œ	 d d d ¦  «         n# 1 swxY w Y   	 |                      |t]          t^          ||
¦  «        ¦  «        }n%# t`          $ r tc          te          ¦   «         Ž  Y nw xY wd d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   t                                d¦  «         n# t                                d¦  «         w xY w|                     d¦  «        rtg          |dd ¦  «        �|S ti          ||¦  «        S )NFTÚrequest)Úsession_modeÚwsgiÚREQUEST_METHODrN   Úwsgi_environÚdata_collectionÚ	user_info)zsentry.segment.name.sourcezsentry.originz	sentry.op)ÚnameÚ
attributesÚparent_span)Úoprn   ÚsourceÚorigin)Úcustom_sampling_contextzwsgi.file_wrapperÚfileno)5Ú_wsgi_middleware_appliedrS   r^   Ú
sentry_sdkÚ
get_clientr   ÚoptionsÚsetÚisolation_scoper   r   Úclear_breadcrumbsÚ_nameÚadd_event_processorÚ_make_wsgi_event_processorrK   Úupperr`   Útracesr   Údictr   r   Úset_custom_sampling_contextr   Úget_client_ipÚset_attributer	   ÚUSER_IP_ADDRESSr   Ú
start_spanÚ_DEFAULT_TRANSACTION_NAMEr   ÚROUTEr_   r   ÚHTTP_SERVERÚget_current_scopeÚ_server_segment_spanr   Ústart_transactionr   Ú
isinstancer   Ú_get_request_attributesÚitemsr   Ú_sentry_start_responseÚBaseExceptionr   Ú_capture_exceptionÚgetattrÚ_ScopedResponse)r6   rI   rd   ÚclientÚspan_streamingÚscopeÚmethodÚspan_ctxÚ	client_ipÚtransactionÚspanÚattrÚvalueÚresponses                 r7   r8   zSentryWsgiMiddleware.__call__k   sÝ  € õ $×'Ò'¨Ñ.Ô.ð 	5Ø—8’8˜G ^Ñ4Ô4Ð4åÔ&Ñ(Ô(ˆÝ3°F´NÑCÔCˆå ×$Ò$ TÑ*Ô*Ð*ðN	0ÝÔ+Ñ-Ô-ð K;°Ý" 5°yÐAÑAÔAð J;ð J;Ý4Ñ6Ô6ð ð Ø×/Ò/Ñ1Ô1Ð1Ø&,˜œØ×1Ò1Ý6Ø '¨Ô)Añô ñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð %Ÿ[š[Ð)9¸2Ñ>Ô>×DÒDÑFÔF�Fà\`�HØ Ô!=Ð=Ñ=Ø)ñ *Ý&Ô-×<Ò<Ý $¥\°'Ñ%:Ô%:Ñ ;Ô ;ñô ð õ "Ô=¸~ÈwÐ>WÑXÔXÐXå:¸6¼>ÑJÔJð &Ø#)¤>Ð2CÔ#DÀ[Ô#Qð !*Ý0=¸gÑ0FÔ0F IØ'0ð %*Ø(-×(;Ò(;Ý,4Ô,DÀiñ)*ô )*ð )*øõ "9Ñ!:Ô!:ð &Ý,9¸'Ñ,BÔ,B 	Ø#,ð !&Ø$)×$7Ò$7Ý(0Ô(@À)ñ%&ô %&ð %&õ (2Ô'8×'CÒ'CÝ%>åBSÔBYØ59Ô5EÝ13´ð,"ð ,"ð
 -1ð (Dñ (ô (˜Hð NV˜E×3Ò3Ñ5Ô5ÔJÐJå*8Ø 'Ý#%¤>Ý%>Ý'8Ô'>Ø'+Ô'7ð+ñ +ô +˜Kõ (2Ô'CØ +Ø9GÈÐ8Qð(ñ (ô (˜Hð
  (Ð8­;©=¬=�Hà!ð ; TÝ% d­LÑ9Ô9ð DÝ!<Ñ!>Ô!>ð Dð DÝ3JØ$+¨TÔ-Eñ4"ô 4"ç"'¢%¡'¤'ð!Dð !D¡K D¨%ð %)×$6Ò$6°t¸UÑ$CÔ$CÐ$CÐ$Cð!DðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð;Ø'+§x¢xØ 'Ý 'Õ(>ÀÐPTÑ UÔ Uñ(ô (˜H˜Høõ  -ð ;ð ;ð ;Ý#Õ%7Ñ%9Ô%9Ð:Ð:Ð:Ð:ð;øøøð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ðyJ;ð J;ð J;ñ J;ô J;ð J;ð J;ð J;ð J;ð J;ð J;øøøð J;ð J;ð J;ð J;ðK;ð K;ð K;ñ K;ô K;ð K;ð K;ð K;ð K;ð K;ð K;øøøð K;ð K;ð K;ð K;õZ %×(Ò(¨Ñ/Ô/Ð/Ð/øÕ$×(Ò(¨Ñ/Ô/Ð/Ð/øøøð( �KŠKÐ+Ñ,Ô,ð	å˜ (¨DÑ1Ô1Ð=àˆOå˜u hÑ/Ô/Ð/sç   Á3P ÂO%ÂOÂ'AC7Ã+OÃ7C;Ã;OÃ>C;Ã?GOË$N7Ë>AM	ÍN7ÍMÍN7ÍMÍN7Í*NÎN7ÎN(	Î%N7Î'N(	Î(N7Î+OÎ7N;Î;OÎ>N;Î?OÏO%ÏO	ÏO%ÏO	ÏO%ÏP Ï%O)Ï)P Ï,O)Ï-P ÐP')rI   rJ   rd   re   r2   r   )	r:   r;   r<   Ú	__slots__r   Úboolr=   rc   r8   r5   r9   r7   r\   r\   W   s¤   € € € € € ð€Ið %*Ø#Ø5Tð
?ð 
?àBð
?ð "ð
?ð ð	
?ð
 "3ð
?ð 
ð
?ð 
?ð 
?ð 
?ðq0Ø'ðq0Ø9Mðq0à	ðq0ð q0ð q0ð q0ð q0ð q0r9   r\   Úold_start_responser�   z#Optional[Union[Span, StreamedSpan]]r.   r/   r0   r1   c                 óz  — t          ¦   «         5  t          |                     dd¦  «        d         ¦  «        }|�Pt          |t          ¦  «        r&|dk    rdnd|_        |                     d|¦  «         n|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |€ | ||¦  «        S  | |||¦  «        S )Nú é   r   i�  ÚerrorÚokzhttp.response.status_code)r   ÚintÚsplitrŽ   r   r.   r…   Úset_http_status)r£   r�   r.   r/   r0   Ú
status_ints         r7   r‘   r‘   ß   s  € õ 
%Ñ	&Ô	&ð 1ð 1Ý˜Ÿš c¨1Ñ-Ô-¨aÔ0Ñ1Ô1ˆ
ØÐÝ˜$¥Ñ-Ô-ð 1Ø)3°sÒ):Ð):˜g˜gÀ�”Ø×"Ò"Ð#>À
ÑKÔKÐKÐKà×$Ò$ ZÑ0Ô0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð Ðð "Ð! &Ð*:Ñ;Ô;Ð;à!Ð! &Ð*:¸HÑEÔEÐEs   �A<BÂBÂBúIterator[Tuple[str, str]]c              #   óÜ   K  — ddg}t          j        ¦   «         j        }t          |¦  «        r|d         d         r|dgz  }nt	          ¦   «         r|dgz  }|D ]}|| v r|| |         fV — ŒdS )z�
    Returns our explicitly included environment variables we want to
    capture (server name, port and remote addr if pii is enabled).
    ÚSERVER_NAMEÚSERVER_PORTrl   rm   ÚREMOTE_ADDRN)rw   rx   ry   r   r   )rI   ÚkeysÚclient_optionsÚkeys       r7   Ú_get_environrµ   ø   s§   è è € ð
 ˜=Ð)€DÝÔ*Ñ,Ô,Ô4€Nõ # >Ñ2Ô2ð  ØÐ+Ô,¨[Ô9ð 	$Ø�]�OÑ#ˆDøÝ	 Ñ	"Ô	"ð  Ø��Ñˆàð $ð $ˆØ�'ˆ>ˆ>Ø�w˜s”|Ð#Ð#Ð#Ð#øð$ð $r9   úOptional[Any]c                 óô   — 	 | 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¦  «        S )zÏ
    Infer the user IP address from various headers. This cannot be used in
    security sensitive situations since the value may be forged from a client,
    but it's good enough for the event payload.
    ÚHTTP_X_FORWARDED_FORú,r   ÚHTTP_X_REAL_IPr±   )rª   ÚstripÚKeyErrorÚ
IndexErrorrS   )rI   s    r7   r„   r„     sœ   € ðØÐ-Ô.×4Ò4°SÑ9Ô9¸!Ô<×BÒBÑDÔDÐDøÝ•jÐ!ð ð ð ØˆðøøøðØÐ'Ô(Ð(øÝð ð ð Øˆðøøøð �;Š;�}Ñ%Ô%Ð%s!   ‚25 µA	ÁA	ÁA Á
A"Á!A"r(   c                  ó  — t          j        ¦   «         } | d         }t          |t          ¦  «        o|j        dv }|sDt          | t          j        ¦   «         j        dddœ¬¦  «        \  }}t          j	        ||¬¦  «         | S )z€
    Captures the current exception and sends it to Sentry.
    Returns the ExcInfo tuple to it can be reraised afterwards.
    r¦   )r   Nri   F)ÚtypeÚhandled)r³   Ú	mechanism)Úhint)
Úsysr0   rŽ   Ú
SystemExitÚcoder   rw   rx   ry   Úcapture_event)r0   ÚeÚshould_skip_captureÚeventrÂ   s        r7   r“   r“      s�   € õ
 Œ|‰~Œ~€HØ�Œ€Aõ % Q­
Ñ3Ô3ÐK¸¼À)Ð8KÐØð 3Ý*ØÝ%Ô0Ñ2Ô2Ô:Ø%°%Ð8Ð8ð
ñ 
ô 
‰ˆˆtõ
 	Ô  ¨TÐ2Ñ2Ô2Ð2à€Or9   c                   ó:   — e Zd ZdZdZ	 	 	 	 	 	 dd	„Zdd
„Zdd„ZdS )r•   aY  
    Users a separate scope for each response chunk.

    This will make WSGI apps more tolerant against:
    - WSGI servers streaming responses from a different thread/from
      different threads than the one that called start_response
    - close() not being called
    - WSGI servers streaming responses interleaved from the same thread
    )Ú	_responseÚ_scoper˜   úsentry_sdk.scope.Scoper    úIterator[bytes]r2   Nc                 ó"   — || _         || _        d S r4   )rÌ   rË   )r6   r˜   r    s      r7   rc   z_ScopedResponse.__init__B  s   € ð ˆŒØ!ˆŒˆˆr9   c              #   ó,  K  — t          | j        ¦  «        }	 t          | j        ¦  «        5  	 t	          |¦  «        }n<# t
          $ r Y d d d ¦  «         d S t          $ r t          t          ¦   «         Ž  Y nw xY wd d d ¦  «         n# 1 swxY w Y   |V — Œ~r4   )	ÚiterrË   r   rÌ   ÚnextÚStopIterationr’   r   r“   )r6   ÚiteratorÚchunks      r7   Ú__iter__z_ScopedResponse.__iter__H  s  è è € Ý˜œÑ'Ô'ˆð		Ý$ T¤[Ñ1Ô1ð 3ð 3ð3Ý  ™NœN�E�EøÝ$ð ð ð Øð	3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3õ
 %ð 3ð 3ð 3ÝÕ/Ñ1Ô1Ð2Ð2Ð2Ð2ð3øøøð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð ˆKˆKˆKð		s=   ¬B®>½B¾
A7ÁBÁA7Á4BÁ6A7Á7BÂB
ÂB
c                 óö   — t          | j        ¦  «        5  	 | j                             ¦   «          n0# t          $ r Y n$t
          $ r t          t          ¦   «         Ž  Y nw xY wd d d ¦  «         d S # 1 swxY w Y   d S r4   )r   rÌ   rË   ÚcloseÚAttributeErrorr’   r   r“   )r6   s    r7   rØ   z_ScopedResponse.closeV  sÜ   € Ý  ¤Ñ-Ô-ð 	/ð 	/ð/Ø”×$Ò$Ñ&Ô&Ð&Ð&øÝ!ð ð ð Ø�Ý ð /ð /ð /ÝÕ+Ñ-Ô-Ð.Ð.Ð.Ð.ð/øøøð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s;   •A.—1°A.±
A»A.½AÁA.ÁAÁA.Á.A2Á5A2)r˜   rÍ   r    rÎ   r2   N)r2   rÎ   )r2   N)r:   r;   r<   Ú__doc__r¡   rc   rÖ   rØ   r5   r9   r7   r•   r•   5  sy   € € € € € ðð ð (€Ið"Ø-ð"Ø9Jð"à	ð"ð "ð "ð "ðð ð ð ð/ð /ð /ð /ð /ð /r9   r•   r'   c                 óx  ‡‡‡‡‡‡‡	— t          | ¦  «        Št          | |¦  «        Š	|                      d¦  «        Š|                      d¦  «        Št          t	          | ¦  «        ¦  «        Št          t          t          | ¦  «        ¦  «        ¦  «        Št          j        ¦   «         j	        Šd	ˆˆˆˆˆˆˆ	fd„}|S )
NÚQUERY_STRINGrj   rÉ   r&   rÂ   úDict[str, Any]r2   c                 ó.  •— t          ¦   «         5  |                      di ¦  «        }t          ‰¦  «        r=‰d         d         r.|                      di ¦  «        }‰r|                     d‰¦  «         n<t          ¦   «         r.|                      di ¦  «        }‰r|                     d‰¦  «         ‰|d<   ‰	|d<   ‰|d<   ‰|d	<   t          ‰¦  «        r'‰
r$t	          ‰
‰d         d
         ¬¦  «        }|r||d<   n‰
|d<   d d d ¦  «         n# 1 swxY w Y   | S )Nrg   rl   rm   ÚuserÚ
ip_addressÚurlr™   ÚenvÚheadersÚurl_query_params©Úquery_stringÚ	behaviourræ   )r   Ú
setdefaultr   r   r
   )rÉ   rÂ   Úrequest_inform   Úfiltered_qsr›   r³   râ   rã   r™   ræ   Úrequest_urls        €€€€€€€r7   Úevent_processorz3_make_wsgi_event_processor.<locals>.event_processorw  s¦  ø€ Ý(Ñ*Ô*ð 	<ð 	<à ×+Ò+¨I°rÑ:Ô:ˆLå*¨>Ñ:Ô:ð BØ!Ð"3Ô4°[ÔAð FØ %× 0Ò 0°¸Ñ <Ô <�IØ ð FØ!×,Ò,¨\¸9ÑEÔEÐEøÝ(Ñ*Ô*ð BØ!×,Ò,¨V°RÑ8Ô8�	Øð BØ×(Ò(¨°yÑAÔAÐAà"-ˆL˜ÑØ%+ˆL˜Ñ"Ø"%ˆL˜ÑØ&-ˆL˜Ñ#å*¨>Ñ:Ô:ð 
<Øð CÝ"RØ%1Ø"0Ð1BÔ"CÐDVÔ"Wð#ñ #ô #�Kð #ð CØ7B˜ ^Ñ4øð 0<�˜^Ñ,ð;	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð> ˆs   �C.D
Ä
DÄD)rÉ   r&   rÂ   rÝ   r2   r&   )
r„   rZ   rS   r‚   rµ   r   r   rw   rx   ry   )
rI   rK   rì   r›   r³   râ   rã   r™   ræ   rë   s
      @@@@@@@r7   r   r   `  sÓ   øøøøøøø€ õ ˜gÑ&Ô&€IÝ! 'Ð+>Ñ?Ô?€KØ—;’;˜~Ñ.Ô.€LØ�[Š[Ð)Ñ*Ô*€FÝ
�|˜GÑ$Ô$Ñ
%Ô
%€CÝ�d¥<°Ñ#8Ô#8Ñ9Ô9Ñ:Ô:€GÝÔ*Ñ,Ô,Ô4€Nð ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ðD Ðr9   rÝ   c                 óž  — i }|                       d¦  «        }|r|                     ¦   «         |d<   t          t          t	          | ¦  «        ¦  «        d¬¦  «        }|                     ¦   «         D ]\  }}||d|                     ¦   «         › �<   Œ |                       d¦  «        }|r||d<   |                       d¦  «        }|r||d	<   |                       d
¦  «        }	|	r$	 t          |	¦  «        |d<   n# t          $ r Y nw xY wt          j
        ¦   «         j        }
t          |
¦  «        r§|                       d¦  «        }d}|r$t          ||
d         d         ¬¦  «        }|r||d<   |                       dd¦  «        }|r||d<   t          | |¦  «        |d<   |�|dxx         d|› �z  cc<   |
d         d         rt          | ¦  «        }|r||d<   n|t!          ¦   «         rnt          | ¦  «        }|r||d<   |                       d¦  «        }|r||d<   |                       dd¦  «        }|r||d<   t          | |¦  «        }|r|d|z   z  }||d<   |S )zS
    Return span attributes related to the HTTP request from the WSGI environ.
    rj   zhttp.request.methodF)Úuse_annotated_valuezhttp.request.header.rQ   znetwork.protocol.namer¯   zserver.addressr°   zserver.portrÜ   Nrl   rä   rå   z
http.queryrP   rN   zurl.pathzurl.fullú?rm   zclient.address)rS   r€   r   r‚   r   r�   Úlowerr©   Ú
ValueErrorrw   rx   ry   r   r
   rZ   r„   r   )rI   rK   ro   r™   rã   ÚheaderrŸ   Ú
url_schemeÚserver_nameÚserver_portr³   ræ   rê   rX   r›   Úurl_fulls                   r7   r�   r�   œ  sð  € ð $&€Jà�[Š[Ð)Ñ*Ô*€FØð ;Ø,2¯LªL©N¬Nˆ
Ð(Ñ)å�d¥<°Ñ#8Ô#8Ñ9Ô9ÈuÐUÑUÔU€GØ Ÿš™œð Dð D‰ˆ�Ø>Cˆ
Ð:¨&¯,ª,©.¬.Ð:Ð:Ñ;Ð;à—’Ð.Ñ/Ô/€JØð 9Ø.8ˆ
Ð*Ñ+à—+’+˜mÑ,Ô,€KØð 3Ø'2ˆ
Ð#Ñ$à—+’+˜mÑ,Ô,€KØð ð	Ý(+¨KÑ(8Ô(8ˆJ�}Ñ%Ð%øÝð 	ð 	ð 	ØˆDð	øøøõ  Ô*Ñ,Ô,Ô4€Nå" >Ñ2Ô2ð )*Ø—{’{ >Ñ2Ô2ˆØˆØð 	7ÝJØ)Ø(Ð):Ô;Ð<NÔOðñ ô ˆKð
 ð 7Ø+6�
˜<Ñ(à�{Š{˜;¨Ñ+Ô+ˆØð 	*Ø%)ˆJ�zÑ"å!0°Ð:MÑ!NÔ!Nˆ
�:ÑØÐ"Ø�zÐ"Ð"Ô"Ð&7¨+Ð&7Ð&7Ñ7Ð"Ð"Ñ"àÐ+Ô,¨[Ô9ð 	9Ý% gÑ.Ô.ˆIØð 9Ø/8�
Ð+Ñ,øå	 Ñ	"Ô	"ð *Ý! 'Ñ*Ô*ˆ	Øð 	5Ø+4ˆJÐ'Ñ(à—{’{ >Ñ2Ô2ˆØð 	4Ø'3ˆJ�|Ñ$à�{Š{˜;¨Ñ+Ô+ˆØð 	*Ø%)ˆJ�zÑ"å" 7Ð,?Ñ@Ô@ˆØð 	+Ø˜˜lÑ*Ñ*ˆHØ!)ˆ
�:ÑàÐs   Ã C3 Ã3
D Ã?D )r?   r@   )Fr4   )rI   rJ   r2   r­   )rI   rJ   r2   r¶   )r2   r(   )HrÃ   Ú	functoolsr   Útypingr   rw   Úsentry_sdk._werkzeugr   r   Úsentry_sdk.apir   Úsentry_sdk.constsr   r	   Úsentry_sdk.data_collectionr
   Ú$sentry_sdk.integrations._wsgi_commonr   r   Úsentry_sdk.scoper   r   r   Úsentry_sdk.sessionsr   Úsentry_sdk.tracesr   r   Úsentry_sdk.tracingr   r   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Úsentry_sdk._typesr&   r'   r(   r)   r*   r+   r-   rv   rˆ   r=   rH   r¢   rZ   r\   r‘   rµ   r„   r“   r•   r   r�   r5   r9   r7   ú<module>r     s~  ðØ 
€
€
€
Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø WÐ WÐ WÐ WÐ WÐ Wðð ð ð ð ð ð ð ð QÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ -Ð -Ð -Ð -Ð -Ð -Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø(Ð(Ð(Ð(Ð(Ð(à�wÐ1Ñ2Ô2ÐØ!˜'Ð"7Ñ8Ô8ÐØ�'˜-Ñ(Ô(€Kðð ð ð ð ˜ñ ô ð ð &˜:Ð&FÑGÔGÐ Ø2Ð ð6ð 6˜3ð 6¨ð 6Àð 6ÐTWð 6ð 6ð 6ð 6ð
 <Aðð ØðØ48ðàðð ð ð ð(E0ð E0ð E0ð E0ð E0ñ E0ô E0ð E0ðZ )-ðFð FØ'ðFà
/ðFð ðFð ,ð	Fð
 &ðFð ðFð Fð Fð Fð2$ð $ð $ð $ð*&ð &ð &ð &ð&ð ð ð ð*(/ð (/ð (/ð (/ð (/ñ (/ô (/ð (/ðV9Øð9Ø48ð9àð9ð 9ð 9ð 9ð| !&ðMð MØðMàðMð ðMð Mð Mð Mð Mð Mr9   