<!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(                 @   sf  d Z 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 ddlmZ ddlmZ dd	lmZ ydd
lmZ W n  ek
r   ddlmZ Y nX ddlmZ ddlmZmZ ddlmZ ddlmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ dZ,edk r&dd Z-ndd Z-G dd de.Z/dd Z0e)dd Z1G dd  d eZ2dS )!z
raven.contrib.django.client
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
    )absolute_importN)VERSION)settings)SuspiciousOperation)HttpRequest)TemplateSyntaxError)MultiValueDict)Origin)LoaderOrigin)Client)get_data_from_templateget_host)SentryMiddleware)string_typesbinary_type	iterlists)RouteResolver)get_headersget_environget_client_ip)once)breadcrumbs)DjangoClient)   
   c             C   s   |   S )N)is_authenticated)request_user r   L/opt/alt/python37/lib/python3.7/site-packages/raven/contrib/django/client.pyr   *   s    r   c             C   s   | j S )N)r   )r   r   r   r   r   -   s    c               @   s   e Zd Zdd Zdd ZdS )_FormatConverterc             C   s   || _ g | _d S )N)param_mappingparams)selfr    r   r   r   __init__3   s    z_FormatConverter.__init__c             C   s   | j | j| dS )Nz%s)r!   appendr    get)r"   valr   r   r   __getitem__7   s    z_FormatConverter.__getitem__N)__name__
__module____qualname__r#   r'   r   r   r   r   r   1   s   r   c             C   s   g }t |tr.t|}|r*| | } |j}nd}x|p6dD ]z}|d krP|d q8t |trt |trp|dd}t|dkr|d d d }|d|	dd	  q8|t
| q8W | |fS )
Nr   NULLzutf-8replace   u   …z'%s''z'')
isinstancedictr   r!   r$   r   r   decodelenr,   repr)sqlr!   rvconvparamr   r   r   
format_sql<   s$    


r8   c                 s   yddl m}  W n  tk
r0   ddlm}  Y nX y| j | jW n tk
rV   dS X dd f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    fdd}t j|d d S )Nc                s2   t  \}}|r|t| }| |dd d S )Nquery)messagecategory)r8   tupleupdate)dataZreal_sqlZreal_params)r!   r4   r   r   	processorg   s    z7install_sql_hook.<locals>.record_sql.<locals>.processor)r@   )r   record)vendoraliasstartdurationr4   r!   r@   r   )r!   r4   r   
record_sqlf   s    
z$install_sql_hook.<locals>.record_sqlc                s0   t   | }x|D ]} | ||||| qW d S )N)time)rB   rC   rD   r4   
param_listrE   r!   )rF   r   r   record_many_sqls   s    
z)install_sql_hook.<locals>.record_many_sqlc                sD   t   }z | ||S | jjt| jdd |t   | || X d S )NrC   )rG   dbrB   getattr)r"   r4   r!   rD   )real_executerF   r   r   executex   s
    z!install_sql_hook.<locals>.executec                s:   t   }z | ||S | jjt| jdd ||| X d S )NrC   )rG   rJ   rB   rK   )r"   r4   rH   rD   )real_executemanyrI   r   r   executemany   s
    z%install_sql_hook.<locals>.executemanyzdjango.db.backends)N)	Zdjango.db.backends.utilsr9   ImportErrorZdjango.db.backends.utilrM   rO   AttributeErrorr   Zignore_logger)r9   rM   rO   r   )rL   rN   rI   rF   r   install_sql_hookV   s     
rR   c                   sb   e Zd ZedZe Zdd Zdd Z	dd Z
dd	 Z fd
dZd fdd	Zdd Z  ZS )r   zsentry.errors.client.djangoc             O   s.   | dd}tj| f|| |r*|   d S )NrR   T)popr   r#   rR   )r"   argskwargsrR   r   r   r   r#      s    zDjangoClient.__init__c             C   s
   t   d S )N)rR   )r"   r   r   r   rR      s    zDjangoClient.install_sql_hookc             C   s   dt |ji}t|dd }|d kr&|S y^t|}|s8|S |j|d< t|drV|j|d< t|drn| |d< nt|dr|j|d< W n t	k
r   Y nX |S )NZ
ip_addressuseridemailget_usernameusername)
r   METArK   r   pkhasattrrX   rY   rZ   	Exception)r"   requestZ	user_inforV   Zauthenticatedr   r   r   get_user_info   s$    




zDjangoClient.get_user_infoc             C   s>  i }|  ||d< y| }W n> tk
r\   | r<d}nd}t|}d|||jf }Y nX |jdkry
|j}W q tk
r   y
|j	}W n\ tk
r   y|j
pd}W n tk
r   d}Y n"X t|trtdd t|D }Y nX Y qX nd }|j}|d	|j||jd
|t|jtt|tt|di |S )NrV   httpshttpz	%s://%s%s)GETZHEADz<unavailable>c             s   s.   | ]&\}}|t |d kr |d n|fV  qdS )r   r   N)r2   ).0kvr   r   r   	<genexpr>   s   z5DjangoClient.get_data_from_request.<locals>.<genexpr>r_   ZQUERY_STRING)methodurlZquery_stringr?   Zcookiesheadersenv)r`   Zbuild_absolute_urir   Z	is_securer   pathrh   bodyr^   Zraw_post_dataZPOSTr/   r   r0   r   r[   r>   r%   ZCOOKIESr   r   )r"   r_   resultZurischemehostr?   environr   r   r   get_data_from_request   sJ    






z"DjangoClient.get_data_from_requestc       	         s   t t| j||}x4| |D ]&}|d}|s2q|drd|d< qW | jsdtjkry6ddl	m
} |j }|jpz|j}|d d	| W n@ tk
r   y|d d	tj W n tk
r   Y nX Y nX |S )
Nmodulezdjango.FZin_appzdjango.contrib.sitesr   )SiteZtagssite)superr   	build_msgZ_iter_framesr%   
startswithru   r   ZINSTALLED_APPSZdjango.contrib.sites.modelsrt   objectsZget_currentnamedomain
setdefaultr^   ZSITE_IDrQ   )	r"   rT   rU   r?   framers   rt   ru   Z	site_name)	__class__r   r   rw      s&    


zDjangoClient.build_msgNc       
         s,  d|kri  |d< }n|d }|d kr4t tjdd }t|t}|rR|| | |dr|d d }t|dst|t	rtt |dd t
tfrt|jd tst|drt |dt |dd }t |dd }|d kr| jd	 |t|| tt| j|f|}	|r(|	r(|d
| jj|	d|_|	S )Nr?   r_   exc_infor   Zdjango_template_sourcesourcer   Ztemplate_debugz,Unable to get template source from exceptionproject)Z
project_idrW   )rK   r   threadr/   r   r>   rr   r%   r]   r   r=   listr   r	   loggerinfor   rv   r   captureZremoter   Zsentry)
r"   Z
event_typer_   rU   r?   Zis_http_request	exc_valuer   debugrn   )r~   r   r   r     s6    






zDjangoClient.capturec             C   s   | j |jS )N)resolverresolverl   )r"   r_   r   r   r   get_transaction_from_request4  s    z)DjangoClient.get_transaction_from_request)N)r(   r)   r*   logging	getLoggerr   r   r   r#   rR   r`   rr   rw   r   r   __classcell__r   r   )r~   r   r      s   
5,r   )3__doc__
__future__r   rG   r   Zdjangor   ZDJANGO_VERSIONZdjango.confr   Zdjango.core.exceptionsr   Zdjango.httpr   Zdjango.templater   Zdjango.utils.datastructuresr   Zdjango.template.baser	   rP   Zdjango.template.loaderr
   Z
raven.baser   Zraven.contrib.django.utilsr   r   Zraven.contrib.django.middlewarer   Zraven.utils.compatr   r   r   Zraven.contrib.django.resolverr   Zraven.utils.wsgir   r   r   Zraven.utilsr   ravenr   __all__r   objectr   r8   rR   r   r   r   r   r   <module>   s:   

7