ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Yc@@sdZddlmZddlmZmZddlmZddlm Zddl m Z yddl m ZWn!ek rddlm ZnXeZdZd eeefd YZdd lZd 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(tabsolute_import(tMappingtIterable(tlocal(tref(t iteritems(t get_identcC@s*yttjSWntk r%gSXdS(s7Returns all the active contexts for the current thread.N(tlistt_active_contextstcontextstAttributeError(((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pytget_active_contextss tContextcB@seZdZddZedZdZdZdZ dZ dZ dZ d Z d Zd Zed Zd ZedZdZdZddZRS(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() cC@sqtjj|dkp|j}|dk r<t|}n||_|ji|_t |_ ||_dS(N( travent breadcrumbst make_buffertNonetenable_breadcrumbstweakreft_clienttactivatetdatatsettexceptions_to_skip(tselftclientR((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__init__.s      cC@s|jdkrdS|jS(N(RR(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR=scC@s t|S(N(tid(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__hash__CscC@s ||kS(N((Rtother((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__eq__FscC@s|j| S(N(R(RR((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__ne__IscC@s |j|S(N(R(Rtkey((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt __getitem__LscC@s t|jS(N(titerR(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__iter__OscC@s t|jS(N(tlenR(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__len__RscC@sdt|j|jfS(Ns<%s: %s>(ttypet__name__R(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__repr__UscC@s|j|S(N(R(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt __enter__Xs cC@s|jdS(N(t deactivate(Rtexc_typet exc_valuettb((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyt__exit__\scC@s8|rt|_ntjjdtj|dS(NR (tget_thread_identt_sticky_threadRt__dict__t setdefaultRtadd(Rtsticky((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR_scC@s,ytjj|Wntk r'nXdS(N(RR tdiscardR (R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR*ds cC@s|r|jn|j}xnt|D]`\}}|dkr|j|ix5t|D]\}}||||/opt/alt/python27/lib/python2.7/site-packages/raven/context.pytmergejs   cC@s ||_dS(N(R(RR((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyRvscC@s|jS(N(R(R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pytgetyscC@ssi|_|jj|jj|dkr\|j}|dk r\t|jk}q\n|ro|jndS(N( RRtclearRRRR/tmain_thread_idR*(RR*R((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR>|s      N(R't __module__t__doc__RRtpropertyRRRRR!R#R%R(R)R.tFalseRR*tTrueR<RR=R>(((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyR !s$               N(RAt __future__Rt collectionsRRt threadingRRRtraven.utils.compatRtthreadRR/t ImportErrort_threadRR R traven.breadcrumbsR (((s>/opt/alt/python27/lib/python2.7/site-packages/raven/context.pyts   l