ÿØÿà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@@sLdZddlmZddlZddlZddlZejddkZejddkZere fZ e fZ e fZe ZeZn0efZ e efZ e ejfZeZe Zy eZWnek rdZnXeZy eZWnek rdZnXer#eZndefd YZerfd Zd Zd Zd Zn$dZdZdZdZerdZ dZ!ddl"Z"e"j#Z#e"j$Z$n+dZ dZ!ddl#Z#e#j#Z#Z$ere%e&ddZ'ddZ)ndddZ'e'dejd d%krQe'dn)ejd d&krqe'dn dZ*erddl+m,Z,ddl-m.Z/ddl0j1Z2dd l3m4Z4dd!l5m6Z7dd"l8m9Z:nTddl2m,Z,ddl/Z/ddl2Z2dd l4m4Z4dd!l8m6Z7ddl:Z:d#Z;d$Z<dS('s raven.utils.compat ~~~~~~~~~~~~~~~~~~ :copyright: (c) 2010-2016 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. Utilities for writing code that runs on Python 2 and 3 i(tabsolute_importNiicC@s |jS(N(tnext(tit((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytadvance_iterator:scC@stdt|jDS(Ncs@s|]}d|jkVqdS(t__call__N(t__dict__(t.0tklass((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pys Cs(tanyttypet__mro__(tobj((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytcallableBstIteratorcB@seZdZRS(cC@st|j|S(N(R t__next__(tself((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyRJs(t__name__t __module__R(((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyR HscK@st|j|S(N(titertkeys(tdtkw((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytiterkeysOscK@st|j|S(N(Rtvalues(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt itervaluesRscK@st|j|S(N(Rtitems(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt iteritemsUscK@st|j|S(N(Rtlists(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt iterlistsXscK@s |j|S(N(R(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyR[scK@s |j|S(N(R(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyR^scK@s |j|S(N(R(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyRascK@s |j|S(N(R(RR((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyRdscC@s |jdS(Nslatin-1(tencode(ts((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytbiscC@s|S(N((R((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytulscC@s|S(N((R((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyRrscC@st|jdddS(Ns\\s\\\\tunicode_escape(tunicodetreplace(R((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyR vstbuiltinstexeccC@sWzC|dkr|}n|j|k r<|j|n|Wdd}d}XdS(N(tNonet __traceback__twith_traceback(ttptvaluettb((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytreraises   cB@sc|dkrBejd}|j}|dkr<|j}n~n|dkrW|}nddUdS(sExecute code in a namespace.isexec _code_ in _globs_, _locs_N(R&tsyst _getframet f_globalstf_locals(t_code_t_globs_t_locs_tframe((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytexec_s      sedef reraise(tp, value, tb=None): try: raise tp, value, tb finally: tb = None sdef raise_from(value, from_value): try: if from_value is None: raise value raise value from from_value finally: value = None srdef raise_from(value, from_value): try: raise value from from_value finally: value = None cC@s |dS(N((R*t from_value((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt raise_froms(t HTTPError(tclient(tQueue(tquote(tparsecC@sJt|dt|dd}|dkrFtdt|jn|S(Nt__code__t func_codesCould not get code from %r(tgetattrR&t TypeErrorR R(tfunctrv((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pytget_codes cC@syddlm}Wntk r(dSXd|kr9dSt|jddjd krdd lm}|td ndS( Ni(topttthreadssenable-threadst0tfalsetofftno(twarnsWe detected the use of uwsgi with disabled threads. This will cause issues with the transport you are trying to use. Please enable threading for uwsgi. (Enable the "enable-threads" flag).(RGRHRIRF( tuwsgiRDt ImportErrortstrtgettlowertwarningsRJtWarning(RDRJ((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt check_threadss  $(ii(ii(=t__doc__t __future__RtoperatorR-ttypest version_infotPY2tPY3RMt string_typestintt integer_typesR t class_typest text_typetbytest binary_typet basestringtlongt ClassTypeR"RRt NameErrorR tobjectR RRRRRR tiotStringIOtBytesIOR?t __import__R5R&R,R7t urllib.errorR8thttpR9thttplibturllib.requesttrequestturllib2tqueueR:t urllib.parseR;t urllib_quoteturllibR<turlparseRCRR(((sC/opt/alt/python27/lib/python2.7/site-packages/raven/utils/compat.pyt s