<!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>
U
    \o0                     @   s  d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 zd dlmZ W n  ek
rp   d dlmZ Y nX d dlmZ d dlmZ d d	lmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 edk rdd Z4ndd Z4G dd de)Z5dd Z6d'ddZ7G dd de/Z8dd Z9G dd  d e:Z;d!d" Z<d(d#d$Z=d%d& Z>dS ))    )absolute_importN)VERSION)QuerySet)signals)resolve)Hub)_should_send_default_pii)add_global_event_processor)add_global_repr_processorcapture_internal_exceptionsevent_from_exception	safe_reprformat_and_striptransaction_from_functionwalk_exception_chain)Integration)ignore_logger)SentryWsgiMiddleware)RequestExtractor)LEGACY_RESOLVER)!get_template_frame_from_exception)   
   c                 C   s   |   S Nis_authenticatedZrequest_user r   X/opt/alt/python38/lib/python3.8/site-packages/sentry_sdk/integrations/django/__init__.pyr   4   s    r   c                 C   s   | j S r   r   r   r   r   r   r   ;   s    c                   @   s*   e Zd ZdZdZdddZedd ZdS )	DjangoIntegrationdjangoNurlc                 C   s&   d}||krt d||f || _d S )N)function_namer!   z7Invalid value for transaction_style: %s (must be in %s))
ValueErrortransaction_style)selfr$   ZTRANSACTION_STYLE_VALUESr   r   r   __init__E   s    zDjangoIntegration.__init__c                     s   t   td td ddlm}  | j  fdd}|| _ddlm} |jfdd	}||_tj	
t td
d }tdd }d S )Nzdjango.serverzdjango.requestr   )WSGIHandlerc                    s4   t jtd kr ||S t fdd||S )Nc                     s    f| |S r   r   )akw)old_appr%   r   r   <lambda>b       zSDjangoIntegration.setup_once.<locals>.sentry_patched_wsgi_handler.<locals>.<lambda>)r   currentget_integrationr   r   )r%   environZstart_response)r*   r%   r   sentry_patched_wsgi_handler]   s     zADjangoIntegration.setup_once.<locals>.sentry_patched_wsgi_handler)BaseHandlerc              	      sL   t j}|t}|d k	rB| }|tt|| W 5 Q R X  | |S r   )	r   r-   r.   r   Zconfigure_scopeZadd_event_processor_make_event_processorweakrefref)r%   requesthubintegrationZscope)old_get_responser   r   sentry_patched_get_responsen   s    

zADjangoIntegration.setup_once.<locals>.sentry_patched_get_responsec                 S   s   | dd }|d kr| S |  dd }|d kr0| S | dd }|d krH| S t|t|D ]\}\}}}t|}|d k	rV| di  dg }ttt|D ]4}	||	 }
|
 ddkr|
 dd	kr|	d
7 }	 qqt|}	||	| qV| S )Nexc_info	exceptionvaluesZ
stacktraceframesfunction)parseZrendermodulezdjango.template.baser   )getzipr   r   reversedrangeleninsert)eventhintr;   r<   r=   _	exc_valueframer>   ifr   r   r   process_django_templates}   s6     z>DjangoIntegration.setup_once.<locals>.process_django_templatesc                 S   s,   t | tr| jrtS d| jj| jt| f S )Nz<%s from %s at 0x%x>)
isinstancer   Z_result_cacheNotImplemented	__class____name__
__module__id)valuerI   r   r   r   _django_queryset_repr   s    z;DjangoIntegration.setup_once.<locals>._django_queryset_repr)install_sql_hookr   Zdjango.core.handlers.wsgir'   __call__Zdjango.core.handlers.baser2   Zget_responser   Zgot_request_exceptionconnect_got_request_exceptionr	   r
   )r'   r1   r2   r:   rO   rW   r   )r*   r9   r   
setup_onceO   s     	
'zDjangoIntegration.setup_once)r!   )rS   rT   __qualname__
identifierr$   r&   staticmethodr\   r   r   r   r   r   @   s
   

r   c                    s    fdd}|S )Nc              	      s    }|d kr| S z> j dkr4tt|jj| d< n j dkrNt|j| d< W n tk
rd   Y nX t  t|	|  W 5 Q R X t
 rt  t||  W 5 Q R X | S )Nr"   Ztransactionr!   )r$   r   r   pathfuncr   	Exceptionr   DjangoRequestExtractorZextract_into_eventr   _set_user_info)rH   rI   r6   r8   weak_requestr   r   event_processor   s$    



z._make_event_processor.<locals>.event_processorr   )rf   r8   rg   r   re   r   r3      s    r3   c                 K   sJ   t j}|t}|d k	rFtt |jjdddd\}}|j	||d d S )Nr    F)typeZhandled)Zclient_optionsZ	mechanism)rI   )
r   r-   r.   r   r   sysr;   ZclientoptionsZcapture_event)r6   kwargsr7   r8   rH   rI   r   r   r   r[      s    

r[   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )rc   c                 C   s   | j jS r   )r6   ZMETAr0   r   r   r   env   s    zDjangoRequestExtractor.envc                 C   s   | j jS r   )r6   ZCOOKIESr0   r   r   r   cookies   s    zDjangoRequestExtractor.cookiesc                 C   s   | j jS r   )r6   bodyr0   r   r   r   raw_data   s    zDjangoRequestExtractor.raw_datac                 C   s   | j jS r   )r6   ZPOSTr0   r   r   r   form   s    zDjangoRequestExtractor.formc                 C   s   | j jS r   )r6   ZFILESr0   r   r   r   files   s    zDjangoRequestExtractor.filesc                 C   s   |j S r   )size)r%   filer   r   r   size_of_file   s    z#DjangoRequestExtractor.size_of_filec                 C   s.   z
| j jW S  tk
r(   t|  Y S X d S r   )r6   dataAttributeErrorr   parsed_bodyr0   r   r   r   rw      s    
z"DjangoRequestExtractor.parsed_bodyN)
rS   rT   r]   rl   rm   ro   rp   rq   rt   rw   r   r   r   r   rc      s   rc   c                 C   s   | di }t| dd }|d ks(t|s,d S zt|j|d< W n tk
rR   Y nX z|j|d< W n tk
rv   Y nX z| |d< W n tk
r   Y nX d S )NuserrU   emailusername)
setdefaultgetattrr   strpkrb   ry   Zget_username)r6   rH   Z	user_inforx   r   r   r   rd     s     rd   c                   @   s   e Zd Zdd Zdd ZdS )_FormatConverterc                 C   s   || _ g | _d S r   )param_mappingparams)r%   r   r   r   r   r&     s    z_FormatConverter.__init__c                 C   s   | j | j| dS )Nz%s)r   appendr   rB   )r%   valr   r   r   __getitem__#  s    z_FormatConverter.__getitem__N)rS   rT   r]   r&   r   r   r   r   r   r     s   r   c                 C   sh   g }t |tr.t|}|r*| | } |j}nd}|p4dD ](}|d krL|d t|}|| q6| |fS )Nr   ZNULL)rP   dictr   r   r   r   )sqlr   rvconvparamr   r   r   
format_sql)  s    

r   c              	   C   s   t j}|td krd S d }d }z t| |\}}|r>t||}W n tk
rT   Y nX |s|rt|drz6|rt|dr|| |}t	|t
r||jj}W n tk
r   Y nX |rt  |j|dd W 5 Q R X d S )Nmogrifyquery)messagecategory)r   r-   r.   r   r   r   rb   hasattrr   rP   bytesdecodeZ
connectionencodingr   Zadd_breadcrumb)r   r   cursorr7   Zreal_sqlZreal_paramsr   r   r   
record_sql?  s,    	
r   c                     s   zddl m}  W n  tk
r0   ddlm}  Y nX z| j | jW n tk
rX   Y dS X dd d fdd	}fdd	}|| _|| _td
 dS )z9If installed this causes Django's queries to be captured.r   )CursorWrapperNc                 S   s   |D ]}t | || qd S r   )r   )r   
param_listr   r   r   r   r   record_many_sqlv  s    z)install_sql_hook.<locals>.record_many_sqlc              
      s&   z | ||W S t ||| j X d S r   )r   r   )r%   r   r   )real_executer   r   executez  s    z!install_sql_hook.<locals>.executec              
      s&   z | ||W S ||| j  X d S r   )r   )r%   r   r   )real_executemanyr   r   r   executemany  s    z%install_sql_hook.<locals>.executemanyzdjango.db.backends)N)Zdjango.db.backends.utilsr   ImportErrorZdjango.db.backends.utilr   r   rv   r   )r   r   r   r   )r   r   r   r   rX   g  s    
rX   )N)N)?
__future__r   ri   r4   r    r   ZDJANGO_VERSIONZdjango.db.models.queryr   Zdjango.corer   ZAnyDictZTupleUnionZ_ScopedResponseCallableZWSGIRequestZHttpResponseZ	QueryDictZMultiValueDictZListZdjango.urlsr   r   Zdjango.core.urlresolversZ
sentry_sdkr   Zsentry_sdk.hubr   Zsentry_sdk.scoper	   Zsentry_sdk.utilsr
   r   r   r   r   r   r   Zsentry_sdk.integrationsr   Zsentry_sdk.integrations.loggingr   Zsentry_sdk.integrations.wsgir   Z$sentry_sdk.integrations._wsgi_commonr   Z+sentry_sdk.integrations.django.transactionsr   Z(sentry_sdk.integrations.django.templatesr   r   r   r3   r[   rc   rd   objectr   r   r   rX   r   r   r   r   <module>   s>   $	

v!

(