bgUddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z ddlmZmZddlmZdd lmZdd lmZmZdd lmZdd lmZmZmZmZmZm Z m!Z!m"Z"m#Z#dd l$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z, ddl-m.Z/ddl0m1Z2ddl3m4Z4ddl0m1Z1 ddl5m6Z6n#e7$r ddl8m6Z6YnwxYw ddl5m9Z9n#e7$r ddl8m9Z9YnwxYwn#e7$r e&dwxYwddl:m;Z;ddlZ>ddl?m@Z@ddlAmBZBddlCmDZDe/dddkrddlEmFZFndZFe rZddlGmHZHdd lGmIZIdd!lGmJZJdd"lGmKZKdd#lGmLZLdd$lGmMZMdd%lNmOZOdd&lPmQZQdd'lRmSZSdd(lTmUZUdd)lmVZVdd*lmWZWdd+l)mXZXdd,l mYZYmZZZm[Z[m\Z\e/d-krd.Z]nd/Z]d0Z^Gd1d2e%Z_d3a`ejaZbd4Zcd5Zdd6Zed7Zfd8Zgd9Zhd:Zid;Zjd<ZkdCd=ZlGd>d?e,Zmd@ZndAZodBZpdS)D)absolute_importN) import_module) string_types) TYPE_CHECKING)OPSPANDATA)Hub_should_send_default_pii)add_global_event_processor)add_global_repr_processor)SOURCE_FOR_STYLETRANSACTION_SOURCE_URL)record_sql_queries) AnnotatedValueHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGESENSITIVE_DATA_SUBSTITUTEloggercapture_internal_exceptionsevent_from_exceptiontransaction_from_functionwalk_exception_chain) Integration DidNotEnable) ignore_logger)SentryWsgiMiddleware)RequestExtractor)VERSIONsettings)signals)resolve) Resolver404zDjango not installed)LEGACY_RESOLVER)!get_template_frame_from_exceptionpatch_templates)patch_django_middlewares) patch_signals) patch_views) patch_caching)Any)Callable)Dict)Optional)Union)List) WSGIRequest) HttpResponse) QueryDict)MultiValueDict)Span)Scope)_ScopedResponse)EventHintEventProcessorNotImplementedType)r, c*|SNis_authenticated request_users ^/opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk/integrations/django/__init__.pyrDrDWs,,...c|jSrBrCrEs rGrDrD]s ,,rH) function_nameurlcHeZdZdZdZdZdZdZ d dZe dZ dS) DjangoIntegrationdjangoNrKTFc|tvrtd|dtd||_||_||_||_dS)Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES ValueErrortransaction_stylemiddleware_spans signals_spans cache_spans)selfrTrUrVrWs rG__init__zDjangoIntegration.__init__msd $< < <*$$$&>&>&>@ "3 0*&rHcDtdkrtdttdtdddlmjfd}|_tttj ttd}td }tt!t#t%t't(t)dSdS) Nr+z Django 1.8 or newer is required.z django.serverzdjango.requestr) WSGIHandlerctjt |||S|}ddlm}|j}t||||S)Nrr) r currentget_integrationrM__get__ django.confr USE_X_FORWARDED_HOSTr)rXenvironstart_response bound_old_appr use_x_forwarded_forr[old_apps rGsentry_patched_wsgi_handlerzADjangoIntegration.setup_once..sentry_patched_wsgi_handlers{**+<==EwtWn===#OOD+>>M , , , , , ,"*"? K' 7JKK rHc||S|dd}||S|dd}||S|dd}||Stt|t|D]\}\}}}t |}||didg}tt t |D]A} || } | ddvr | dd kr| d z } nBt |} || ||S) Nexc_info exceptionvalues stacktraceframesfunction)z Parser.parseparserendermodulezdjango.template.baser,)getzipreversedrr%rangeleninsert) eventhintrirjrk_ exc_valueframermifs rGprocess_django_templatesz>DjangoIntegration.setup_once..process_django_templatessj| xx D11H  +t44I  ]]8T22F~ 03  "6x"@"@11 , ,, ,Ay!:)DD$&]]<<<@@2NNF%eCKK&8&899 ( ("1IEE*--1TTT !h3I I IFA!EKKMM!U+++LrHc ddlm}n#t$r tcYSwxYwt ||r|jrtSd|jj|jt|fzS)Nr)QuerySetz<%s from %s at 0x%x>) django.db.models.queryr ExceptionNotImplemented isinstance _result_cache __class____name__ __module__id)valueryrs rG_django_queryset_reprz;DjangoIntegration.setup_once.._django_queryset_reprs &<;;;;;; & & &%%%% &eX.. &%2E &%%*( 5 - s  )DJANGO_VERSIONrinstall_sql_hookrdjango.core.handlers.wsgir[__call___patch_get_response_patch_django_asgi_handlerr!got_request_exceptionconnect_got_request_exceptionr r _patch_channelsr'r)r&r(r.)rgrrr[rfs @@rG setup_oncezDjangoIntegration.setup_oncesG F " "ABB B o&&&&'''999999&       ; "$$$%--.DEEE #( (  $ #( T #   # " 6  """   $ OOOOO % $rH)rKTTF) rr __qualname__ identifierrTrUrVrWrY staticmethodrrHrGrMrMesqJMK  ''''$vv\vvvrHrMFc*trdSt5tr ddddSdat5 ddlm}|jfd}||_n#t $rYnwxYwdddn #1swxYwYddddS#1swxYwYdS)a Patch Django Rest Framework for more/better request data. DRF's request type is a wrapper around Django's request type. The attribute we're interested in is `request.data`, which is a cached property containing a parsed request body. Reading a request body from that property is more reliable than reading from any of Django's own properties, as those don't hold payloads in memory and therefore can only be accessed once. We patch the Django request object to include a weak backreference to the DRF request object, such that we can later use either in `DjangoRequestExtractor`. This function is not called directly on SDK setup, because importing almost any part of Django Rest Framework will try to access Django settings (where `sentry_sdk.init()` might be called from in the first place). Instead we run this function on every request and do the patching on the first request. NTr)APIViewct5tj||j_ dddn #1swxYwY||g|Ri|SrB)rweakrefref_request_sentry_drf_request_backref)rXrequestargskwargsold_drf_initials rGsentry_patched_drf_initialz._patch_drf..sentry_patched_drf_initial(s466GN{#HH(D  +?4J4JJJ6JJJs<AA) _DRF_PATCHED_DRF_PATCH_LOCKrrest_framework.viewsrinitial ImportError)rrrs @rG _patch_drfrs. ==   ========  ( * * = = =888888#*/KKKKK#=     = = = = = = = = = = = = = = ===================s\ BBA0AA0 A!A0 A!!A0$ B0A4 4B7A4 8BB B c ddlm}n#t$rYdSwxYwtst jdt zddlm}||dS)Nr) AsgiHandlerz3We detected that you are using Django channels 2.0.) patch_channels_asgi_handler_impl) channels.httprrrrwarningr#sentry_sdk.integrations.django.asgir)rrs rGrr4s-------     A' (   UTTTTT$$[11111  c ddlm}n#t$rYdSwxYwtst jdt zddlm}||dS)Nr) ASGIHandlerz(We detected that you are using Django 3.)patch_django_asgi_handler_impl) django.core.handlers.asgirrrrrrrr)rrs rGrrMs9999999    69R R   SRRRRR"";/////rc d}|dkr8t|jj}tt |d|}nP|dkrJt |dr!t j|j|j}nt j|j}||j}t}n t|}| ||dS#t$ryttj}t |drL|j}t#|t$r ||_YdStt |d||_YdSYdSt($rYdSwxYw)NrJ view_classrKurlconf)r)source handler404)r"pathfuncrgetattrhasattrr$ path_inforrr set_transaction_namer#rr ROOT_URLCONFrrr transactionr)scoperTrtransaction_namefnrrhandlers rG _set_transaction_name_and_sourcercs%   / /&&+B8\SU9V9VWW   % ' 'w ** N#2#:%w$$$  $3#:7;L#M#M  #&0 +FF%&78F ""  #          566 7L ) ) (G'<00 $+!!!!$=G\7;;%%!!!!          sCC AE"#E EEcftj}|t}|dSt |5}t ||j||ttj ||ddddS#1swxYwYdSrB) r r]r^rMrconfigure_scoperrTadd_event_processor_make_event_processorrrrhub integrationrs rG_before_get_responsers +C%%&788KLLL     %( 0MwWWW !! !'+g"6"6 D D                     s A B&&B*-B*cLt|dsdSt|||dS)z Some django middlewares overwrite request.urlconf so we need to respect that contract, so we try to resolve the url again. rN)rr)rrrTs rG_attempt_resolve_againrs4 7I & &$U,=wGGGGGrHctj}|t}| |jdkrdS|5}t |||jddddS#1swxYwYdS)NrK)r r]r^rMrTrrrs rG_after_get_responsers +C%%&788Kk;uDD    N%w{/LMMMNNNNNNNNNNNNNNNNNNs A..A25A2cddlm}|jfd}||_t|drddlm}||t dSdS)zU patch get_response, because at that point we have the Django request object r) BaseHandlerc\t|||}t||SrB)rr)rXrrvold_get_responses rGsentry_patched_get_responsez8_patch_get_response..sentry_patched_get_responses6W%%%  dG , ,G$$$ rHget_response_async)patch_get_response_asyncN)django.core.handlers.baser get_responserrrr)rrrrs @rGrrs 655555"/ ;K{011DPPPPPP  .BCCCCCDDrHcfd}|S)Nc}||S |}||}n#t$rYnwxYwt5t||dddn #1swxYwYt r6t5t ||dddn #1swxYwY|SrB)rAttributeErrorrDjangoRequestExtractorextract_into_eventr _set_user_info)rxryr drf_request weak_requests rGevent_processorz._make_event_processor..event_processorst ,.. ?L !==??K&%    D ) * * F F "7 + + > >u E E E F F F F F F F F F F F F F F F $ % % /,.. / /w... / / / / / / / / / / / / / / / s0* 77#A77A;>A;B;;B?B?r)rrrs` rGrrs$2 rHc tj}|t}||M|jdkrB|5}t |||jdddn #1swxYwY|j}ttj |j ddd\}}| ||dSdS)NrKrNF)typehandled)client_options mechanism)ry) r r]r^rMrTrrclientrsysrioptions capture_event)rrrrrrrxrys rGrrs" +C%%&788K  ;#@E#I#I$$&& V%&w{7TUUU V V V V V V V V V V V V V V V* LNN!>'E::   t %d+++++s A--A14A1c8eZdZdZdZdZdZdZdZdZ dS) rc|jjSrB)rMETArXs rGenvzDjangoRequestExtractor.env |  rHctjtjg}i}|jjD]\}}||vr t ||<|||<|SrB)django_settingsCSRF_COOKIE_NAMESESSION_COOKIE_NAMErCOOKIESitemsr)rXprivacy_cookies clean_cookieskeyvals rGcookieszDjangoRequestExtractor.cookiessm  ,  /    ,2244 ) )HCo%%%> c""%( c""rHc|jjSrB)rbodyrs rGraw_datazDjangoRequestExtractor.raw_datarrHc|jjSrB)rPOSTrs rGformzDjangoRequestExtractor.formrrHc|jjSrB)rFILESrs rGfileszDjangoRequestExtractor.filess |!!rHc|jSrB)size)rXfiles rG size_of_filez#DjangoRequestExtractor.size_of_file"s yrHcd |jjS#t$rtj|cYSwxYwrB)rdatarr parsed_bodyrs rGrz"DjangoRequestExtractor.parsed_body&sD 6<$ $ 6 6 6#/55 5 5 5 6s //N) rrrrrrr r rrrrHrGrrs}!!! !!!!!!"""66666rHrc|di}t|dd}|t|sdS |dt|jn#t $rYnwxYw |d|jn#t $rYnwxYw |d|dS#t $rYdSwxYw)Nuserremailusername) setdefaultrrDstrpkrr get_username)rrx user_infors rGrr.s  ,,I 7FD ) )D |+D11| T3tw<<0000       Wdj1111       Z):):)<)<=====      s5(A%% A21A26B BB#(C CCc< ddlm}n#t$r ddlm}YnwxYw ddlm}n#t$r ddlm}YnwxYw |j|j|j n#t$rYdSwxYwd fd }fd}fd}||_||_||_ tddS) z9If installed this causes Django's queries to be captured.r) CursorWrapper)BaseDatabaseWrapperNcPtj}|t |||St ||j||dd5}t ||jj|j |||cdddS#1swxYwYdS)NformatF paramstyle executemany r r]r^rMrcursor _set_db_datadbvendorget_connection_params)rXsqlparamsrspan real_executes rGexecutez!install_sql_hook..execute^sk   0 1 1 9<c622 2  c6hE    3  tw~tw/L/L/N/N O O O<c622  3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3?BB"BcPtj}|t |||St ||j||dd5}t ||jj|j |||cdddS#1swxYwYdS)Nr!Tr"r%)rXr+ param_listrr-real_executemanys rGr$z%install_sql_hook..executemanyjsk   0 1 1 9##D#z:: :  c:(PT    ;  tw~tw/L/L/N/N O O O##D#z::  ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;r0ctj}|t |St 5|dddddn #1swxYwY|tjd5}t||j | |cdddS#1swxYwYdS)Nrquery)messagecategory)op description) r r]r^rMradd_breadcrumb start_spanrDBr'r)r*)rXrr- real_connects rGrz!install_sql_hook..connectvsbk   0 1 1 9<%% % ( * * D D   y7  C C C D D D D D D D D D D D D D D D^^ru)^ < < & t{D,F,F,H,H I I I<%% & & & & & & & & & & & & & & & & & &s$A%%A),A)3CCCzdjango.db.backendsrB) django.db.backends.utilsrrdjango.db.backends.utildjango.db.backendsrdjango.db.backends.base.baser/r$rrr)rrr/r$rr=r.r3s @@@rGrrGsf:::::::: :::99999999:E::::::: EEEDDDDDDDDE$, (4*2  3 3 3 3 3 3 ; ; ; ; ; & & & & &$M +M")&'''''s* *==A A%$A%c,|tj||dp|d}| |tj||d}| |tj||d}| |tj||d}|"|tj|dSdS)Ndbnamedatabasehostport unix_socket)set_datar DB_SYSTEMrrDB_NAMESERVER_ADDRESS SERVER_PORTSERVER_SOCKET_ADDRESS)r-r)connection_paramsdb_nameserver_address server_portserver_socket_addresss rGr'r'sMM($f---##H--R1B1F1Fz1R1RG h&000&**622N! h-~>>>#''//K h*K888-11-@@( h46KLLLLL)(rHrB)q __future__rr threadingr importlibrsentry_sdk._compatrsentry_sdk._typesrsentry_sdk.constsrrsentry_sdk.hubr r sentry_sdk.scoper sentry_sdk.serializerr sentry_sdk.tracingr rsentry_sdk.tracing_utilsrsentry_sdk.utilsrrrrrrrrrsentry_sdk.integrationsrrsentry_sdk.integrations.loggingrsentry_sdk.integrations.wsgir$sentry_sdk.integrations._wsgi_commonrrNrrr`r r django.corer! django.urlsr"rdjango.core.urlresolversr#+sentry_sdk.integrations.django.transactionsr$(sentry_sdk.integrations.django.templatesr%r&)sentry_sdk.integrations.django.middlewarer'/sentry_sdk.integrations.django.signals_handlersr($sentry_sdk.integrations.django.viewsr)&sentry_sdk.integrations.django.cachingr.typingr/r0r1r2r3r4rr5django.http.responser6django.http.requestr7django.utils.datastructuresr8r9r:r;r<r=r>r?rDrRrMrLockrrrrrrrrrrrrrrr'rrHrGrqs&&&&&& ######++++++++++++********88888888777777;;;;;;GGGGGGGG777777                      >=======999999======AAAAAA/000000777777######$$$$$$5''''''' 5554444444459+++++++ 999888888889/// ,- . ../HGGGGGONNNNNIIIIII<<<<<<"1"DDDDDDDMR555555111111------::::::''''''&&&&&&<<<<<<QQQQQQQQQQQQG//// --- 4QQQQQ QQQh  ).""4=4=4=n2222000,' ' ' T   $ H H HNNNDDD0<,,,,(*6*6*6*6*6-*6*6*6Z   2?(?(?(DMMMMMsTC B C B.+C -B..C 2B98C 9 CC CC C