
    ]j)                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d Zd Z  G d de      Z!y)    N)defaultdict)copy)saferepr)connections)path)gettext_lazyngettext_lazy)SignedDataForm)Panel)views)SQLSelectForm)unwrap_cursorwrap_cursor)contrasting_color_generatorreformat_sql)render_stacktracec                    | dk(  rdd l }|j                  j                  t        d      |j                  j                  t        d      |j                  j
                  t        d      |j                  j                  t        d      |j                  j                  t        d      i}nt        |       |j                  |      S )N
postgresqlr   
AutocommitzRead uncommittedzRead committedzRepeatable readSerializable)
psycopg2.extensions
extensionsISOLATION_LEVEL_AUTOCOMMIT_ ISOLATION_LEVEL_READ_UNCOMMITTEDISOLATION_LEVEL_READ_COMMITTEDISOLATION_LEVEL_REPEATABLE_READISOLATION_LEVEL_SERIALIZABLE
ValueErrorgetvendorlevelpsycopg2choicess       H/root/env/lib/python3.12/site-packages/debug_toolbar/panels/sql/panel.pyget_isolation_level_displayr'      s    " ::AlO@@!DVBW>>BR@S??CTAU<<a>O
   ;;u    c                    | dk(  rdd l }|j                  j                  t        d      |j                  j                  t        d      |j                  j
                  t        d      |j                  j                  t        d      |j                  j                  t        d      i}nt        |       |j                  |      S )Nr   r   IdleActivezIn transactionzIn errorUnknown)
r   r   TRANSACTION_STATUS_IDLEr   TRANSACTION_STATUS_ACTIVETRANSACTION_STATUS_INTRANSTRANSACTION_STATUS_INERRORTRANSACTION_STATUS_UNKNOWNr   r    r!   s       r&   get_transaction_status_displayr2   #   s    " 776991X;::A>N<O::AjM::AiL
   ;;ur(   c                        e Zd ZdZ fdZd Zd Z ed      Ze	d        Z
e	d        ZdZed	        Zd
 Zd Zd Zd Z xZS )SQLPanelze
    Panel that displays information about the SQL queries run while processing
    the request.
    c                     t        |   |i | t        D ci c]  }|t        t        |   j                        ! c}| _        d| _        d| _        g | _        i | _	        i | _
        i | _        y c c}w )Nr   )super__init__r   lenqueries_offset	_sql_time_num_queries_queries
_databases_transaction_status_transaction_ids)selfargskwargsk	__class__s       r&   r7   zSQLPanel.__init__9   sn    $)&)@KL13{1~5566L#%  " Ms   $A0c                    |t         vry t         |   j                  }|sy |j                  dk(  r|j                         }nt	        |j                        | j
                  j                  |      }|| j
                  |<   |sy ||k7  r=|r,t        j                         j                  | j                  |<   nd | j                  |<   | j                  |   S )Nr   )r   
connectionr"   get_transaction_statusr   r?   r    uuiduuid4hexr@   )rA   aliasconn
cur_statuslast_statuss        r&   get_transaction_idzSQLPanel.get_transaction_idC   s    #5!,,;;,&446JT[[))..2259*4  '$/3zz|/?/?%%e,/3%%e,$$U++r(   c                 N   | j                   j                  ||f       || j                  vr|d   dd| j                  |<   n7| j                  |   dxx   |d   z  cc<   | j                  |   dxx   dz  cc<   | xj                  |d   z  c_        | xj                  dz  c_        y )Nduration   )
time_spentnum_queriesrT   rU   )r=   appendr>   r;   r<   )rA   rL   rC   s      r&   recordzSQLPanel.record^   s    eV_-'$Z0 &DOOE"
 OOE"<0F:4FF0OOE"=1Q61&,,Qr(   SQLc                 b    t        dd| j                        | j                  | j                  fz  S )Nz%d query in %.2fmsz%d queries in %.2fms)__r<   r;   )rA   s    r&   nav_subtitlezSQLPanel.nav_subtitleo   s6    &(>@Q@QRNNV
 
 	
r(   c                 P    t        | j                        }t        dd|      d|iz  S )Nz%SQL queries from %(count)d connectionz&SQL queries from %(count)d connectionscount)r8   r>   rZ   )rA   r]   s     r&   titlezSQLPanel.titlev   s5    DOO$78
 	
r(   zdebug_toolbar/panels/sql.htmlc                     t        dt        j                  d      t        dt        j                  d      t        dt        j                  d      gS )Nzsql_select/
sql_select)namezsql_explain/sql_explainzsql_profile/sql_profile)r   r   r`   rb   rc   )clss    r&   get_urlszSQLPanel.get_urls   sD      0 0|D!2!2G!2!2G
 	
r(   c                 N    t        j                         D ]  }t        ||         y N)r   allr   rA   rG   s     r&   enable_instrumentationzSQLPanel.enable_instrumentation   s"    %//+ 	*J
D)	*r(   c                 L    t        j                         D ]  }t        |        y rg   )r   rh   r   ri   s     r&   disable_instrumentationz SQLPanel.disable_instrumentation   s     %//+ 	&J*%	&r(   c                 n	   t               t        fd      }t        d       }t        d       }d }d }| j                  rLd}t        dt	        | j
                        dz  z        }	t        | j
                  j                               D ]d  \  }
}g d	}|
d
z  }d|
d
z  |	z  z
  ||<   |}||   |	k  r9t        d||   z
  d      }||xx   |z  cc<   |dz  }|dkD  rd}|||<   ||   |	k  r9||d<   f i }d }d}| j                  D ]l  \  }}||    ||      xx   dz  cc<   ||    ||      xx   dz  cc<   |j                  d      }|j                  |      }||k7  r&|rd| j                  |dz
     d   d<   |||<   |rd|d<   |rd|d<   ||d<   d|v rt        |d   |d         |d<   d|v rt        |d   |d         |d<   t        d t        t        |            j                        |d<   |d   rt!        |d   d      |d<   | j
                  |   d   |d<   	 |d   | j"                  z  dz  |d<   ||d <   |d   |d    z   |d!<   ||d   z  }t'        |d"         |d"<   |dz  }||d"      |d#<   o |rd| j                  |dz
     d   d<   t               }|j)                         D ci c]:  \  }}||j)                         D ci c]  \  }}|dk\  r||t+        |      f c}}< }}}}}|j)                         D ci c]:  \  }}||j)                         D ci c]  \  }}|dk\  r||t+        |      f c}}< }}}}}| j                  D ]4  \  }}	 ||    ||         \  |d$<   |d%<   ||    ||         \  |d&<   |d'<   6 | j
                  j)                         D ]R  \  }}	 t/        d( ||   j                         D              |d$<   t/        d) ||   j                         D              |d&<   T | j1                  t3        | j
                  j)                         d* +      | j                  D cg c]  \  }}|	 c}}| j"                  d,       y # t$        $ r	 d|d<   Y 9w xY wc c}}w c c}}}}w c c}}w c c}}}}w # t,        $ r Y Dw xY w# t,        $ r Y w xY wc c}}w )-Nc                      t               S rg   )next)colorss   r&   <lambda>z)SQLPanel.generate_stats.<locals>.<lambda>   s    4< r(   c                       t        t              S rg   r   int r(   r&   rq   z)SQLPanel.generate_stats.<locals>.<lambda>   s    K,< r(   c                       t        t              S rg   rs   ru   r(   r&   rq   z)SQLPanel.generate_stats.<locals>.<lambda>   s    {3/? r(   c                     | d   S )Nraw_sqlru   )querys    r&   similar_keyz,SQLPanel.generate_stats.<locals>.similar_key   s    ##r(   c                 L    | d   dnt        | d         }| d   t        |      fS )N
raw_paramsru   rx   )tupler   )ry   r|   s     r&   duplicate_keyz.SQLPanel.generate_stats.<locals>.duplicate_key   s7    L)1uU<=P7Q  )$hz&:;;r(   r   g      p@g      @)r   r   r         rS      	rgb_colortrans_idT
ends_transstarts_transin_transrL   	iso_levelr"   trans_status)initial)auto_idr   formsql)with_togglerR   d   width_ratiostart_offset
end_offset
stacktracetrace_colorsimilar_countsimilar_colorduplicate_countduplicate_colorc              3   &   K   | ]	  }|d      ywr   Nru   .0es     r&   	<genexpr>z*SQLPanel.generate_stats.<locals>.<genexpr>  s      2AaD2   c              3   &   K   | ]	  }|d      ywr   ru   r   s     r&   r   z*SQLPanel.generate_stats.<locals>.<genexpr>  s      4AaD4r   c                     | d   d    S )NrS   rT   ru   )xs    r&   rq   z)SQLPanel.generate_stats.<locals>.<lambda>  s    AaD<N;N r(   )key)	databasesr9   sql_time)r   r   r=   rt   r8   r>   	enumeratevaluesminr    r'   r2   r
   r   r   r   r   r;   ZeroDivisionErrorr   itemsro   KeyErrorsumrecord_statssorted) rA   requestresponsetrace_colorsquery_similarquery_duplicatesrz   r~   width_ratio_tallyfactorndbrgbcolornnnc	trans_idsr   irL   ry   last_trans_idquery_colorsr9   r   query_similar_colorsr   query_duplicates_colors
alias_infoaqrp   s                                   @r&   generate_statszSQLPanel.generate_stats   s   ,."#78#$<=&'?@	$	< == !#doo"6"<=>F"4??#9#9#;< &2A 16F?2E
%j6)S3u:-s3BJ"$J!GBAv CG %j6) #&;& IHA $ +Iue$[%78A=8 'e(<=B= 99Z0 )e 4},$BFq1u.q1,?'/Ie$04n-(,E*%!&g%')Dh{);*E+& "U*,Jh~)>-E.) !/ -U*L*T*T!f <#/e$#OE%L%)__U%;K%Hk"-,1*,=,NRU+UE-( ):n%&+M&:U>=R&Rl#!U=%99!&7l8K&Ll#Q'3E,4G'Hm$W+IZ :>q1u&q),7 34 #0"5"5"7 
  
 w ,3MMO(E= A% tL'9::  
  
 #3"8"8":#
 #
 w .5mmo*E?"a' l);<< #
 #
 !MM 
	LE5	CWDe$D&@')? ,E2=3GH+,+,
	 "&!6!6!8 		E:.1 2"6u"="D"D"F2 /
?+ 14 4"9%"@"G"G"I4 1
,-		 	#OO))+1N +/--8$!QA8 NN	
q ) -+,E-(-" 
#
$     9sm    Q 0Q;
Q5)Q;
	R	
%RR	
 .R1AR!>R1 Q21Q25Q;
R	
	RR!	R.-R.c                     | j                         }dj                  t        |j                  dg                   }|j                  dd      }| j	                  d||       y )NzSQL {} queriesr9   r   r   )	get_statsformatr8   r    record_server_timing)rA   r   r   statsr^   values         r&   generate_server_timingzSQLPanel.generate_server_timing"  sP      ''EIIi,D(EF		*a(!!*eU;r(   )__name__
__module____qualname____doc__r7   rP   rW   r   	nav_titlepropertyr[   r^   templateclassmethodre   rj   rl   r   r   __classcell__)rE   s   @r&   r4   r4   3   sw    
#,6 %I
 
 	
 	
 /H
 
*
&K
Z<r(   r4   )"rI   collectionsr   r   pprintr   	django.dbr   django.urlsr   django.utils.translationr   r   r	   rZ   debug_toolbar.formsr
   debug_toolbar.panelsr   debug_toolbar.panels.sqlr   debug_toolbar.panels.sql.formsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.sql.utilsr   r   debug_toolbar.utilsr   r'   r2   r4   ru   r(   r&   <module>r      sG     #   !  K . & * 8 H T 1  s<u s<r(   