o
    wi#                     @  s   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZmZ d dlmZ d dlmZmZmZ edZedZd	Zed
 ZdddZG dd dZdaded< e ZdddZ dS )    )annotationsN)TracebackType)AnyCallableLiteralTypeVarquote)ConcatenateNever	ParamSpec_P_TzRhttps://2592b1968ea94cca9b5ef5e348e094a7@o151352.ingest.sentry.io/4504800232407040)okexitedcrashedabnormalmethod%Callable[Concatenate[Sentry, _P], _T]return,Callable[Concatenate[Sentry, _P], _T | None]c                   s   t  d fd	d
}|S )zMake a Sentry method safe, lazy, and non-raising.

    The wrapped method becomes a no-op if Sentry is disabled,
    this instance belongs to a different PID, or lazy boot fails
    selfSentryargs_P.argskwargs	_P.kwargsr   	_T | Nonec                   s   | j sd S | jt krd S | js|  sd S z | g|R i |W S  ty\ } z- jdkrQt	t | 
d j d|  W d    n1 sLw   Y  W Y d }~d S d }~ww )N	exceptionz	Error in z: )_enabled_pidosgetpid_booted_boot	Exception__name__
contextlibsuppressr   )r   r   r   er    J/home/ubuntu/.local/lib/python3.10/site-packages/wandb/analytics/sentry.pywrapper#   s    
z_guard.<locals>.wrapperN)r   r   r   r   r   r   r   r   )	functoolswraps)r   r-   r+   r*   r,   _guard   s   	r0   c                   @  s   e Zd Zd-ddZed.dd	Zd/ddZe		d0d1ddZe		d2d3ddZ	d4d d!Z
ed5d"d#Zed5d$d%Zed6d7d&d'Ze		d8d9d+d,ZdS ):r   pidintr   Nonec                C  s`   ddl m} || _t| | _d| _t | _	d| _
t | _d | _d | _tj|jt| _d S )Nr   )envF)wandbr4   r    boolerror_reporting_enabledr   r#   	threadingLock
_boot_lock_atexit_registeredset_sent_messages_sdkscoper!   environget
SENTRY_DSNSENTRY_DEFAULT_DSNdsn)r   r1   _envr+   r+   r,   __init__A   s   
zSentry.__init__strc                 C  s&   t tjjjd }|rdS dS )Nz.gitdevelopment
production)pathlibPath__file__parentjoinpathexists)r   is_gitr+   r+   r,   environmentP   s   zSentry.environmentr6   c              	   C  s"  ddl m} | j~ | js	 W d   dS | jr"	 W d   dS z?ddl}ddl}ddl}|| _| jj	| j
d| j|d}| j  }|  || || _d| _| js`t| j d| _W n ty}   d| _d| _d| _d| _Y W d   dS w 	 W d   dS 1 sw   Y  dS )z*Import sentry_sdk and set up client/scope.r   )__version__NFT)rD   default_integrationsrQ   release)r5   rR   r:   r   r#   
sentry_sdksentry_sdk.scopesentry_sdk.utilsr>   ClientrD   rQ   get_global_scopeforkclear
set_clientr?   r;   atexitregisterend_sessionr%   )r   rR   rU   clientr?   r+   r+   r,   r$   U   sL   
	$zSentry._bootTinfomessagerepeatlevel
str | Nonec                 C  sb   |s	|| j v r	d S | j | | jj| j | jj||dW  d    S 1 s*w   Y  d S )N)rd   )r=   addr>   r?   use_isolation_scopecapture_message)r   rb   rc   rd   r+   r+   r,   rb      s   $zSentry.messageFNexcjstr | BaseException | tuple[type[BaseException] | None, BaseException | None, TracebackType | None] | NonehandledstatusSessionStatus | Nonec           	   	   C  s
  t |tr| jjt|}nt |tr| jj|}nt }| jjj	|| j
 jd|dd\}}d }tt& | jj
| j
 | j|}W d    n1 sTw   Y  W d    n1 scw   Y  |po|sndnd}| j|d | j
 }|d ur|  |S )Ngeneric)typerk   )client_options	mechanismr   erroredrl   )
isinstancerG   r>   utilsexc_info_from_errorr%   BaseExceptionsysexc_infoevent_from_exceptionr?   
get_clientoptionsr'   r(   rg   capture_eventmark_sessionflush)	r   ri   rk   rl   ry   event_event_idr`   r+   r+   r,   r      s.   




zSentry.exceptionr   r   c              	   C  sj   z|  | W t \}}}|durt|dr|||t \}}}|dur3t|dr3|||)z?Re-raise after logging, preserving traceback. Safe if disabled.Nwith_traceback)r   rx   ry   hasattrr   )r   ri   r   tbr+   r+   r,   reraise   s   

zSentry.reraisec                 C  s,   | j d u rd S | j jd u r| j   d S d S N)r?   _sessionstart_session)r   r+   r+   r,   r      s
   
zSentry.start_sessionc                 C  sN   | j d u rd S | j  }| j j}|d ur#|d ur%| j   |  d S d S d S r   )r?   r{   r   r_   r   )r   r`   sessionr+   r+   r,   r_      s   


zSentry.end_sessionc                 C  s2   | j d u rd S | j j}|d ur|j|d d S d S )Nrs   )r?   r   update)r   rl   r   r+   r+   r,   r~      s   
zSentry.mark_sessiontagsdict[str, Any] | Noneprocess_contextc                   sj  dd l }| jd u rd S d}|r| jd|  d u rd S |D ]} |d }|dvr1| j|| q dd r;d}n dd rDd}n d	d rMd
}nd}| jd| dD ]I}| d| d}	}
 |
d rlqXz,|j d } fdddD \}}| j|
| d| d| d| d |	  	 W qX ty   Y qXw  d}|rd|i| j_|   d S )Nr   )	entityprojectrun_idrun_url	sweep_urlsweep_id
deploymentlaunch	_platformr   )N _colabcolab_jupyterjupyter_ipythonipythonpythonpython_runtime)runsweep_id_urlbase_urlc                 3  s    | ]	}t  | V  qd S r   r   ).0kr   r+   r,   	<genexpr>  s    z)Sentry.configure_scope.<locals>.<genexpr>)r   r   /zs/email)	
wandb.utilr?   set_tagrA   utilapp_urlr%   userr   )r   r   r   r5   settings_tagstagvalr   objobj_idobj_urlr   r   r   r   r+   r   r,   configure_scope   sN   
"
zSentry.configure_scope)r1   r2   r   r3   )r   rG   )r   r6   )Tra   )rb   rG   rc   r6   rd   rG   r   re   )FN)ri   rj   rk   r6   rl   rm   r   re   )ri   r   r   r   )r   r3   r   )rl   rm   r   r3   )NN)r   r   r   re   r   r3   )r&   
__module____qualname__rF   propertyrQ   r$   r0   rb   r   r   r   r_   r~   r   r+   r+   r+   r,   r   @   s0    

.
&
	r   zSentry | None
_singletonc                  C  st   t  } t* tdurtj| krtW  d   S tdu s"tj| kr't| datW  d   S 1 s3w   Y  dS )zReturn the Sentry singleton for the current process (fork-aware).

    Creates a new instance in child processes after fork.
    Thread-safe within each process.
    Nr1   )r!   r"   _singleton_lockr   r    r   r   r+   r+   r,   
get_sentry   s   
$r   )r   r   r   r   )r   r   )!
__future__r   r]   r'   r.   r!   rJ   rx   r8   typesr   typingr   r   r   r   urllib.parser	   typing_extensionsr
   r   r   r   r   rC   SessionStatusr0   r   r   __annotations__r9   r   r   r+   r+   r+   r,   <module>   s.    
& ]