
    ghb                        S SK r S SKrS SKrS SKrS SKJr  S SKrS SKJrJ	r	  S SK
JrJr  S SKJrJr  S SKJrJr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJrJ r   S S	K!J"r"J#r#J$r$  S S
K%J&r&  S SK'J(r(  S SK)J*r*J+r+   S SK,J-r.  S SK/J0r1  S SK2J3r3  S SK/J0r0   S SK4J5r5   S SK4J8r8   S SK9J:r:  S SK<J=r=  S SK>J?r?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrF  \.SS S:  a  S SKGJHrH  OSrHS SKIJJrJ  \J(       aT  S SKIJKrK  S SKIJLrL  S SKIJMrM  S S KIJNrN  S S!KIJOrO  S S"KIJPrP  S S#KQJRrR  S S$KSJTrT  S S%KUJVrV  S S&KWJXrX  S S'KJYrY  S S(K'JZrZ  S S)K[J\r\J]r]J^r^J_r_  \.S*:  a  S+ r`OS, r`S-ra " S. S/\#5      rbS0qc\R                  " 5       reS1 rfS2 rgS3 rhS4 riS5 rjS6 rkS7 rlS8 rmS9 rnSAS: jro " S; S<\+5      rpS= rqS> rrS? rsS@ rtg! \6 a
    S SK7J5r5   GNf = f! \6 a
    S SK7J8r8   GN!f = f! \; a    Sr: GN)f = f! \6 a	    \$" S5      ef = f)B    N)import_module)OPSPANDATA)add_global_event_processorshould_send_default_pii)add_global_repr_processoradd_repr_sequence_type)SOURCE_FOR_STYLETransactionSource)add_query_sourcerecord_sql_queries)
AnnotatedValueHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGESENSITIVE_DATA_SUBSTITUTEloggercapture_internal_exceptionsensure_integration_enabledevent_from_exceptiontransaction_from_functionwalk_exception_chain)_check_minimum_versionIntegrationDidNotEnable)ignore_logger)SentryWsgiMiddleware)DEFAULT_HTTP_METHODS_TO_CAPTURERequestExtractor)VERSIONsettings)signals)resolve)Resolver404)ASGIRequestzDjango not installed)LEGACY_RESOLVER)!get_template_frame_from_exceptionpatch_templates)patch_django_middlewares)patch_signals)patch_views   )      )patch_caching)TYPE_CHECKING)Any)Callable)Dict)Optional)Union)List)WSGIRequest)HttpResponse)	QueryDict)MultiValueDict)Span)_ScopedResponse)EventHintEventProcessorNotImplementedType)r-   
   c                 "    U R                  5       $ Nis_authenticatedrequest_users    j/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/django/__init__.pyrE   rE   ^   s    ,,..    c                     U R                   $ rC   rD   rF   s    rH   rE   rE   d   s    ,,,rI   )function_nameurlc                   j    \ rS rSrSrSrS\ 3rS\ 3rSrSr	Sr
Sr/ rSS	S	S
S\4S jr\S 5       rSrg)DjangoIntegrationl   a  
Auto instrument a Django application.

:param transaction_style: How to derive transaction names. Either `"function_name"` or `"url"`. Defaults to `"url"`.
:param middleware_spans: Whether to create spans for middleware. Defaults to `True`.
:param signals_spans: Whether to create spans for signals. Defaults to `True`.
:param signals_denylist: A list of signals to ignore when creating spans.
:param cache_spans: Whether to create spans for cache operations. Defaults to `False`.
djangoz
auto.http.zauto.db. NrL   TFc                     U[         ;  a  [        SU< S[         < S35      eXl        X l        X0l        U=(       d    / U l        X@l        [        [        [        R                  U5      5      U l        g )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrortransaction_stylemiddleware_spanssignals_spanssignals_denylistcache_spanstuplemapstrupperhttp_methods_to_capture)selfrV   rW   rX   rZ   rY   r_   s          rH   __init__DjangoIntegration.__init__   sf     $<<$&>@  "3 0* 0 6B&',S<S-T'U$rI   c                    ^^ [        [        [        5        [        5         [	        S5        [	        S5        SSKJm  TR                  m[        [        T5      UU4S j5       n U Tl        [        5         [        5         [        R                  R                  [        5        [        S 5       n[         S 5       n[#        5         [%        5         ['        5         [)        5         [+        5         [-        5         [.        b  [/        5         g g )Nzdjango.serverzdjango.requestr   )WSGIHandlerc                   > T	R                  U T5      nSSKJn  UR                  n[        R
                  " 5       R                  [        5      n[        UU[        R                  U(       a  UR                  O[        S9nU" X5      $ )Nr   r    )span_originr_   )__get__django.confr!   USE_X_FORWARDED_HOST
sentry_sdk
get_clientget_integrationrN   r   originr_   r   )
r`   environstart_responsebound_old_appr!   use_x_forwarded_forintegration
middlewarerd   old_apps
           rH   sentry_patched_wsgi_handlerADjangoIntegration.setup_once.<locals>.sentry_patched_wsgi_handler   sw     $OOD+>M,"*"?"?$//1AABSTK-#-44 #  778	J g66rI   c                 B   Uc  U $ UR                  SS 5      nUc  U $ U R                  SS 5      nUc  U $ UR                  SS 5      nUc  U $ [        [        U5      [        U5      5       H  u  nu  pVn[	        U5      nUc  M  UR                  S0 5      R                  S/ 5      n[        [        [        U5      5      5       H:  n	X   n
U
R                  S5      S;   d  M  U
R                  S5      S	:X  d  M5  U	S
-  n	  O   [        U5      n	UR                  X5        M     U $ )Nexc_info	exceptionvalues
stacktraceframesfunction)zParser.parseparserendermodulezdjango.template.baser-   )getzipreversedr   r'   rangeleninsert)eventhintrx   ry   rz   _	exc_valueframer|   ifs              rH   process_django_templates>DjangoIntegration.setup_once.<locals>.process_django_templates   s"    |xx
D1H		+t4I ]]8T2F~03 "6x"@1,	,A! :)D$&]]<<@@2NF%eCK&89"IEE*-1TT !h3I IFA! :  KMM!+%1( LrI   c                      SSK Jn  [	        X5      (       a  U R
                  (       a  [        $ SU R                  R                  U R                  [        U 5      4-  $ ! [         a	    [        s $ f = f)Nr   )QuerySetz<%s from %s at 0x%x>)
django.db.models.queryr   	ExceptionNotImplemented
isinstance_result_cache	__class____name__
__module__id)valuer   r   s      rH   _django_queryset_repr;DjangoIntegration.setup_once.<locals>._django_queryset_repr   sm    	& < e..%2E2E%%)((  5	-    &%%&s   A A10A1)r   rN   DJANGO_VERSIONinstall_sql_hookr   django.core.handlers.wsgird   __call__r   _patch_get_response_patch_django_asgi_handlerr"   got_request_exceptionconnect_got_request_exceptionr   r   _patch_channelsr)   r+   r(   r*   "add_template_context_repr_sequencer/   )ru   r   r   rd   rt   s      @@rH   
setup_onceDjangoIntegration.setup_once   s     	0.A 	o&&'9&&	#$5w	?	7 
@	7,  ;"$%%--.DE	#(	 
$(	T 
#	 
#	, 	 "*,$O %rI   )rZ   r_   rW   rY   rX   rV   )r   r   __qualname____firstlineno____doc__
identifierrm   	origin_dbrV   rW   rX   rZ   rY   r   ra   staticmethodr   __static_attributes__ rI   rH   rN   rN   l   sr     J*&F:,'IMK   ?V2 x xrI   rN   Fc                  2  ^ [         (       a  g[           [         (       a
   SSS5        gSq [        5           SSKJn   U R
                  mU4S jnXl        SSS5        SSS5        g! [         a     Nf = f! , (       d  f       N'= f! , (       d  f       g= f)au  
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   )APIViewc                    > [        5          [        R                  " U5      UR                  l         S S S 5        T" X/UQ70 UD6$ ! , (       d  f       N= frC   )r   weakrefref_request_sentry_drf_request_backref)r`   requestargskwargsold_drf_initials       rH   sentry_patched_drf_initial._patch_drf.<locals>.sentry_patched_drf_initialE  sN    46GN{{#H((D 	 7
 +4J4J6JJ 76s   &A
A)_DRF_PATCHED_DRF_PATCH_LOCKr   rest_framework.viewsr   initialImportError)r   r   r   s     @rH   
_patch_drfr     s}    . |	< 
 (*=8 #*//K #=# + 
   +* 
sI   BBA7A'A7B'
A41A73A44A77
B	B
Bc                       SSK Jn   [        (       d  [        R
                  " S[        -   5        SSKJn  U" U 5        g ! [         a     g f = f)Nr   )AsgiHandlerz3We detected that you are using Django channels 2.0.) patch_channels_asgi_handler_impl)	channels.httpr   r   r   r   warningr   #sentry_sdk.integrations.django.asgir   )r   r   s     rH   r   r   Q  sM    -   	A'(	

 U$[1%     ? 
AAc                       SSK Jn   [        (       d  [        R
                  " S[        -   5        SSKJn  U" U 5        g ! [         a     g f = f)Nr   )ASGIHandlerz(We detected that you are using Django 3.)patch_django_asgi_handler_impl)	django.core.handlers.asgir   r   r   r   r   r   r   r   )r   r   s     rH   r   r   j  sK    9   	69RR	
 S";/  r   c                     S nUS:X  a6  [        UR                  5      R                  n[        [	        USU5      5      nOaUS:X  a[  [        US5      (       a*  [        R                   " UR                  UR                  S9nO [        R                   " UR                  5      nUc  UR                  n[        R                  nO	[        U   nU R                  UUS9  g ! [         as    [        [        R                   5      n[        US5      (       aF  UR"                  n[%        U[&        5      (       a  Xpl         g [        [	        USU5      5      U l         g  g [*         a     g f = f)NrK   
view_classrL   urlconf)r   )source
handler404)r#   pathfuncr   getattrhasattrr&   	path_infor   r   URLr
   set_transaction_namer$   r   r!   ROOT_URLCONFr   r   r]   transactionr   )scoperV   r   transaction_namefnr   r   handlers           rH    _set_transaction_name_and_sourcer     sF   %/&++B8\SU9VW%'w	**#2#:#:%%w$  $3#:#:7;L;L#M #&00&**F%&78F"" 	# 	
   5 56 7L))((G'3''$+!$=G\7;%! *  s   CC AE#8E#	E#"E#c                 $   [         R                  " 5       R                  [        5      nUc  g [	        5         [         R
                  " 5       n[        X!R                  U 5        UR                  [        [        R                  " U 5      U5      5        g rC   )rj   rk   rl   rN   r   get_current_scoper   rV   add_event_processor"_make_wsgi_request_event_processorr   r   r   rr   r   s      rH   _before_get_responser     si    '')99:KLKL((*E$U,I,I7S	*7;;w+?MrI   c                 @    [        U S5      (       d  g[        XU 5        g)z|
Some django middlewares overwrite request.urlconf
so we need to respect that contract,
so we try to resolve the url again.
r   N)r   r   )r   r   rV   s      rH   _attempt_resolve_againr     s     7I&&$UwGrI   c                     [         R                  " 5       R                  [        5      nUb  UR                  S:w  a  g [         R
                  " 5       n[        XUR                  5        g )NrL   )rj   rk   rl   rN   rV   r   r   r   s      rH   _after_get_responser     sP    '')99:KLKk;;uD((*E7;+H+HIrI   c                     ^ SSK Jn   U R                  mU4S jnXl        [        U S5      (       a  SSKJn  U" U [        5        gg)zM
patch get_response, because at that point we have the Django request object
r   )BaseHandlerc                 D   > [        U5        T" X5      n[        U5        U$ rC   )r   r   )r`   r   rvold_get_responses      rH   sentry_patched_get_response8_patch_get_response.<locals>.sentry_patched_get_response  s"    W%d,G$	rI   get_response_async)patch_get_response_asyncN)django.core.handlers.baser   get_responser   r   r   r   )r   r   r   r   s      @rH   r   r     sB    
 6"//  ;{011P .BC 2rI   c                    ^  U 4S jnU$ )Nc                 f  > T" 5       nUc  U $ [         S LnU(       a  [        U5      [         :X  a  U $ [        5          [        U5      R	                  U 5        S S S 5        [        5       (       a   [        5          [        X 5        S S S 5        U $ U $ ! , (       d  f       N?= f! , (       d  f       U $ = frC   )r%   typer   DjangoRequestExtractorextract_into_eventr   _set_user_info)r   r   r   django_3weak_requests       rH   wsgi_request_event_processorH_make_wsgi_request_event_processor.<locals>.wsgi_request_event_processor  s    
 .?Ld*W4L(*"7+>>uE + #$$,.w. / u +* /. s   B8B!
B!
B0r   )r   rr   r  s   `  rH   r   r     s    . ('rI   c                 ^   [         R                  " 5       nUR                  [        5      nUc  g U b;  UR                  S:X  a+  [         R
                  " 5       n[        XUR                  5        [        [        R                  " 5       UR                  SSS.S9u  pV[         R                  " XVS9  g )NrL   rP   F)r   handled)client_options	mechanism)r   )rj   rk   rl   rN   rV   r   r   r   sysrx   optionscapture_event)r   r   clientrr   r   r   r   s          rH   r   r     s    ""$F(():;K{<<E,,.w{/L/LM&~~#6KE
 U.rI   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)r   i  c                 \     UR                  5       nUb  UnXl        g ! [         a     Nf = frC   )r   AttributeErrorr   )r`   r   drf_requests      rH   ra   DjangoRequestExtractor.__init__  s;    	!==?K&%   		s    
++c                 .    U R                   R                  $ rC   )r   METAr`   s    rH   envDjangoRequestExtractor.env$      ||   rI   c                     [         R                  [         R                  /n0 nU R                  R                  R                  5        H  u  p4X1;   a
  [        X#'   M  XBU'   M     U$ rC   )django_settingsCSRF_COOKIE_NAMESESSION_COOKIE_NAMEr   COOKIESitemsr   )r`   privacy_cookiesclean_cookieskeyvals        rH   cookiesDjangoRequestExtractor.cookies(  sa     ,,//

 ,,224HC%%>"%(c"	 5 rI   c                 .    U R                   R                  $ rC   )r   bodyr  s    rH   raw_dataDjangoRequestExtractor.raw_data8  r  rI   c                 .    U R                   R                  $ rC   )r   POSTr  s    rH   formDjangoRequestExtractor.form<  r  rI   c                 .    U R                   R                  $ rC   )r   FILESr  s    rH   filesDjangoRequestExtractor.files@  s    ||!!!rI   c                     UR                   $ rC   )size)r`   files     rH   size_of_file#DjangoRequestExtractor.size_of_fileD  s    yyrI   c                 |     U R                   R                  $ ! [         a    [        R                  " U 5      s $ f = frC   )r   datar   r   parsed_bodyr  s    rH   r5  "DjangoRequestExtractor.parsed_bodyH  s7    	6<<$$$ 	6#//55	6s     ;;)r   N)r   r   r   r   ra   r  r   r$  r(  r,  r1  r5  r   r   rI   rH   r   r     s*    ! !!"6rI   r   c                    UR                  S0 5      n[        U SS 5      nUb  [        U5      (       d  g  UR                  S[        UR                  5      5         UR                  SUR                  5         UR                  SUR                  5       5        g ! [
         a     NKf = f! [
         a     N>f = f! [
         a     g f = f)Nuserr   emailusername)
setdefaultr   rE   r]   pkr   r9  get_username)r   r   	user_infor8  s       rH   r   r   P  s      ,I7FD)D|+D11T3tww<0Wdjj1Z):):)<=  
  
  s5   %B B) 8 B9 
B&%B&)
B65B69
CCc                    ^^^  SSK Jn    SSKJn   U R                  mU R                  mUR                  m[        [        T5      S	U4S jj5       n[        [        T5      U4S j5       n[        [        T5      U4S j5       nX l        X0l        XAl	        [        S5        g! [         a	    SSKJn    Nf = f! [         a	    SSKJn   Nf = f! [         a     gf = f)
z9If installed this causes Django's queries to be captured.r   )CursorWrapper)BaseDatabaseWrapperNc           	        > [        U R                  UUSS[        R                  S9 n[	        X05        T" XU5      nS S S 5        [        5          [        W5        S S S 5        W$ ! , (       d  f       N.= f! , (       d  f       W$ = f)NformatFcursorqueryparams_list
paramstyleexecutemanyrf   r   rE  rN   r   _set_db_datar   r   )r`   sqlparamsspanresultreal_executes        rH   execute!install_sql_hook.<locals>.execute  s~      ;;)33
 $!$V4F
 )*T" + 
 
 +*    A%A6%
A36
Bc           	        > [        U R                  UUSS[        R                  S9 n[	        X05        T" XU5      nS S S 5        [        5          [        W5        S S S 5        W$ ! , (       d  f       N.= f! , (       d  f       W$ = f)NrC  TrD  rJ  )r`   rL  
param_listrN  rO  real_executemanys        rH   rI  %install_sql_hook.<locals>.executemany  s~      ;;")33
 $%d<F
 )*T" + 
 
 +* rS  c                 6  > [        5          [        R                  " SSS9  S S S 5        [        R                  " [        R
                  S[        R                  S9 n[        X5        T" U 5      sS S S 5        $ ! , (       d  f       N]= f! , (       d  f       g = f)Nr   rF  )messagecategory)opnamerm   )	r   rj   add_breadcrumb
start_spanr   DBrN   r   rK  )r`   rN  real_connects     rH   r   !install_sql_hook.<locals>.connect  sv     )*%%i'J + ""uu$..
 $%
 
 +*
 
s   A9B
9
B

Bzdjango.db.backendsrC   )django.db.backends.utilsr@  r   django.db.backends.utildjango.db.backendsrA  django.db.backends.base.baserQ  rI  r   r  r   rN   r   )r@  rA  rQ  rI  r   r`  rP  rV  s        @@@rH   r   r   i  s    ::E:
$,,(44*22
   1<@ A$   13CD E&   1<@& A& $ +")&'U  :9:  EDE  s3   B" B8 $C "B54B58C
C
CCc                    [        US5      (       a  UR                  OUnUR                  nU R                  [        R
                  U5        [        US5      =(       aG    [        UR                  S5      =(       a*    [        R                  " UR                  R                  5      nU(       a  UR                  R                  5       nO UR                  R                  R                  UR                  R                  R                  S.nUR                  R                  R                  nU(       a  UR                  S5      (       d  XeS'   UR#                  S5      =(       d    UR#                  S5      nUb   U R                  [        R$                  U5        UR#                  S5      nUb   U R                  [        R&                  U5        UR#                  S	5      n	U	b)  U R                  [        R(                  [+        U	5      5        UR#                  S
5      n
U
b!  U R                  [        R,                  U
5        g g ! [         a    UR!                  5       n GNf = f)Ndb
connectionget_dsn_parameters)dbnameport/hostrj  databaserk  unix_socket)r   rg  vendorset_datar   	DB_SYSTEMrh  inspect	isroutineri  inforj  rk  rm  
startswithr   get_connection_paramsr   DB_NAMESERVER_ADDRESSSERVER_PORTr]   SERVER_SOCKET_ADDRESS)rN  cursor_or_dbrg  rp  is_psycopg2connection_paramspg_hostdb_nameserver_addressserver_portserver_socket_addresss              rH   rK  rK    s   #L$77\BYYFMM($$f- 	l+ 	JL++-AB	Jl55HHI 
 (33FFH	;
 '1166==$//4499! #--2277Gw11#66,3&)  ##H-R1B1F1Fz1RGh&&0&**62N!h--~>#''/Kh**C,<=-11-@(h446KL )!  	; " 8 8 :	;s   	BH> >IIc                  H     SSK Jn   [        U 5        g ! [         a     g f = f)Nr   BaseContext)django.template.contextr  r	   r   r  s    rH   r   r     s$    7{+ s    
!!rC   )urs  r  	threadingr   	importlibr   rj   sentry_sdk.constsr   r   sentry_sdk.scoper   r   sentry_sdk.serializerr   r	   sentry_sdk.tracingr
   r   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   sentry_sdk.integrationsr   r   r   sentry_sdk.integrations.loggingr   sentry_sdk.integrations.wsgir   $sentry_sdk.integrations._wsgi_commonr   r   rP   r   r   rh   r!   r  django.corer"   django.urlsr#   r   django.core.urlresolversr$   r   r%   r   +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/   typingr0   r1   r2   r3   r4   r5   r6   r   r7   django.http.responser8   django.http.requestr9   django.utils.datastructuresr:   r;   r<   sentry_sdk._typesr=   r>   r?   r@   rE   rT   rN   r   Lockr   r   r   r   r   r   r   r   r   r   r   r   r   r   rK  r   r   rI   rH   <module>r     s    
   #  * P S B I   V U 9 =
/07#$5'9+
9 H O I <"1DM  51-:'<QQ G/-
 4 g gT .."4=n220,'T"
HJD0(8/&46- 46n2O(d1MhM  5445
  9889    /
-
../sf   :G F F2 !G F/+G .F//G 2G>G GG GG GG G#