ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     
Yc           @@  s   d  Z  d d l m Z d d l m Z m Z d d l m Z d d l m	 Z d d l
 m Z y d d l m Z Wn! e k
 r d d l m Z n Xe   Z d   Z d	 e e e f d
     YZ d d l Z d S(   s   
raven.context
~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
i    (   t   absolute_import(   t   Mappingt   Iterable(   t   local(   t   ref(   t	   iteritems(   t	   get_identc           C@  s*   y t  t j  SWn t k
 r% g  SXd S(   s7   Returns all the active contexts for the current thread.N(   t   listt   _active_contextst   contextst   AttributeError(    (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   get_active_contexts   s    t   Contextc           B@  s   e  Z d  Z d d  Z e d    Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z e d  Z d   Z e d  Z d   Z d   Z d d  Z RS(   s'  
    Stores context until cleared.

    >>> def view_handler(view_func, *args, **kwargs):
    >>>     context = Context()
    >>>     context.merge(tags={'key': 'value'})
    >>>     try:
    >>>         return view_func(*args, **kwargs)
    >>>     finally:
    >>>         context.clear()
    c         C@  sq   t  j j | d  k p | j  } | d  k	 r< t |  } n  | |  _ |  j   i  |  _ t	   |  _
 | |  _ d  S(   N(   t   ravent   breadcrumbst   make_buffert   Nonet   enable_breadcrumbst   weakreft   _clientt   activatet   datat   sett   exceptions_to_skip(   t   selft   clientR   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __init__.   s    		
	c         C@  s   |  j  d  k r d  S|  j    S(   N(   R   R   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR   =   s    c         C@  s
   t  |   S(   N(   t   id(   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __hash__C   s    c         C@  s
   |  | k S(   N(    (   R   t   other(    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __eq__F   s    c         C@  s   |  j  |  S(   N(   R   (   R   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __ne__I   s    c         C@  s   |  j  | S(   N(   R   (   R   t   key(    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __getitem__L   s    c         C@  s   t  |  j  S(   N(   t   iterR   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __iter__O   s    c         C@  s   t  |  j  S(   N(   t   lenR   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __len__R   s    c         C@  s   d t  |   j |  j f S(   Ns   <%s: %s>(   t   typet   __name__R   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __repr__U   s    c         C@  s   |  j    |  S(   N(   R   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt	   __enter__X   s    
c         C@  s   |  j    d  S(   N(   t
   deactivate(   R   t   exc_typet	   exc_valuet   tb(    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   __exit__\   s    c         C@  s8   | r t    |  _ n  t j j d t    j |   d  S(   NR	   (   t   get_thread_identt   _sticky_threadR   t   __dict__t
   setdefaultR   t   add(   R   t   sticky(    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR   _   s    c         C@  s,   y t  j j |   Wn t k
 r' n Xd  S(   N(   R   R	   t   discardR
   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR*   d   s    c         C@  s   | r |  j    n  |  j } xn t |  D]` \ } } | d k r | j | i   x5 t |  D] \ } } | | | | <q^ Wq) | | | <q) Wd  S(   Nt   tagst   extra(   R6   R7   (   R   R   R   R2   (   R   R   R   t   dR    t   valuet   t_keyt   t_value(    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   mergej   s    	c         C@  s   | |  _  d  S(   N(   R   (   R   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR   v   s    c         C@  s   |  j  S(   N(   R   (   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   gety   s    c         C@  ss   i  |  _  |  j j   |  j j   | d  k r\ |  j } | d  k	 r\ t   | j k } q\ n  | ro |  j   n  d  S(   N(	   R   R   t   clearR   R   R   R/   t   main_thread_idR*   (   R   R*   R   (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR>   |   s    		N(   R'   t
   __module__t   __doc__R   R   t   propertyR   R   R   R   R!   R#   R%   R(   R)   R.   t   FalseR   R*   t   TrueR<   R   R=   R>   (    (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR   !   s$   												N(   RA   t
   __future__R    t   collectionsR   R   t	   threadingR   R   R   t   raven.utils.compatR   t   threadR   R/   t   ImportErrort   _threadR   R   R   t   raven.breadcrumbsR   (    (    (    s>   /opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt   <module>   s   		l