§
    xÅj_"  ã                   ój  — d dl Z d dlZd dlmZ d dlmZmZ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 e	rd dlmZmZmZmZmZmZmZ 	 d 	 	 	 d!d„Ze	 d"d	d
deddfd„¦   «         Zdddefd„Zdddefd„Ze	 d#dddeddfd„¦   «         Ze	 d#dddeddfd„¦   «         ZdZ dZ!d$d„Z" G d„ d¦  «        Z#dS )%é    N)Úcontextmanager)ÚEventÚLockÚThread)ÚTYPE_CHECKING)ÚEnvelope)ÚSession)Úformat_timestamp)ÚAnyÚCallableÚDictÚ	GeneratorÚListÚOptionalÚUnionÚhubúOptional[sentry_sdk.Hub]ÚreturnúUnion[Any, bool, None]c                 óÖ   — t          j        dt          d¬¦  «         | €t          j        j        } | j        j        }|€+| j        r| j        j	        ni }| 
                    dd¦  «        }|S )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.é   ©Ú
stacklevelNÚauto_session_trackingF)ÚwarningsÚwarnÚDeprecationWarningÚ
sentry_sdkÚHubÚcurrentÚscopeÚ_force_auto_session_trackingÚclientÚoptionsÚget)r   Úshould_trackÚclient_optionss      úDC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/sessions.pyÚ is_auto_session_tracking_enabledr*      s{   € õ „Mð	.åØð	ñ ô ð ð €{ÝŒnÔ$ˆà”9Ô9€LàÐØ/2¬zÐA˜œÔ+Ð+¸rˆØ%×)Ò)Ð*AÀ5ÑIÔIˆàÐó    ÚapplicationÚsession_modezGenerator[None, None, None]c              #   ó²  K  — t          j        dt          d¬¦  «         | €t          j        j        } t          j        ¦   «         5  t          j        dt          ¦  «         t          | ¦  «        }ddd¦  «         n# 1 swxY w Y   |r|  	                    |¬¦  «         	 dV — |r|  
                    ¦   «          dS dS # |r|  
                    ¦   «          w w xY w)zgDEPRECATED: 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   r   NÚignore©r-   )r   r   r   r   r    r!   Úcatch_warningsÚsimplefilterr*   Ústart_sessionÚend_session)r   r-   r'   s      r)   r   r   )   s<  è è € õ „Mð	%åØð	ñ ô ð ð €{ÝŒnÔ$ˆÝ	Ô	 Ñ	"Ô	"ð =ð =ÝÔ˜hÕ(:Ñ;Ô;Ð;Ý7¸Ñ<Ô<ˆð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð ð 5Ø×Ò |ÐÑ4Ô4Ð4ðØˆˆˆàð 	Ø�OŠOÑÔÐÐÐð	ð 	øˆ<ð 	Ø�OŠOÑÔÐÐð	øøøs   Á*A;Á;A?ÂA?ÂB= Â=Cr"   zsentry_sdk.Scopec                 óX   — t          j        dt          d¬¦  «         t          | ¦  «        S )zR
    DEPRECATED: Utility function to find out if session tracking is enabled.
    r   r   r   )r   r   r   Ú!_is_auto_session_tracking_enabled)r"   s    r)   Ú&is_auto_session_tracking_enabled_scoper7   E   s8   € õ
 „Mð	.åØð	ñ ô ð õ -¨UÑ3Ô3Ð3r+   c                 ót   — | j         }|€.t          j        ¦   «         j        }|                     dd¦  «        }|S )zF
    Utility function to find out if session tracking is enabled.
    Nr   F)r#   r   Ú
get_clientr%   r&   )r"   r'   r(   s      r)   r6   r6   U   s?   € ð
 Ô5€LØÐÝ#Ô.Ñ0Ô0Ô8ˆØ%×)Ò)Ð*AÀ5ÑIÔIˆàÐr+   c              #   óž   K  — t          j        dt          d¬¦  «         t          | |¬¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS )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   r   r0   N)r   r   r   Útrack_session)r"   r-   s     r)   Úauto_session_tracking_scoper<   b   s¬   è è € õ „MØnÝØðñ ô ð õ 
�u¨<Ð	8Ñ	8Ô	8ð ð Øˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   °AÁAÁ	Ac              #   óÊ   K  — t          | ¦  «        }|r|                      |¬¦  «         	 dV — |r|                      ¦   «          dS dS # |r|                      ¦   «          w w xY w)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.
    r0   N)r6   r3   r4   )r"   r-   r'   s      r)   r;   r;   t   s‘   è è € õ 5°UÑ;Ô;€LØð 7Ø×Ò¨ÐÑ6Ô6Ð6ð Øˆˆˆàð 	 Ø×ÒÑÔÐÐÐð	 ð 	 øˆ<ð 	 Ø×ÒÑÔÐÐð	 øøøs   «A	 Á	A")ÚexitedÚabnormalÚcrashedéd   Úaggregate_statesr   Úattrsc                 ód   — t          |¦  «        t          |                      ¦   «         ¦  «        dœS )N)rC   Ú
aggregates)ÚdictÚlistÚvalues)rB   rC   s     r)   Úmake_aggregate_enveloperI   ‹   s+   € Ý˜%‘[”[µÐ5E×5LÒ5LÑ5NÔ5NÑ0OÔ0OÐPÐPÐPr+   c                   ó^   — e Zd Z	 ddddeddfd„Zdd„Zdd	„Z	 	 	 	 dd„Z	 	 	 	 dd„Zdd„Z	dS )ÚSessionFlusheré<   Úcapture_funczCallable[[Envelope], None]Úflush_intervalr   Nc                 óÌ   — || _         || _        g | _        i | _        d | _        t          ¦   «         | _        t          ¦   «         | _        d | _        t          ¦   «         | _
        d S ©N)rM   rN   Úpending_sessionsÚpending_aggregatesÚ_threadr   Ú_thread_lockÚ_aggregate_lockÚ_thread_for_pidr   Ú#_SessionFlusher__shutdown_requested)ÚselfrM   rN   s      r)   Ú__init__zSessionFlusher.__init__�   s]   € ð
 )ˆÔØ,ˆÔØ-/ˆÔØ46ˆÔØ+/ˆŒÝ ™FœFˆÔÝ#™vœvˆÔØ04ˆÔÝ$)¡G¤GˆÔ!Ð!Ð!r+   c                 ó¤  — | j         }g | _         | j        5  | j        }i | _        d d d ¦  «         n# 1 swxY w Y   t          ¦   «         }|D ]W}t	          |j        ¦  «        t          k    r#|                      |¦  «         t          ¦   «         }|                     |¦  «         ŒX|                     ¦   «         D ]h\  }}t	          |j        ¦  «        t          k    r#|                      |¦  «         t          ¦   «         }| 	                    t          ||¦  «        ¦  «         Œit	          |j        ¦  «        dk    r|                      |¦  «         d S d S )Nr   )rQ   rU   rR   r   ÚlenÚitemsÚMAX_ENVELOPE_ITEMSrM   Úadd_sessionÚadd_sessionsrI   )rX   rQ   rR   ÚenvelopeÚsessionrC   Ústatess          r)   ÚflushzSessionFlusher.flushŸ   s“  € ØÔ0ÐØ "ˆÔàÔ!ð 	)ð 	)Ø!%Ô!8ÐØ&(ˆDÔ#ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)õ ‘:”:ˆØ'ð 	*ð 	*ˆGÝ�8”>Ñ"Ô"Õ&8Ò8Ð8Ø×!Ò! (Ñ+Ô+Ð+Ý#™:œ:�à× Ò  Ñ)Ô)Ð)Ð)à/×5Ò5Ñ7Ô7ð 	Jð 	J‰MˆE�6Ý�8”>Ñ"Ô"Õ&8Ò8Ð8Ø×!Ò! (Ñ+Ô+Ð+Ý#™:œ:�à×!Ò!Õ"9¸&À%Ñ"HÔ"HÑIÔIÐIÐIåˆxŒ~ÑÔ Ò"Ð"Ø×Ò˜hÑ'Ô'Ð'Ð'Ð'ð #Ð"s   –1±5¸5c                 ó   ‡ — ‰ j         t          j        ¦   «         k    r	‰ j        �dS ‰ j        5  ‰ j         t          j        ¦   «         k    r‰ j        �	 ddd¦  «         dS dˆ fd„}t          |¬¦  «        }d|_        	 |                     ¦   «          n5# t          $ r( ‰ j	         
                    ¦   «          Y ddd¦  «         dS w xY w|‰ _        t          j        ¦   «         ‰ _         ddd¦  «         n# 1 swxY w Y   dS )a%  
        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.
        Nr   c                  ó€   •— d} | r8‰j                              ‰j        ¦  «         } ‰                     ¦   «          | °6d S d S )NT)rW   ÚwaitrN   rc   )ÚrunningrX   s    €r)   rS   z/SessionFlusher._ensure_running.<locals>._threadÇ   sW   ø€ Ø�Øð !Ø"&Ô";×"@Ò"@ÀÔATÑ"UÔ"UÐU�GØ—J’J‘L”L�Lð ð !ð !ð !ð !ð !r+   )ÚtargetT©r   N)rV   ÚosÚgetpidrS   rT   r   ÚdaemonÚstartÚRuntimeErrorrW   Úset)rX   rS   Úthreads   `  r)   Ú_ensure_runningzSessionFlusher._ensure_running¹   s�  ø€ ð Ô¥2¤9¡;¤;Ò.Ð.°4´<Ð3KØ�4ØÔð 	/ð 	/ØÔ#¥r¤y¡{¤{Ò2Ð2°t´|Ð7OØð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð!ð !ð !ð !ð !ð !õ  7Ð+Ñ+Ô+ˆFØ ˆFŒMðØ—’‘”��øÝð ð ð ð Ô)×-Ò-Ñ/Ô/Ð/Øð%	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ðøøøð "ˆDŒLÝ#%¤9¡;¤;ˆDÔ ð+	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð. ˆts;   ®%C3Á C3Á>BÂC3Â#CÂ6C3ÃCÃ"C3Ã3C7Ã:C7ra   r	   c                 óœ  — | j         5  |                     d¬¦  «        }t          t          |                     ¦   «         ¦  «        ¦  «        }|j        }| j                             |i ¦  «        }|                     |i ¦  «        }d|vrt          |j        ¦  «        |d<   |j	        dk    r| 
                    dd¦  «        dz   |d<   nl|j	        dk    r| 
                    dd¦  «        dz   |d<   nD|j        dk    r| 
                    dd¦  «        dz   |d<   n| 
                    d	d¦  «        dz   |d	<   d d d ¦  «         d S # 1 swxY w Y   d S )
NF)Úwith_user_infoÚstartedr@   r   é   r?   Úerroredr>   )rU   Úget_json_attrsÚtupleÚsortedr\   Útruncated_startedrR   Ú
setdefaultr
   Ústatusr&   Úerrors)rX   ra   rC   Úprimary_keyÚsecondary_keyrb   Ústates          r)   Úadd_aggregate_sessionz$SessionFlusher.add_aggregate_sessionÜ   sž  € ð Ô!ð 	=ð 	=Ø×*Ò*¸%Ð*Ñ@Ô@ˆEÝ¥ u§{¢{¡}¤}Ñ 5Ô 5Ñ6Ô6ˆKØ#Ô5ˆMØÔ,×7Ò7¸ÀRÑHÔHˆFØ×%Ò% m°RÑ8Ô8ˆEà Ð%Ð%Ý#3°GÔ4MÑ#NÔ#N��iÑ ð Œ~ Ò*Ð*Ø#(§9¢9¨Y¸Ñ#:Ô#:¸QÑ#>��iÑ Ð Ø” :Ò-Ð-Ø$)§I¢I¨j¸!Ñ$<Ô$<¸qÑ$@��jÑ!Ð!Ø” !Ò#Ð#Ø#(§9¢9¨Y¸Ñ#:Ô#:¸QÑ#>��iÑ Ð à"'§)¢)¨H°aÑ"8Ô"8¸1Ñ"<��h‘ð%	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   ˆD,EÅEÅEc                 óÈ   — |j         dk    r|                      |¦  «         n,| j                             |                     ¦   «         ¦  «         |                      ¦   «          d S )NÚrequest)r-   r�   rQ   ÚappendÚto_jsonrq   )rX   ra   s     r)   r^   zSessionFlusher.add_sessionû   sb   € ð Ô 9Ò,Ð,Ø×&Ò& wÑ/Ô/Ð/Ð/àÔ!×(Ò(¨¯ªÑ):Ô):Ñ;Ô;Ð;Ø×ÒÑÔÐÐÐr+   c                 ó8   — | j                              ¦   «          d S rP   )rW   ro   )rX   s    r)   ÚkillzSessionFlusher.kill  s   € ØÔ!×%Ò%Ñ'Ô'Ð'Ð'Ð'r+   )rL   ri   )ra   r	   r   N)
Ú__name__Ú
__module__Ú__qualname__ÚintrY   rc   rq   r�   r^   r‡   © r+   r)   rK   rK   �   s×   € € € € € ð !ð,ð ,à2ð,ð ð,ð 
ð	,ð ,ð ,ð ,ð(ð (ð (ð (ð4!ð !ð !ð !ðF=àð=ð 
ð=ð =ð =ð =ð>àðð 
ðð ð ð ð(ð (ð (ð (ð (ð (r+   rK   rP   )r   r   r   r   )Nr,   )r,   )rB   r   rC   r   r   r   )$rj   r   Ú
contextlibr   Ú	threadingr   r   r   Útypingr   r   Úsentry_sdk.enveloper   Úsentry_sdk.sessionr	   Úsentry_sdk.utilsr
   r   r   r   r   r   r   r   r*   Ústrr   Úboolr7   r6   r<   r;   ÚTERMINAL_SESSION_STATESr]   rI   rK   rŒ   r+   r)   ú<module>r–      sk  ðØ 	€	€	€	Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &Ø -Ð -Ð -Ð -Ð -Ð -àð MØLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLð '+ðØ	#ðàðð ð ð ð2 à@Mðð Ø	#ðØ:=ðà"ðð ð ñ „ðð64Ð2Dð 4Èð 4ð 4ð 4ð 4ð 
Ð-?ð 
ÀDð 
ð 
ð 
ð 
ð à3@ðð ØðØ-0ðà"ðð ð ñ „ðð" à3@ð ð  Øð Ø-0ð à"ð ð  ð  ñ „ð ð$ <Ð ØÐ ðQð Qð Qð Qðw(ð w(ð w(ð w(ð w(ñ w(ô w(ð w(ð w(ð w(r+   