ÿØÿà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@`sdZddlmZmZddlZddlZddlZddlZddlZddl m Z ddl m Z ej dZdddZddZd Zd Zdd Ze d d ZddZddZe eddZdS(s raven.utils.stacks ~~~~~~~~~~~~~~~~~~~~~~~~~~ :copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. i(tabsolute_importtdivisionN(t transform(t iteritemsscoding[:=]\s*([-\w.]+)c C`sd}|dk rrt|drry|j|}Wnttfk rSd}nX|dk rr|j}qrn|dkrytj|}Wqttfk rdSXn|sdSt d||}t |d|t |}ymg|||!D]}|j d^q} ||j d} g||d|!D]}|j d^q:} Wnt k rjdSXt| t| t| fS( s Returns context_lines before and after lineno from file. Returns (pre_context_lineno, pre_context, context_line, post_context). t get_sourceiis N(NNN(NNN(NNN(tNonethasattrRt ImportErrortIOErrort splitlinest linecachetgetlinestOSErrortmaxtmintlentstript IndexErrort slim_string( tfilenametlinenot context_linestloadert module_nametsourcet lower_boundt upper_boundtlinet pre_contextt context_linet post_context((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytget_lines_from_files8   &.   cC`s%y ||SWntk r |SXdS(s f_locals is not guaranteed to have .get(), but it will always support __getitem__. Even if it doesn't, we return ``default``. N(t Exception(tf_localstkeytdefault((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pyt_getitem_from_frameUs  c`s_tdrj}n'tdr6j}n ttfd|DS(su Given something that closely resembles a dictionary, we attempt to coerce it into a propery dictionary. titerkeystkeysc3`s|]}||fVqdS(N((t.0tk(tdictish(sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pys ls(RR%R&t ValueErrortdict(R)tm((R)sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytto_dict`s    cc`sjxc|ret|dret|jdi}t|dsY|jt|ddfVn|j}qWdS(s Given a traceback object, it will iterate over all frames that do not contain the ``__traceback_hide__`` local variable. ttb_frameR!t__traceback_hide__t tb_linenoN(RtgetattrR.R$Rttb_next(ttbR!((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytiter_traceback_framesos cc`sp|stjd}nxPd|DD]>\}}t|di}t|dr]q*n||fVq*WdS(s Given an optional list of frames (defaults to current stack), iterates over all frames that do not contain the ``__traceback_hide__`` local variable. ics`s#|]}|d|dfVqdS(iiN((R'tf((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pys sR!R/N(tinspecttstackR1R$(tframestframeRR!((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytiter_stack_framessic C`st|dd}|sdSt|tsSyt|}WqStk rOdSXni}d}x_t|D]Q\}}||}tt|}|||krl|||<||7}qlqlW|S(NR!i( R1Rt isinstanceR+R-R RRtrepr( R9t transformert max_var_sizeR!tf_varstf_sizeR(tvtv_size((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytget_frame_localss"   ic C`sd}g}g}xD|D]<}|d7}|jdrH|j|q|j|qW||kri|S||}t|}t||d}|rt|d} x|| | !D]@}|jdd|jdd|jdd|d8}qWnKxH|D]@}|jdd|jdd|jdd|d8}qW|sS|S||} t| d} xF|| | !D]6}|jdd|jdd|jddq|W|S( s~ Removes various excess metadata from middle frames which go beyond ``frame_allowance``. Returns ``frames``. iitin_appitvarsRRN(tgettappendRR tinttpopR( R8tframe_allowancet frames_lent app_framest system_framesR9t remainingt app_counttsystem_allowancethalf_maxt app_allowance((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytslim_frame_datasD       icC`s4|s |St||kr,||d dS|| S(Nis...(R(tvaluetlength((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pyRs cC`st}g}xV|D]N}t|ttfr=|\}}n|}|j}t|di} t| drsqnt|di} t|dd} | r|jj } |jj } n d} d} t| d}t| d}|r|d8}n|dk r+| r+t | |d||\}}}nd\}}}yYt j |jd dd j}| j|jtjd d dd jtj}Wntk r| }nX|s| }ni| d 6|d6|pdd6| pdd6|dd6}|r#t|d|}|r#||dtfunctionRR=RERRRRJR8N(NNN(tTrueR;tlistttupletf_linenoR1R$RRWt co_filenametco_nameRtsystmodulestsplitt__file__trsplittostseptlstripR RCtupdateRGRS(R8R=tcapture_localsRJR/tresultt frame_infoR9RR!RVRWR[R]RRRRRt base_filenameRt frame_resultR?t stackinfo((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pytget_stack_infosf     $ 3       (t__doc__t __future__RRR6R treRiRdtraven.utils.serializerRtraven.utils.compatRtcompilet _coding_reRRR$R-R4R:RCRSRR^Rs(((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/stacks.pyts&     =    4