ÿØÿà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@@sdZddlmZddlZddlZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZydd lmZWn!ek rdd lmZnXdd lmZdd lmZmZddlmZddlmZm Z m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)ddl*m+Z+dZ,edkrdZ-n dZ-de.fdYZ/dZ0e)dZ1defdYZ2dS( s raven.contrib.django.client ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. i(tabsolute_importN(tVERSION(tsettings(tSuspiciousOperation(t HttpRequest(tTemplateSyntaxError(tMultiValueDict(tOrigin(t LoaderOrigin(tClient(tget_data_from_templatetget_host(tSentryMiddleware(t string_typest binary_typet iterlists(t RouteResolver(t get_headerst get_environt get_client_ip(tonce(t breadcrumbst DjangoClientii cC@s |jS(N(tis_authenticated(t request_user((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyR*scC@s|jS(N(R(R((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyR-st_FormatConvertercB@seZdZdZRS(cC@s||_g|_dS(N(t param_mappingtparams(tselfR((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt__init__3s cC@s |jj|jj|dS(Ns%s(RtappendRtget(Rtval((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt __getitem__7s(t__name__t __module__RR!(((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyR1s cC@s g}t|trFt|}|r=||}|j}qFd }nx|pRd D]}|dkru|jdqSt|trt|tr|jdd}nt |dkr|d d}n|jd|j ddqS|jt |qSW||fS( NtNULLsutf-8treplaceiu…s'%s't's''((( t isinstancetdictRRtNoneRR RtdecodetlenR%trepr(tsqlRtrvtconvtparam((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt format_sql<s$      c@syddlm}Wn!tk r7ddlm}nXy|j|jWntk rbdSXdfddfd}fd}||_||_tj ddS( s9If installed this causes Django's queries to be captured.i(t CursorWrapperNc@s&fd}tjd|dS(Nc@sMt\}}|r.|t|}n|ji|d6dd6dS(Ntmessagetquerytcategory(R1ttupletupdate(tdatatreal_sqlt real_params(RR-(sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt processorgs  R;(Rtrecord(tvendortaliaststarttdurationR-RR;((RR-sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt record_sqlfs c@s>tj|}x'|D]}||||||qWdS(N(ttime(R=R>R?R-t param_listR@R(RA(sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pytrecord_many_sqlss c @s`tj}z|||SWd|jjt|jdd|tj|||XdS(NR>(RBtdbR=tgetattrR)(RR-RR?(t real_executeRA(sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pytexecutexs  c @sStj}z|||SWd|jjt|jdd|||XdS(NR>(RBRER=RFR)(RR-RCR?(treal_executemanyRD(sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyt executemanys  sdjango.db.backends( tdjango.db.backends.utilsR2t ImportErrortdjango.db.backends.utilRHRJtAttributeErrorR)Rt ignore_logger(R2RHRJ((RGRIRDRAsL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pytinstall_sql_hookVs        cB@sbeZejdZeZdZdZdZ dZ dZ ddZ dZRS( ssentry.errors.client.djangocO@s<|jdt}tj||||r8|jndS(NRP(tpoptTrueR RRP(RtargstkwargsRP((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyRscC@s tdS(N(RP(R((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pyRPscC@sit|jd6}t|dd}|dkr8|Syt|}|sQ|S|j|dcs@s=|]3\}}|t|dkr.|dn|fVqdS(iiN(R+(t.0tktv((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pys stmethodturlt QUERY_STRINGt query_stringR8tcookiestheaderstenvR_(ReRf(Rbtbuild_absolute_uriRt is_secureR tpathRjtbodyR^t raw_post_datatPOSTR'RR(RR)R[R7RtCOOKIESRR(RR_tresultturitschemethostR8tenviron((sL/opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/client.pytget_data_from_requestsJ          !   c O@stt|j||}xN|j|D]=}|jd}|sLq+n|jdr+t|ds:       7