£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<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   )