§
    xÅj›  ã            
       óº  — d dl Z d dlm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mZ d dlmZmZ d d	lmZ d d
lmZmZ erd dlmZmZmZmZmZ d dlmZ 	 d dlmZm Z m!Z! n# e$ r  ed¦  «        ‚w xY w	 d dl"Z"n# e#$ r  ed¦  «        ‚w xY wdZ$e j%        dk    rd dl&m'Z' nd dl(m'Z'  G d„ de¦  «        Z)ddde*ddddddf
d„Z+	 	 	 	 	 	 	 	 d%d#„Z,d&d$„Z-dS )'é    N)Údeepcopy)Úwraps)ÚTYPE_CHECKING)ÚSPANDATA)ÚDidNotEnable)ÚStreamedSpanÚget_current_span)ÚSOURCE_FOR_STYLEÚTransactionSource)Úhas_span_streaming_enabled)Úhas_data_collection_enabledÚtransaction_from_function)ÚAnyÚ	AwaitableÚCallableÚDictÚOptional)ÚEvent)ÚStarletteIntegrationÚStarletteRequestExtractorÚ"_get_cached_request_body_attributezStarlette is not installedzFastAPI is not installedzgeneric FastAPI request)é   é   )Úiscoroutinefunctionc                   ó*   — e Zd ZdZedd„¦   «         ZdS )ÚFastApiIntegrationÚfastapiÚreturnNc                  ó"   — t          ¦   «          d S ©N)Úpatch_get_request_handler© ó    úPC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/fastapi.pyÚ
setup_oncezFastApiIntegration.setup_once/   s   € å!Ñ#Ô#Ð#Ð#Ð#r#   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚstaticmethodr%   r"   r#   r$   r   r   ,   s7   € € € € € Ø€Jàð$ð $ð $ñ „\ð$ð $ð $r#   r   Úscopezsentry_sdk.ScopeÚtransaction_styleÚendpointzOptional[Callable[..., Any]]Ú
route_pathzOptional[str]r   c                 óÆ   — d}|dk    r|rt          |¦  «        pd}n
|dk    r|�|}|st          }t          j        }nt          |         }|                      ||¬¦  «         d S )NÚ r.   Úurl)Úsource)r   Ú_DEFAULT_TRANSACTION_NAMEr   ÚROUTEr
   Úset_transaction_name)r,   r-   r.   r/   Únamer3   s         r$   Ú _set_transaction_name_and_sourcer8   4   sƒ   € ð €Dà˜JÒ&Ð&¨8Ð&Ý(¨Ñ2Ô2Ð8°bˆˆà	˜eÒ	#Ð	#¨
Ð(>Øˆàð 5Ý(ˆÝ"Ô(ˆˆå!Ð"3Ô4ˆà	×Ò˜t¨FÐÑ3Ô3Ð3Ð3Ð3r#   ÚhandlerúCallable[..., Awaitable[Any]]Úargsr   Úkwargsc              �   óÈ  ‡‡K  — t          j        ¦   «         Š‰                     t          ¦  «        }|€ | |i |¤Žƒ d{V —†S |d         }|j                             d¦  «        }d}|rY|j                             di ¦  «                             d¦  «        }t          |dd¦  «        }|r|}nt          |dd¦  «        }	|	�|	}t          j        ¦   «         j        }
|
�"|� |
 	                    t          j        |¦  «         t          t          j        ¦   «         |j        |j                             d¦  «        |¬¦  «         t          j        ¦   «         }t          |¦  «        }|                     ¦   «         ƒ d{V —†Š	 	 	 	 	 	 dˆˆfd„}t          j        |_        |                      |||¦  «        ¦  «         	  | |i |¤Žƒ d{V —†	 t)          ¦   «         }t+          |¦  «        t,          u rfd}t/          ‰j        ¦  «        rd‰j        d         d         v }|r:t3          ‰|¬¦  «        }|r(|j         	                    t          j        |¦  «         S S S S # t)          ¦   «         }t+          |¦  «        t,          u rfd}t/          ‰j        ¦  «        rd‰j        d         d         v }|r:t3          ‰|¬¦  «        }|r(|j         	                    t          j        |¦  «         w w w w xY w)a&  
    Wraps an asynchronous handler function to attach request info to errors and the server segment span.
    The request body cached on the Starlette Request object is attached to streamed spans, but consuming the request body in the event
    processor can still cause application hangs.
    Nr   Úrouter   Úeffective_route_contextÚpathr.   )r.   r/   Úreqr   Úintegrationr   ú(Callable[[Event, Dict[str, Any]], Event]c                 ó   •— dˆˆfd„}|S )NÚeventr   ÚhintúDict[str, Any]r   c                 óò   •— |                       di ¦  «        }‰rKd‰v r‰d         |d<   d‰v r8d}t          ‰j        ¦  «        rd‰j        d         d         v }|r‰d         |d<   t          |¦  «        | d<   | S )NÚrequestÚcookiesÚdataTÚincoming_requestÚdata_collectionÚhttp_bodies)Úgetr   Úoptionsr   )rE   rF   Úrequest_infoÚattach_request_dataÚclientÚinfos       €€r$   Úevent_processorzS_wrap_async_handler.<locals>._make_request_event_processor.<locals>.event_processor   s¥   ø€ à Ÿ9š9 Y°Ñ3Ô3ˆLØð <Ø Ð$Ð$Ø.2°9¬o�L Ñ+Ø˜T�>�>Ø*.Ð'Ý2°6´>ÑBÔBð à.Ø%œ~Ð.?Ô@ÀÔOðPð ,ð
 +ð <Ø/3°F¬|˜ VÑ,Ý'¨Ñ5Ô5ˆE�)ÑàˆLr#   )rE   r   rF   rG   r   r   r"   )rA   rB   rU   rS   rT   s      €€r$   Ú_make_request_event_processorz:_wrap_async_handler.<locals>._make_request_event_processor|   s.   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð( Ðr#   TrL   rM   rN   )rS   rI   )rA   r   rB   r   r   rC   )Ú
sentry_sdkÚ
get_clientÚget_integrationr   r,   rO   ÚgetattrÚget_current_scopeÚ_server_segment_spanÚset_attributer   Ú
HTTP_ROUTEr8   r-   Úget_isolation_scoper   Úextract_request_infor*   Ú_nameÚadd_event_processorr	   Útyper   r   rP   r   Ú_segmentÚHTTP_REQUEST_BODY_DATA)r9   r;   r<   rB   rI   r>   r/   r?   Úcontext_pathr@   Úserver_spanÚsentry_scopeÚ	extractorrV   Úcurrent_spanrR   Úrequest_bodyrS   rT   s                    @@r$   Ú_wrap_async_handlerrl   K   s¸  øøè è € õ Ô"Ñ$Ô$€FØ×(Ò(Õ);Ñ<Ô<€KØÐØ�W˜dÐ- fÐ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-à�1Œg€GàŒM×Ò˜gÑ&Ô&€Eà€JØð "ð
 #*¤-×"3Ò"3°I¸rÑ"BÔ"B×"FÒ"FØ%ñ#
ô #
Ðõ Ð6¸ÀÑEÔEˆàð 	"Ø%ˆJˆJå˜5 &¨$Ñ/Ô/ˆDØÐØ!�
åÔ.Ñ0Ô0ÔE€KØÐ :Ð#9Ø×!Ò!¥(Ô"5°zÑBÔBÐBå$ÝÔ$Ñ&Ô&ØÔ%Ø”×"Ò" :Ñ.Ô.Øð	ñ ô ð õ Ô1Ñ3Ô3€LÝ)¨'Ñ2Ô2€IØ×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1€DðØðØ!&ðà	3ðð ð ð ð ð ð õ2 ,Ô6€LÔØ×$Ò$Ø%Ð% g¨{Ñ;Ô;ñô ð ðØ�W˜dÐ- fÐ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-å'Ñ)Ô)ˆå�ÑÔ¥Ð-Ð-Ø"&ÐÝ*¨6¬>Ñ:Ô:ð à&Ø”~Ð&7Ô8¸ÔGðHð $ð
 #ð ÝAØ!¨7ð ñ  ô  �ð  ð Ø Ô)×7Ò7Ý Ô7Ø$ñô ð ð ð .ððøõ (Ñ)Ô)ˆå�ÑÔ¥Ð-Ð-Ø"&ÐÝ*¨6¬>Ñ:Ô:ð à&Ø”~Ð&7Ô8¸ÔGðHð $ð
 #ð ÝAØ!¨7ð ñ  ô  �ð  ð Ø Ô)×7Ò7Ý Ô7Ø$ñô ð ð ð .ððøøøs   Æ8I ÉBK!c                  óX   ‡— t           j        j        Šdˆfd„} | t           j        _        d S )Nr;   r   r<   r   c                  ó  •‡‡— |                      d¦  «        }|ra|j        �Zt          |j        ¦  «        sFt          |j        dd¦  «        s0|j        Št	          ‰¦  «        dˆfd„¦   «         }d	|_        ||_         ‰| i |¤ŽŠdˆfd
„}|S )NÚ	dependantÚ_sentry_is_patchedFr;   r   r<   r   c                  ó   •— t          j        ¦   «         }t          j        ¦   «         }t          |j        ¦  «        r9|j        }t          |¦  «        t          u r|j        }| 	                    ¦   «          n |j
        �|j
                             ¦   «          t          j        ¦   «         }|j        �|j                             ¦   «           ‰| i |¤ŽS r    )rW   r[   rX   r   rP   Ústreamed_spanrc   r   rd   Ú_update_active_threadÚtransactionÚupdate_active_threadr_   ÚprofileÚupdate_active_thread_id)r;   r<   Úcurrent_scoperS   rj   Úsegmentrh   Úold_calls          €r$   Ú_sentry_callzTpatch_get_request_handler.<locals>._sentry_get_request_handler.<locals>._sentry_callÄ   sÇ   ø€ å *Ô <Ñ >Ô >�å#Ô.Ñ0Ô0�Ý-¨f¬nÑ=Ô=ð EØ#0Ô#>�Lå˜LÑ)Ô)­\Ð9Ð9Ø".Ô"7˜Ø×5Ò5Ñ7Ô7Ð7øà"Ô.Ð:Ø!Ô-×BÒBÑDÔDÐDå)Ô=Ñ?Ô?�ØÔ'Ð3Ø Ô(×@Ò@ÑBÔBÐBà�x Ð0¨Ð0Ð0Ð0r#   Tc               Ÿ   ó4   •K  — t          ‰g| ¢R i |¤Žƒ d {V —†S r    )rl   )r;   r<   Úold_apps     €r$   Ú_sentry_appzSpatch_get_request_handler.<locals>._sentry_get_request_handler.<locals>._sentry_appÞ   s7   øè è € Ý,¨WÐF°tÐFÐFÐF¸vÐFÐFÐFÐFÐFÐFÐFÐFÐFr#   ©r;   r   r<   r   r   r   )rO   Úcallr   rZ   r   rp   )r;   r<   ro   r{   r~   r}   rz   Úold_get_request_handlers        @@€r$   Ú_sentry_get_request_handlerz>patch_get_request_handler.<locals>._sentry_get_request_handlerµ   sÚ   øøø€ Ø—J’J˜{Ñ+Ô+ˆ	àð#	*à”Ð*Ý'¨	¬Ñ7Ô7ð +õ ˜IœNÐ,@À%ÑHÔHð +ð !”~ˆHå�8‰_Œ_ð1ð 1ð 1ð 1ð 1ñ Œ_ð1ð( /3ˆLÔ+Ø)ˆIŒNà)Ð)¨4Ð:°6Ð:Ð:ˆð	Gð 	Gð 	Gð 	Gð 	Gð 	Gð Ðr#   r   )r   ÚroutingÚget_request_handler)r‚   r�   s    @r$   r!   r!   ²   s@   ø€ Ý%œoÔAÐð,ð ,ð ,ð ,ð ,ð ,ð\ +F…G„OÔ'Ð'Ð'r#   )r9   r:   r;   r   r<   r   r   r   r&   ).ÚsysÚcopyr   Ú	functoolsr   Útypingr   rW   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr   Úsentry_sdk.tracesr   r	   Úsentry_sdk.tracingr
   r   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   r   Úsentry_sdk._typesr   Ú!sentry_sdk.integrations.starletter   r   r   r   ÚImportErrorr4   Úversion_infoÚinspectr   Úasyncior   Ústrr8   rl   r!   r"   r#   r$   ú<module>r–      sÅ  ðØ 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sàð (Ø?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?à'Ð'Ð'Ð'Ð'Ð'ð5ðð ð ð ð ð ð ð ð ð ð øð
 ð 5ð 5ð 5Ø
ˆ,Ð3Ñ
4Ô
4Ð4ð5øøøð3Ø€N€N€N€NøØð 3ð 3ð 3Ø
ˆ,Ð1Ñ
2Ô
2Ð2ð3øøøð 6Ð ð Ô�wÒÐØ+Ð+Ð+Ð+Ð+Ð+Ð+à+Ð+Ð+Ð+Ð+Ð+ð$ð $ð $ð $ð $Ð-ñ $ô $ð $ð4Øð4àð4ð -ð4ð  ð	4ð
 
ð4ð 4ð 4ð 4ð.dØ,ðdØ5:ðdØFKðdà
ðdð dð dð dðN1Fð 1Fð 1Fð 1Fð 1Fð 1Fs   Á
A' Á'A8Á<B ÂB