+
    Ni"                     p   ^ RI t ^ RIt^ RIHtHtHt ^ RIHt ^ RIt^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ]'       d+   ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt RR R llt]R R R ll4       tR R ltR R lt]R!R R ll4       t]R!R R ll4       tR"t^dtR R lt  ! R R4      t!R# )#    N)ThreadLockEvent)contextmanager)Envelope)Session)format_timestamp)TYPE_CHECKING)Any)Callable)Dict)	Generator)List)Optional)Unionc                     V ^8  d   QhRRRR/# )   hubOptional[sentry_sdk.Hub]returnzUnion[Any, bool, None] )formats   ":/tmp/pip-target-e6j6ikcs/lib/python/sentry_sdk/sessions.py__annotate__r      s      	#    c                (   \         P                  ! R\        ^R7       V f   \        P                  P
                  p V P                  P                  pVf=   V P                  '       d   V P                  P                  M/ pVP                  RR4      pV# )zHDEPRECATED: Utility function to find out if session tracking is enabled.nThis function is deprecated and will be removed in the next major release. There is no public API replacement.
stacklevelauto_session_trackingF)warningswarnDeprecationWarning
sentry_sdkHubcurrentscope_force_auto_session_trackingclientoptionsget)r   should_trackclient_optionss   &  r    is_auto_session_tracking_enabledr.      sx     MM	.	 {nn$$9999L/2zzz++r%))*A5Ir   c                ,    V ^8  d   QhRRR\         RR/# )r   r   r   session_moder   Generator[None, None, None]str)r   s   "r   r   r   1   s$      	#:="r   c              #    "   \         P                  ! R\        ^R7       V f   \        P                  P
                  p \         P                  ! 4       ;_uu_ 4        \         P                  ! R\        4       \        V 4      pRRR4       X'       d   V P                  VR7        Rx  V'       d   V P                  4        R# R#   + '       g   i     LK; i  T'       d   T P                  4        i i ; i5i)z_DEPRECATED: Use track_session instead
Starts and stops a session automatically around a block.
zeThis function is deprecated and will be removed in the next major release. Use track_session instead.r   Nignorer0   )r!   r"   r#   r$   r%   r&   catch_warningssimplefilterr.   start_sessionend_session)r   r0   r,   s   && r   r    r    0   s      MM	%	 {nn$$		 	 	"	"h(:;7< 
# |4OO  
#	" OO s<   AC6'CC6C6%C )C6C	C6C33C6c                (    V ^8  d   QhRRR\         /# r   r'   sentry_sdk.Scoper   bool)r   s   "r   r   r   L   s     4 42D 4 4r   c                R    \         P                  ! R\        ^R7       \        V 4      # )zJ
DEPRECATED: Utility function to find out if session tracking is enabled.
r   r   )r!   r"   r#   !_is_auto_session_tracking_enabled)r'   s   &r   &is_auto_session_tracking_enabled_scoperB   L   s(    
 MM	.	 -U33r   c                (    V ^8  d   QhRRR\         /# r<   r>   )r   s   "r   r   r   \   s     
 
-? 
D 
r   c                    V P                   pVf2   \        P                  ! 4       P                  pVP	                  RR4      pV# )z>
Utility function to find out if session tracking is enabled.
r    F)r(   r$   
get_clientr*   r+   )r'   r,   r-   s   &  r   rA   rA   \   sB    
 55L#..088%))*A5Ir   c                ,    V ^8  d   QhRRR\         RR/# r   r'   r=   r0   r   r1   r2   )r   s   "r   r   r   j   s$      -0"r   c              #     "   \         P                  ! R\        ^R7       \        WR7      ;_uu_ 4        Rx  RRR4       R#   + '       g   i     R# ; i5i)z|DEPRECATED: This function is a deprecated alias for track_session.
Starts and stops a session automatically around a block.
zdThis function is a deprecated alias for track_session and will be removed in the next major release.r   r6   N)r!   r"   r#   track_session)r'   r0   s   &&r   auto_session_tracking_scoperJ   i   s:      MMn 
u	8	8 
9	8	8	8s   2AA
AA		Ac                ,    V ^8  d   QhRRR\         RR/# rG   r2   )r   s   "r   r   r   |   s$         -0 " r   c              #     "   \        V 4      pV'       d   V P                  VR7        Rx  V'       d   V P                  4        R# R#   T'       d   T P                  4        i i ; i5i)z
Start a new session in the provided scope, assuming session tracking is enabled.
This is a no-op context manager if session tracking is not enabled.
r6   N)rA   r9   r:   )r'   r0   r,   s   && r   rI   rI   {   sU      5U;L6  < s   &A'A	 A'	A$$A'c                $    V ^8  d   QhRRRRRR/# )r   aggregate_statesr   attrsr   r   )r   s   "r   r   r      s&     Q Qe QE Qe Qr   c                 N    R \        V4      R\        V P                  4       4      /# )rO   
aggregates)dictlistvalues)rN   rO   s   &&r   make_aggregate_enveloperU      s$    T%[,5E5L5L5N0OPPr   c                      a  ] tR t^t o RV 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	Rt
V tR# )SessionFlusherc                (   < V ^8  d   QhRRRS[ RR/# )r   capture_funczCallable[[Envelope], None]flush_intervalr   N)int)r   __classdict__s   "r   r   SessionFlusher.__annotate__   s)     , ,2, , 
	,r   c                    Wn         W n        . V n        / V n        R V n        \        4       V n        \        4       V n        R V n        \        4       V n
        R # N)rY   rZ   pending_sessionspending_aggregates_threadr   _thread_lock_aggregate_lock_thread_for_pidr   #_SessionFlusher__shutdown_requested)selfrY   rZ   s   &&&r   __init__SessionFlusher.__init__   sM    
 ),-/46+/ F#v04$)G!r   c                   < V ^8  d   QhRR/# r   r   Nr   )r   r\   s   "r   r   r]      s     ( (t (r   c                   V P                   p. V n         V P                  ;_uu_ 4        V P                  p/ V n        R R R 4       \        4       pV FM  p\	        VP
                  4      \        8X  d   V P                  V4       \        4       pVP                  V4       KO  	  XP                  4        FX  w  rV\	        VP
                  4      \        8X  d   V P                  V4       \        4       pVP                  \        We4      4       KZ  	  \	        VP
                  4      ^ 8  d   V P                  V4       R # R #   + '       g   i     EL	; ir_   )r`   rd   ra   r   lenitemsMAX_ENVELOPE_ITEMSrY   add_sessionadd_sessionsrU   )rg   r`   ra   envelopesessionrO   statess   &      r   flushSessionFlusher.flush   s   00 "!!!!%!8!8&(D# " :'G8>>"&88!!(+#:  ) ( 0557ME8>>"&88!!(+#:!!"9&"HI 8 x~~"h' #' "!!s   D<<E	c                   < V ^8  d   QhRR/# rk   r   )r   r\   s   "r   r   r]      s     ! ! !r   c                P  a  S P                   \        P                  ! 4       8X  d   S P                  e   R# S P                  ;_uu_ 4        S P                   \        P                  ! 4       8X  d   S P                  e    RRR4       R# R V 3R llp\        VR7      pRVn         VP                  4        TS n        \        P                  ! 4       S n         RRR4       R#   \         d'    S P                  P                  4         RRR4       R# i ; i  + '       g   i     R# ; i)z
Check that we have an active thread to run in, or create one if not.

Note that this might fail (e.g. in Python 3.12 it's not possible to
spawn new threads at interpreter shutdown). In that case self._running
will be False after running this function.
Nc                    V ^8  d   QhRR/# rk   r   )r   s   "r   r   4SessionFlusher._ensure_running.<locals>.__annotate__   s     ! !T !r   c                     < R p V '       d=   SP                   P                  SP                  4      '       * p SP                  4        KD  R# )TN)rf   waitrZ   ru   )runningrg   s    r   rb   /SessionFlusher._ensure_running.<locals>._thread   s8    "&";";"@"@ATAT"UUGJJL r   )targetT)re   osgetpidrb   rc   r   daemonstartRuntimeErrorrf   set)rg   rb   threads   f  r   _ensure_runningSessionFlusher._ensure_running   s     299;.4<<3K##ryy{2t||7O ! ! 7+F FM "DL#%99;D + .     ))--/%  . s6   
4DD%C 5!D %DDDDD%	c                "   < V ^8  d   QhRRRR/# r   rs   r   r   Nr   )r   r\   s   "r   r   r]      s     = == 
=r   c                   V P                   ;_uu_ 4        VP                  R R7      p\        \        VP	                  4       4      4      pVP
                  pV P                  P                  V/ 4      pVP                  V/ 4      pRV9  d   \        VP
                  4      VR&   VP                  R8X  d   VP                  R^ 4      ^,           VR&   MxVP                  R8X  d   VP                  R^ 4      ^,           VR&   MJVP                  ^ 8  d   VP                  R^ 4      ^,           VR&   MVP                  R^ 4      ^,           VR&   RRR4       R#   + '       g   i     R# ; i)F)with_user_infostartedcrashedabnormalerroredexitedN)rd   get_json_attrstuplesortedrn   truncated_startedra   
setdefaultr	   statusr+   errors)rg   rs   rO   primary_keysecondary_keyrt   states   &&     r   add_aggregate_session$SessionFlusher.add_aggregate_session   s&    !!!**%*@Eu{{} 56K#55M,,77RHF%%mR8E%#3G4M4M#Ni  ~~*#(99Y#:Q#>i :-$)IIj!$<q$@j!!##(99Y#:Q#>i "'))Ha"81"<h% "!!!s   D4EE$	c                "   < V ^8  d   QhRRRR/# r   r   )r   r\   s   "r   r   r]     s       
r   c                    VP                   R 8X  d   V P                  V4       M)V P                  P                  VP	                  4       4       V P                  4        R# )requestN)r0   r   r`   appendto_jsonr   )rg   rs   s   &&r   rp   SessionFlusher.add_session  sG     9,&&w/!!(():;r   c                   < V ^8  d   QhRR/# rk   r   )r   r\   s   "r   r   r]     s     ( (d (r   c                :    V P                   P                  4        R # r_   )rf   r   )rg   s   &r   killSessionFlusher.kill  s    !!%%'r   )	__shutdown_requestedrd   rb   re   rc   rY   rZ   ra   r`   N)<   )__name__
__module____qualname____firstlineno__rh   ru   r   r   rp   r   __static_attributes____classdictcell__)r\   s   @r   rW   rW      sB     , ,( (4! !F= => ( (r   rW   r_   )Napplication)r   )r   r   r   )"r   r!   	threadingr   r   r   
contextlibr   r$   sentry_sdk.enveloper   sentry_sdk.sessionr   sentry_sdk.utilsr	   typingr
   r   r   r   r   r   r   r   r.   r    rB   rA   rJ   rI   TERMINAL_SESSION_STATESro   rU   rW   r   r   r   <module>r      s    	  ) ) %  ( & -   2  64 
  "    $ <  Qw( w(r   