a
    ތxdu)                     @   s   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mZ d dlmZmZ d dlmZ dd Zdd ZG dd deZdS )    N)defaultdict)copy)saferepr)connections)path)gettext_lazyngettext_lazy)Panel)views)SQLSelectForm)unwrap_cursorwrap_cursor)contrasting_color_generatorreformat_sql)render_stacktracec                 C   sd   | dkrRd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| |	|S )N
postgresqlr   Z
AutocommitzRead uncommittedzRead committedzRepeatable readZSerializable)
psycopg2.extensions
extensionsZISOLATION_LEVEL_AUTOCOMMIT_Z ISOLATION_LEVEL_READ_UNCOMMITTEDZISOLATION_LEVEL_READ_COMMITTEDZISOLATION_LEVEL_REPEATABLE_READZISOLATION_LEVEL_SERIALIZABLE
ValueErrorgetvendorlevelZpsycopg2choices r   V/var/www/html/Ranjet/env/lib/python3.9/site-packages/debug_toolbar/panels/sql/panel.pyget_isolation_level_display   s    r   c                 C   sd   | dkrRd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| |	|S )Nr   r   IdleZActivezIn transactionzIn errorUnknown)
r   r   ZTRANSACTION_STATUS_IDLEr   ZTRANSACTION_STATUS_ACTIVEZTRANSACTION_STATUS_INTRANSZTRANSACTION_STATUS_INERRORZTRANSACTION_STATUS_UNKNOWNr   r   r   r   r   r   get_transaction_status_display"   s    r    c                       s   e Zd ZdZ fddZdd Zdd ZedZe	d	d
 Z
e	dd ZdZedd Zdd Zdd Zdd Zdd Z  ZS )SQLPanelze
    Panel that displays information about the SQL queries run while processing
    the request.
    c                    sJ   t  j|i | dd tD | _d| _d| _g | _i | _i | _i | _	d S )Nc                 S   s   i | ]}|t t| jqS r   )lenr   queries).0kr   r   r   
<dictcomp>:       z%SQLPanel.__init__.<locals>.<dictcomp>r   )
super__init__r   _offset	_sql_time_num_queries_queries
_databases_transaction_status_transaction_ids)selfargskwargs	__class__r   r   r)   8   s    zSQLPanel.__init__c                 C   s   |t vrd S t | j}|sd S |jdkr2| }n
t|j| j|}|| j|< |sZd S ||kr|rxt j	| j
|< n
d | j
|< | j
| S )Nr   )r   
connectionr   Zget_transaction_statusr   r/   r   uuiduuid4hexr0   )r1   aliasconnZ
cur_statusZlast_statusr   r   r   get_transaction_idB   s"    





zSQLPanel.get_transaction_idc                 K   s   | j ||f || jvr0|d dd| j|< n0| j| d  |d 7  < | j| d  d7  < |  j|d 7  _|  jd7  _d S )Nduration   )
time_spentnum_queriesr?   r@   )r-   appendr.   r+   r,   )r1   r:   r3   r   r   r   record]   s    
zSQLPanel.recordSQLc                 C   s   t dd| j| j| jf S )Nz%d query in %.2fmsz%d queries in %.2fms)__r,   r+   )r1   r   r   r   nav_subtitlen   s    zSQLPanel.nav_subtitlec                 C   s   t | j}tdd|d|i S )Nz%SQL queries from %(count)d connectionz&SQL queries from %(count)d connectionscount)r"   r.   rD   )r1   rF   r   r   r   titleu   s    
zSQLPanel.titlezdebug_toolbar/panels/sql.htmlc                 C   s.   t dtjddt dtjddt dtjddgS )Nzsql_select/
sql_select)namezsql_explain/sql_explainzsql_profile/sql_profile)r   r
   rH   rJ   rK   )clsr   r   r   get_urls   s    zSQLPanel.get_urlsc                 C   s   t  D ]}t||  qd S N)r   allr   r1   r6   r   r   r   enable_instrumentation   s    zSQLPanel.enable_instrumentationc                 C   s   t  D ]}t| qd S rN   )r   rO   r   rP   r   r   r   disable_instrumentation   s    z SQLPanel.disable_instrumentationc              	      s
  t   t fdd}tdd }tdd }dd }dd }| jrd	}td
t| jd  }	t| j D ]\}
}g d}|
d }d|
d |	  ||< |}|| |	k rtd||  d}||  |7  < |d7 }|dkrd	}|||< q||d< qni }d }d	}| jD ]\}}|| ||  d7  < || ||  d7  < |	d}|	|}||kr|rzd| j|d  d d< |||< |rd|d< |rd|d< ||d< d|v rt
|d |d |d< d|v rt|d |d |d< td t|d|d< |d rt|d dd|d< | j| d |d< z|d | j d  |d!< W n ty`   d	|d!< Y n0 ||d"< |d! |d"  |d#< ||d! 7 }t|d$ |d$< |d7 }||d$  |d%< q|rd| j|d  d d< t  fd&d'| D }fd(d'| D }| jD ]\\}}z<|| || \|d)< |d*< || || \|d+< |d,< W n tyb   Y n0 q
| j D ]`\}}z@td-d. ||  D |d)< td/d. ||  D |d+< W n ty   Y n0 qr| t| j d0d d1d2d3 | jD | jd4 d S )5Nc                      s   t  S rN   nextr   )colorsr   r   <lambda>   r'   z)SQLPanel.generate_stats.<locals>.<lambda>c                   S   s   t tS rN   r   intr   r   r   r   rV      r'   c                   S   s   t tS rN   rW   r   r   r   r   rV      r'   c                 S   s   | d S )Nraw_sqlr   )queryr   r   r   similar_key   s    z,SQLPanel.generate_stats.<locals>.similar_keyc                 S   s,   | d d u rdn
t | d }| d t|fS )N
raw_paramsr   rY   )tupler   )rZ   r\   r   r   r   duplicate_key   s    z.SQLPanel.generate_stats.<locals>.duplicate_keyr   g      p@g      @)r   r   r         r>      Z	rgb_colortrans_idTZ
ends_transZstarts_transZin_transr:   Z	iso_levelr   Ztrans_status)Zauto_idinitialformsql)Zwith_toggler=   d   Zwidth_ratioZstart_offsetZ
end_offsetZ
stacktraceZtrace_colorc                    s(   i | ] \}}| fd d|  D qS )c                    s&   i | ]\}}|d kr||t  fqS ra   rS   )r$   rZ   similar_countquery_colorsr   r   r&      s   6SQLPanel.generate_stats.<locals>.<dictcomp>.<dictcomp>itemsr$   r:   r#   ri   r   r   r&      s   z+SQLPanel.generate_stats.<locals>.<dictcomp>c                    s(   i | ] \}}| fd d|  D qS )c                    s&   i | ]\}}|d kr||t  fqS rg   rS   )r$   rZ   duplicate_countri   r   r   r&      s   rk   rl   rn   ri   r   r   r&      s   rh   Zsimilar_colorro   Zduplicate_colorc                 s   s   | ]}|d  V  qdS r   Nr   r$   er   r   r   	<genexpr>  s   z*SQLPanel.generate_stats.<locals>.<genexpr>c                 s   s   | ]}|d  V  qdS rp   r   rq   r   r   r   rs     s   c                 S   s   | d d  S )Nr>   r?   r   )xr   r   r   rV     r'   )keyc                 S   s   g | ]\}}|qS r   r   )r$   aqr   r   r   
<listcomp>  r'   z+SQLPanel.generate_stats.<locals>.<listcomp>)Z	databasesr#   sql_time)r   r   r-   rX   r"   r.   	enumeratevaluesminr   r   r    r   r   r   r+   ZeroDivisionErrorr   rm   KeyErrorsumZrecord_statssorted)r1   requestresponseZtrace_colorsZquery_similarZquery_duplicatesr[   r^   Zwidth_ratio_tallyfactorndbrgbcolornnncZ	trans_idsrb   ir:   rZ   Zlast_trans_idZquery_similar_colorsZquery_duplicates_colorsZ
alias_infor   )rU   rj   r   generate_stats   s    	









	



zSQLPanel.generate_statsc                 C   s<   |   }dt|dg }|dd}| d|| d S )NzSQL {} queriesr#   ry   r   )Z	get_statsformatr"   r   Zrecord_server_timing)r1   r   r   statsrG   valuer   r   r   generate_server_timing  s    zSQLPanel.generate_server_timing)__name__
__module____qualname____doc__r)   r<   rB   r   Z	nav_titlepropertyrE   rG   templateclassmethodrM   rQ   rR   r   r   __classcell__r   r   r4   r   r!   2   s"   



 r!   ) r7   collectionsr   r   pprintr   Z	django.dbr   Zdjango.urlsr   Zdjango.utils.translationr   r   r   rD   Zdebug_toolbar.panelsr	   Zdebug_toolbar.panels.sqlr
   Zdebug_toolbar.panels.sql.formsr   Z!debug_toolbar.panels.sql.trackingr   r   Zdebug_toolbar.panels.sql.utilsr   r   Zdebug_toolbar.utilsr   r   r    r!   r   r   r   r   <module>   s   