a
    Ig(&                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZmZ z d dlZejjjZejjjZW nJ ey   zd dlmZ d dlmZ W n ey   dZdZY n0 Y n0 ejddd	ZG d
d deZdd Zdd ZG dd dZG dd deZ G dd deZ!dS )    N)perf_counter)	force_str)get_stack_traceget_template_info)Json)STATUS_IN_TRANSACTIONzdebug-toolbar-allow-sqlT)defaultc                   @   s   e Zd ZdZdS )SQLQueryTriggeredz+Thrown when template panel triggers a queryN)__name__
__module____qualname____doc__ r   r   ]/var/www/html/django/DPS/env/lib/python3.9/site-packages/debug_toolbar/panels/sql/tracking.pyr	      s   r	   c                    s^   t  jtjjjrd S t dsZ j _ j _	d  _
 fdd} fdd}| _| _d S )N_djdt_cursorc                     sH    j } j| i |}|d u r"|S t r.tnt}t|j||j |S N)	_djdt_loggerr   	allow_sqlgetNormalCursorMixinExceptionCursorMixinpatch_cursor_wrapper_with_mixin	__class__cursorargskwargsloggerr   mixin
connectionr   r   r   3   s    
zwrap_cursor.<locals>.cursorc                     sR    j } j| i |}|d urNt|tsNt r4tnt}t|j	||j
 |S |S r   )r   _djdt_chunked_cursor
isinstanceDjDTCursorWrapperMixinr   r   r   r   r   r   r   r   r   r   r   chunked_cursorC   s    
z#wrap_cursor.<locals>.chunked_cursor)r"   r   djangotestZ	testcasesZ_DatabaseFailurehasattrr   r$   r!   r   )r    r   r$   r   r   r   wrap_cursor#   s    	
r(   c                 C   s   G dd d|| }|S )Nc                   @   s   e Zd ZdS )z:patch_cursor_wrapper_with_mixin.<locals>.DjDTCursorWrapperN)r
   r   r   r   r   r   r   DjDTCursorWrapperT   s   r)   r   )Zbase_wrapperr   r)   r   r   r   r   S   s    r   c                       s   e Zd Z fddZ  ZS )r#   c                    s   t  || || _d S r   )super__init__r   )selfr   dbr   r   r   r   r+   [   s    zDjDTCursorWrapperMixin.__init__)r
   r   r   r+   __classcell__r   r   r.   r   r#   Z   s   r#   c                   @   s   e Zd ZdZdd ZdS )r   z_
    Wraps a cursor and raises an exception on any operation.
    Used in Templates panel.
    c                 C   s
   t  d S r   )r	   )r,   attrr   r   r   __getattr__g   s    z ExceptionCursorMixin.__getattr__N)r
   r   r   r   r1   r   r   r   r   r   a   s   r   c                       sT   e Zd ZdZdd Zdd Zdd Zd fd	d
	Zd fdd	Z fddZ	  Z
S )r   z*
    Wraps a cursor and logs queries.
    c                    s   t r:t|t r:t|dr$||jS t|dr:||jS t|ttfrZ fdd|D S t|trz fdd|	 D S t
j
t
jt
jf}zt|t|| dW S  ty   Y dS 0 d S )	Nobjadaptedc                    s   g | ]}  |qS r   _decode).0elementr,   r   r   
<listcomp>{       z-NormalCursorMixin._decode.<locals>.<listcomp>c                    s   i | ]\}}|  |qS r   r4   )r6   keyvaluer8   r   r   
<dictcomp>   r:   z-NormalCursorMixin._decode.<locals>.<dictcomp>)Zstrings_onlyz(encoded string))PostgresJsonr"   r'   dumpsr2   r3   tuplelistdictitemsdatetimedatetimer   UnicodeDecodeError)r,   paramZCONVERT_TYPESr   r8   r   r5   p   s    


zNormalCursorMixin._decodec                 C   s:   d| j _z | j j| j||W | j| j _S | j| j _0 dS )z0Get the last executed query from the connection.N)r-   r   opsZlast_executed_queryr   r   r,   sqlparamsr   r   r   _last_executed_query   s    
z&NormalCursorMixin._last_executed_queryc                 C   s  | j j}| j j}|dkr(| j j}|jj}t }zp|||W t }	|	| d }
d}tt	  t
| |}W d    n1 s0    Y  t }|dkrt|tst|tr|d}q||}nt|}||| |||
|||tdd|d	}|dkrvz
|j}W n |jy"   d}Y n0 |jj}|tkr\|tkrN| j|}n| j|}nd }|||jj|d	 | jjf i | S 1 s0    Y  t }|dkrt|tst|tr|d}n
||}nt|}||| |||
|||tdd|d	}|dkrz
|j}W n |jy8   d}Y n0 |jj}|tkrr|tkrd| j|}n| j|}nd }|||jj|d	 | jjf i | nVt }	|	| d }
d}tt	  t
| |}W d    n1 s0    Y  t }|dkr4t|ts4t|tr(|d}n
||}nt|}||| |||
|||tdd|d	}|dkrz
|j}W n |jy   d}Y n0 |jj}|tkr|tkr| j|}n| j|}nd }|||jj|d	 | jjf i | 0 d S )
N
postgresqli   zutf-8   )skip)	vendoraliasrK   durationZraw_sqlrL   Z
raw_paramsZ
stacktracetemplate_infounknown)trans_idZtrans_status	iso_level)r-   rS   rR   r    infoZtransaction_statusr   
contextlibsuppress	TypeErrorjsonr?   r5   r   r"   strbytesdecode	as_stringrM   r   Zisolation_levelZInternalErrorr   r   Zcurrent_transaction_idZnew_transaction_idupdaterecord)r,   methodrK   rL   rS   rR   connZinitial_conn_status
start_time	stop_timerT   _paramsrU   r   rX   Zfinal_conn_statusrW   r   r   r   _record   s    
.






	    





	0





	zNormalCursorMixin._recordNc                    s   |  t j||S r   )ri   r*   callproc)r,   ZprocnamerL   r.   r   r   rj      s    zNormalCursorMixin.callprocc                    s   |  t j||S r   )ri   r*   executerJ   r.   r   r   rk      s    zNormalCursorMixin.executec                    s   |  t j||S r   )ri   r*   executemany)r,   rK   Z
param_listr.   r   r   rl      s    zNormalCursorMixin.executemany)N)N)r
   r   r   r   r5   rM   ri   rj   rk   rl   r/   r   r   r.   r   r   k   s   Rr   )"rZ   contextvarsrD   r]   rF   r   Zdjango.test.testcasesr%   Zdjango.utils.encodingr   Zdebug_toolbar.utilsr   r   ZpsycopgtypesZJsonbr>   ZpqZTransactionStatusZINTRANSr   ImportErrorZpsycopg2._jsonr   Zpsycopg2.extensions
ContextVarr   	Exceptionr	   r(   r   r#   r   r   r   r   r   r   <module>   s2   
0
