<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Y-                 @   s*  d dl m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 g Zi ZedZdd ZG d	d
 d
eZG dd deZd,ddZdd Zd-ddZdd Zd.ddZdd Zedd Zd/ddZdd Zd d! Zi Z d"d# Z!e!d$d%d& Z"e!d'd(d) Z#d*d+ Z$d dl%Z&dS )0    )absolute_importN)FunctionType)	iteritemsget_code	text_typestring_types)onceravenc             C   sP   | d |d koN| d |d koN| d |d koN| d |d koN| d |d kS )Ntypelevelmessagecategorydata )abr   r   B/opt/alt/python37/lib/python3.7/site-packages/raven/breadcrumbs.pyevent_payload_considered_equal   s
    r   c               @   s0   e Zd ZdddZdddZdd Zd	d
 ZdS )BreadcrumbBufferd   c             C   s   g | _ || _d S )N)bufferlimit)selfr   r   r   r   __init__   s    zBreadcrumbBuffer.__init__Nc          	   C   sZ   |s|s|st d|d kr$t }| j|p0d|||||d|f | jd | j = d S )Nz6You must pass either `message`, `data`, or `processor`default)r
   	timestampr   r   r   r   )
ValueErrortimer   appendr   )r   r   r   r   r   r   r
   	processorr   r   r   record#   s    zBreadcrumbBuffer.recordc             C   s   | j d d = d S )N)r   )r   r   r   r   clear4   s    zBreadcrumbBuffer.clearc          	   C   s   g }xt | jD ]v\}\}}|d k	rby|| W n" tk
rR   td d }Y nX |d f| j|< |d k	r|r|t|d |s|| qW |S )Nz&Failed to process breadcrumbs. Ignored)	enumerater   	Exceptionlogger	exceptionr   r   )r   rvidxpayloadr   r   r   r   
get_buffer7   s    

zBreadcrumbBuffer.get_buffer)r   )NNNNNNN)__name__
__module____qualname__r   r    r!   r*   r   r   r   r   r      s
   
 
r   c               @   s   e Zd Zdd ZdS )BlackholeBreadcrumbBufferc             O   s   d S )Nr   )r   argskwargsr   r   r   r    H   s    z BlackholeBreadcrumbBuffer.recordN)r+   r,   r-   r    r   r   r   r   r.   G   s   r.   Tc             C   s   | r
t  S t S )N)r   r.   )enabledr   r   r   make_bufferL   s    r2   c             O   s   | |d< t ||S )Nr
   )r    )r
   r/   r0   r   r   r   record_breadcrumbR   s    r3   c          
   C   s@   |dkrt   }x*tj D ]}|j||| |||| qW dS )zRecords a breadcrumb for all active clients.  This is what integration
    code should use rather than invoking the `captureBreadcrumb` method
    on a specific client.
    N)r   r	   contextZget_active_contextsZbreadcrumbsr    )r   r   r   r   r   r
   r   ctxr   r   r   r    X   s
    r    c                st   x$t D ]}| }|rd S qW tj}|d k	rR| }|rRd S  fdd}t|d d S )Nc                sb   }yt } r  }W n tk
r0   Y nX dd  | |jt d d S )Nexc_info)r   r   r   r   )r   r$   popupdatenamelogginggetLevelNamelower)r   Zformatted_msg)r/   r0   r   r%   msgr   r   r   q   s    z)_record_log_breadcrumb.<locals>.processor)r   )special_logging_handlersspecial_logger_handlersgetr9   r    )r%   r   r=   r/   r0   handlerr'   r   r   )r/   r0   r   r%   r=   r   _record_log_breadcrumbe   s    
rB   c       	   	   C   s   t | ts| j}n| }t|ddr&d S |d kr8d}d}nd}d| }t|}tj}|d krltj	tj
jj}i }ttdd|jd	  |jd
|||d |dtj| |d | t}|j|_|jt|jkst|j|jk |j|jk d|_|S )N__patched_for_raven__F)r   r=   z
level, msg)r=   z%d, msga  %(offset)sif 1:
    def factory(original, record_crumb):
        def %(name)s(self, %(args)s, *args, **kwargs):
            record_crumb(self, %(fwd)s, *args, **kwargs)
            return original(self, %(args)s, *args, **kwargs)
        return %(name)s
    

   z, )offsetr9   r/   fwdr   execfactoryT)
isinstancer   Zim_funcgetattrr   r:   _srcfileospathnormpathcurrentframe__code__co_filenameevalcompileco_firstlinenor+   join__dict__rB   __doc__AssertionErrorr,   rC   )	methr   funcr/   rG   codeZlogging_srcfilensnew_funcr   r   r   _wrap_logging_method   s>    
r_   c           	   C   st   t j} t jt jt jt jt jt jt jt jd}x2t	|D ]&\}}t
t| ||}tt j|| q6W t
t jjt j_d S )N)debuginfowarningwarnerrorr&   criticalfatal)r:   LoggerDEBUGINFOWARNINGWARNERRORCRITICALFATALr   r_   rK   setattrlog)clsmethodsmethod_namer   r^   r   r   r   _patch_logger   s    
rt   c               C   s
   t   dS )zXInstalls the logging hook if it was not installed yet.  Otherwise
    does nothing.
    N)rt   r   r   r   r   install_logging_hook   s    ru   c                s    fdd}t | | dS )zIgnores a logger for the regular breadcrumb code.  This is useful
    for framework integration code where some log messages should be
    specially handled.
    c                s    d k	r| krdS dS )NFTr   )r%   r   r=   r/   r0   )allow_levelr   r   rA      s    zignore_logger.<locals>.handlerN)register_special_log_handler)name_or_loggerrv   rA   r   )rv   r   ignore_logger   s    ry   c             C   s"   t | tr| }n| j}|t|< dS )a  Registers a callback for log handling.  The callback is invoked
    with give arguments: `logger`, `level`, `msg`, `args` and `kwargs`
    which are the values passed to the logging system.  If the callback
    returns `True` the default handling is disabled.
    N)rJ   r   r9   r?   )rx   callbackr9   r   r   r   rw      s    
rw   c             C   s   t |  dS )a  Registers a callback for log handling.  The callback is invoked
    with give arguments: `logger`, `level`, `msg`, `args` and `kwargs`
    which are the values passed to the logging system.  If the callback
    returns `True` the default handling is disabled.
    N)r>   r   )rz   r   r   r   register_logging_handler
  s    r{   c                s    fdd}|S )Nc                s   t | } | t < | S )N)r   hooked_libraries)f)r9   r   r   	decorator  s    zlibraryhook.<locals>.decoratorr   )r9   r~   r   )r9   r   libraryhook  s    r   requestsc                 sP   yddl m}  W n tk
r$   d S X | j  fdd}|| _tdtjd d S )Nr   )Sessionc                sN    fdd}y|  f||}W n t k
r@   |d   Y n
X || |S )Nc                s4   t dd j j| r| jpd | r$| jp&d dd d S )Nhttpr   )urlmethodstatus_codereason)r
   r   r   )r    r   r   r   r   )response)requestr   r   _record_request(  s
    z5_hook_requests.<locals>.send.<locals>._record_request)r$   )r   r   r/   r0   r   Zresp)	real_send)r   r   send'  s    z_hook_requests.<locals>.sendz(requests.packages.urllib3.connectionpool)rv   )Zrequests.sessionsr   ImportErrorr   ry   r:   rj   )r   r   r   )r   r   _hook_requests  s    r   httplibc                 sf   yddl m}  W n  tk
r0   ddlm}  Y nX | j| j fdd} fdd}|| _|| _d S )Nr   )HTTPConnectionc                sT   i  | _ | j| j| j  fdd}tdd|d | f||S )Nc                sZ   }| ds:d dkrdpd kr0d p2df }|d| d	< | d	  | S )
N)zhttp://zhttps://z%s://%s%s%si  httpsr   z:%s )r   r   r   )
startswithr8   )r   Zreal_url)default_porthostr   portstatusr   r   r   r   N  s    
z7_install_httplib.<locals>.putrequest.<locals>.processorr   r   )r
   r   r   )_raven_status_dictr   r   r   r    )r   r   r   r/   r0   r   )real_putrequest)r   r   r   r   r   r   r   
putrequestH  s    
z$_install_httplib.<locals>.putrequestc                sD    | f||}t | dd }|d k	r@d|kr@|j|d< |j|d< |S )Nr   r   r   )rK   r   r   )r   r/   r0   r'   r   )real_getresponser   r   getresponse`  s    

z%_install_httplib.<locals>.getresponse)r   r   r   Zhttp.clientr   r   )r   r   r   r   )r   r   r   _install_httplib>  s    r   c             C   sF   | d krt  } x0| D ](}t |}|d kr8td| |  qW d S )NzUnknown library %r for hooking)r|   keysr@   RuntimeError)	librarieslibr[   r   r   r   hook_librariesl  s    

r   )T)NNNNNNN)N)N)'
__future__r   rM   r   r:   typesr   Zraven.utils.compatr   r   r   r   Zraven.utilsr   r>   r?   	getLoggerr%   r   objectr   r.   r2   r3   r    rB   r_   rt   ru   ry   rw   r{   r|   r   r   r   r   Zraven.contextr	   r   r   r   r   <module>   s:   

*
 
&
F
	 .
