o
    h$                     @   s@  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m	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ erPd d	lmZ d d
lmZ d dlmZ d dlmZ ejZejZejdejdejdejdejdejdejdej diZ!e"g dZ#dd Z$G dd deZ%G dd dej&e'Z(G dd de(Z)e)Z*G dd de(Z+dS )    )absolute_importN)fnmatch)Hub)	to_stringevent_from_exceptioncurrent_stacktracecapture_internal_exceptions)Integration)	iteritemsutc_from_timestamp)TYPE_CHECKING)	LogRecord)Any)Dict)Optionalnotsetdebuginfowarningerrorfatal)zsentry_sdk.errorszurllib3.connectionpoolzurllib3.connectionc                 C   s   t |  dS )a|  This disables recording (both in breadcrumbs and as events) calls to
    a logger of a specific name.  Among other uses, many of our integrations
    use this to prevent their actions being recorded as breadcrumbs. Exposed
    to users as a way to quiet spammy loggers.

    :param name: The name of the logger to ignore (same string you would pass to ``logging.getLogger``).
    N)_IGNORED_LOGGERSadd)name r   b/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/logging.pyignore_logger0   s   r   c                   @   s2   e Zd ZdZeefddZdd Zedd Z	dS )	LoggingIntegrationloggingc                 C   s<   d | _ d | _|d urt|d| _|d urt|d| _ d S d S )N)level)_handler_breadcrumb_handlerBreadcrumbHandlerEventHandler)selfr   event_levelr   r   r   __init__A   s   zLoggingIntegration.__init__c                 C   sT   | j d ur|j| j jkr| j | | jd ur&|j| jjkr(| j| d S d S d S N)r    levelnor   handler!   r$   recordr   r   r   _handle_recordL   s   
z!LoggingIntegration._handle_recordc                     s    t jj  fdd} | t j_d S )Nc              	      s   t }z! | |W |d ur!|j|vr"tjt}|d ur#|| S S S S |d ur=|j|vr>tjt}|d ur?|| w w w w r'   )r   r   r   currentget_integrationr   r,   )r$   r+   ignored_loggersintegrationold_callhandlersr   r   sentry_patched_callhandlers\   s   
zBLoggingIntegration.setup_once.<locals>.sentry_patched_callhandlers)r   LoggercallHandlers)r3   r   r1   r   
setup_onceW   s   zLoggingIntegration.setup_onceN)
__name__
__module____qualname__
identifierDEFAULT_LEVELDEFAULT_EVENT_LEVELr&   r,   staticmethodr6   r   r   r   r   r   >   s    r   c                   @   s,   e Zd ZedZdd Zdd Zdd ZdS )	_BaseHandler)argscreatedexc_infoexc_textfilenamefuncName	levelnamer(   linennolinenomessagemodulemsecsmsgr   pathnameprocessprocessNamerelativeCreatedstacktagstaskNamethread
threadName
stack_infoc                 C   s    t D ]}t|j|r dS qdS )z'Prevents ignored loggers from recordingFT)r   r   r   )r$   r+   loggerr   r   r   _can_record   s
   z_BaseHandler._can_recordc                 C   s    t |j|jr|j S dS )N )LOGGING_TO_EVENT_LEVELgetr(   rE   lowerr*   r   r   r   _logging_to_event_level   s
   z$_BaseHandler._logging_to_event_levelc                    s    fddt t|D S )Nc                    s4   i | ]\}}| j vrt|tr|d s||qS )_)COMMON_RECORD_ATTRS
isinstancestr
startswith).0kvr$   r   r   
<dictcomp>   s    
z3_BaseHandler._extra_from_record.<locals>.<dictcomp>)r
   varsr*   r   re   r   _extra_from_record   s   

z_BaseHandler._extra_from_recordN)r7   r8   r9   	frozensetr^   rW   r\   rh   r   r   r   r   r>   q   s    r>   c                   @   s    e Zd ZdZdd Zdd ZdS )r#   z
    A logging handler that emits Sentry events for each log record

    Note that you do not have to use this class if the logging integration is enabled, which it is by default.
    c                 C   >   t   | | | |W  d    S 1 sw   Y  d S r'   r   format_emitr*   r   r   r   emit      
$zEventHandler.emitc                 C   sT  |  |sd S tj}|jd u rd S |jj}|jr-|jd d ur-t|j|dddd\}}n9|jrb|jd d u rbi }i }t  dt|d |d d	d
ddgi|d< W d    n1 s\w   Y  ni }i }||d< | 	||d< |j
|d< |j
dko|jdk}|r|jd }|dd|d< nt|j|jd|d< | ||d< |j||d d S )Nr   r   T)typehandled)client_options	mechanismvaluesinclude_local_variablesmax_value_length)ru   rv   F)
stacktracecrashedr-   threads
log_recordr   rV   zpy.warningsz%sr   )rH   paramslogentryextrahint)rW   r   r-   clientoptionsrA   r   r   r   r\   r   rK   r?   r   rh   capture_event)r$   r+   hubrr   eventr   %record_caputured_from_warnings_modulerK   r   r   r   rm      s^   





zEventHandler._emitN)r7   r8   r9   __doc__rn   rm   r   r   r   r   r#      s    r#   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r"   z
    A logging handler that records breadcrumbs for each log record.

    Note that you do not have to use this class if the logging integration is enabled, which it is by default.
    c                 C   rj   r'   rk   r*   r   r   r   rn     ro   zBreadcrumbHandler.emitc                 C   s,   |  |sd S tjj| |d|id d S )Nrz   r~   )rW   r   r-   add_breadcrumb_breadcrumb_from_recordr*   r   r   r   rm     s
   

zBreadcrumbHandler._emitc                 C   s(   d|  ||j|jt|j| |dS )Nlog)rp   r   categoryrH   	timestampdata)r\   r   rH   r   r@   rh   r*   r   r   r   r     s   z)BreadcrumbHandler._breadcrumb_from_recordN)r7   r8   r9   r   rn   rm   r   r   r   r   r   r"     s
    	r"   ),
__future__r   r   r   sentry_sdk.hubr   sentry_sdk.utilsr   r   r   r   sentry_sdk.integrationsr	   sentry_sdk._compatr
   r   sentry_sdk._typesr   r   typingr   r   r   INFOr;   ERRORr<   NOTSETDEBUGWARNWARNINGFATALCRITICALrY   setr   r   r   Handlerobjectr>   r#   SentryHandlerr"   r   r   r   r   <module>   sB    37Y