<!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
                 @   sp   d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZ edd ZG dd	 d	eZG d
d deZdS )z
raven.middleware
~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
    )absolute_import)contextmanager)Iteratornext)get_current_urlget_headersget_environc          
   c   s   y
d V  W n t tfk
r$    Y nt tk
rB   ||   Y nV tk
r`   ||   Y n8 tk
r } z|jdkr||   W d d }~X Y nX d S )Nr   )StopIterationGeneratorExit	Exceptionhandle_exceptionKeyboardInterrupt
SystemExitcode)environcliente r   A/opt/alt/python37/lib/python3.7/site-packages/raven/middleware.pycommon_exception_handling   s    




r   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ClosingIteratorz[
    An iterator that is implements a ``close`` method as-per
    WSGI recommendation.
    c             C   s.   || _ || _t|dd | _t|| _d| _d S )NcloseF)sentryr   getattr_closeiteriterableclosed)selfr   r   r   r   r   r   __init__,   s
    
zClosingIterator.__init__c             C   s   | S )Nr   )r   r   r   r   __iter__3   s    zClosingIterator.__iter__c          	   C   sH   y$t | j| j t| jS Q R X W n tk
rB   |    Y nX d S )N)r   r   r   r   r   r	   r   )r   r   r   r   __next__6   s    zClosingIterator.__next__c          	   C   sd   | j r
d S z0| jd k	r8t| j| j |   W d Q R X W d | jjj  | jjj  d| _ X d S )NT)	r   r   r   r   r   r   contextclearZtransaction)r   r   r   r   r   B   s    
zClosingIterator.closeN)__name__
__module____qualname____doc__r   r    r!   r   r   r   r   r   r   &   s
   r   c               @   s4   e Zd ZdZdddZdd Zdd Zdd	d
ZdS )Sentryz
    A WSGI middleware which will attempt to capture any
    uncaught exceptions and send them to Sentry.

    >>> from raven.base import Client
    >>> application = Sentry(application, Client())
    Nc             C   s*   || _ |d kr ddlm} | }|| _d S )Nr   )Client)applicationZ
raven.baser)   r   )r   r*   r   r)   r   r   r   r   X   s
    zSentry.__init__c          	   C   s@   | j | | t||  | ||}W d Q R X t| ||S )N)r   Zhttp_contextget_http_contextr   r*   r   )r   r   Zstart_responser   r   r   r   __call___   s    zSentry.__call__c             C   s4   | dt|dd| dtt|tt|dS )NZREQUEST_METHODT)Zstrip_querystringZQUERY_STRING)methodurlZquery_stringheadersenv)getr   dictr   r   )r   r   r   r   r   r+   g   s
    

zSentry.get_http_contextc             C   s
   | j  S )N)r   ZcaptureException)r   r   r   r   r   r   r   s    zSentry.handle_exception)N)N)r$   r%   r&   r'   r   r,   r+   r   r   r   r   r   r(   O   s
   
r(   N)r'   
__future__r   
contextlibr   Zraven.utils.compatr   r   Zraven.utils.wsgir   r   r   r   r   objectr(   r   r   r   r   <module>   s   )