
    7 fr(                        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 	 d dlZej                  j                  j                  Zej"                  j$                  j&                  Z ej2                  dd	      Z G d
 de      Zd Zd Z G d d      Z G d de      Z  G d de      Z!y# e$ r  	 d dlmZ d dlmZ n# e$ r dZdZY nw xY wY jw xY w)    N)perf_counter)	force_str)get_stack_traceget_template_info)Json)STATUS_IN_TRANSACTIONzdebug-toolbar-allow-sqlT)defaultc                       e Zd ZdZy)SQLQueryTriggeredz+Thrown when template panel triggers a queryN)__name__
__module____qualname____doc__     W/var/www/equiseq/venv/lib/python3.11/site-packages/debug_toolbar/panels/sql/tracking.pyr   r      s    5r   r   c                     t         j                  t        j                  j                  j
                        ry t         d      sB j                   _         j                   _	        d  _
         fd} fd}| _        | _        y y )N_djdt_cursorc                      j                   } j                  | i |}||S t        j                         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
connections        r   r   zwrap_cursor.<locals>.cursor3   sj      ,,F,Z,,d=f=F~)2%>REK263C3CUKz6 r   c                      j                   } j                  | i |}|Xt        |t              sHt        j                         rt        nt        } t        |j                  |      |j                  |      S |S r   )r   _djdt_chunked_cursor
isinstanceDjDTCursorWrapperMixinr   r   r   r   r   r   r   r   s        r   chunked_cursorz#wrap_cursor.<locals>.chunked_cursorC   sw      ,,F4Z44dEfEF!*V=S*T-6]]_)BVO6v7G7GOMM:v  Mr   )r'   r   djangotest	testcases_DatabaseFailurehasattrr   r)   r&   r   )r$   r   r)   s   `  r   wrap_cursorr/   #   sx     *##V[[%:%:%K%KL:~.","3"3
*4*C*C
'"&
	 
	 #
$2
!E /r   c                      G d d||       }|S )Nc                       e Zd Zy):patch_cursor_wrapper_with_mixin.<locals>.DjDTCursorWrapperN)r   r   r   r   r   r   DjDTCursorWrapperr2   T   s    r   r3   r   )base_wrapperr#   r3   s      r   r   r   S   s    E<  r   c                        e Zd Z fdZ xZS )r(   c                 4    t         |   ||       || _        y r   )super__init__r"   )selfr   dbr"   r   s       r   r8   zDjDTCursorWrapperMixin.__init__[   s    $r   )r   r   r   r8   __classcell__r   s   @r   r(   r(   Z   s     r   r(   c                       e Zd ZdZd Zy)r   z_
    Wraps a cursor and raises an exception on any operation.
    Used in Templates panel.
    c                     t               r   )r   )r9   attrs     r   __getattr__z ExceptionCursorMixin.__getattr__g   s    !!r   N)r   r   r   r   r@   r   r   r   r   r   a   s    
"r   r   c                   X     e Zd ZdZd Zd Zd Zd Zd Zd
 fd	Z	d
 fd	Z
 fd	Z xZS )r   z*
    Wraps a cursor and logs queries.
    c                 b    t        |t              rd|j                  dd      z  S t        |      S )Nz'%s''z'')r'   strreplacerepr)r9   elements     r   _quote_exprzNormalCursorMixin._quote_exprp   s,    gs#GOOC666= r   c                 .    |s|S t        |t              r3|j                         D ci c]  \  }}| j                  |       c}}S t        |t              rt	         fd|D              S |D cg c]  } j                  |       c}S c c}}w c c}w )Nc              3   @   K   | ]  }j                  |        y wr   )rH   ).0pr9   s     r   	<genexpr>z2NormalCursorMixin._quote_params.<locals>.<genexpr>|   s     =))!,=s   )r'   dictitemsrH   tuple)r9   paramskeyvaluerL   s   `    r   _quote_paramszNormalCursorMixin._quote_paramsv   s    Mfd#CI<<>RZS%C))%00RRfe$=f===-34  #44 S 5s   B1Bc                 ~   t         r^t        |t               rNt        |d      r|j                  |j                        S t        |d      r|j                  |j
                        S t        |t        t        f      r|D cg c]  }| j                  |       c}S t        |t              r3|j                         D ci c]  \  }}|| j                  |       c}}S t        j                  t        j                  t        j                  f}	 t        |t        ||             S c c}w c c}}w # t        $ r Y yw xY w)Nobjadapted)strings_onlyz(encoded string))PostgresJsonr'   r.   dumpsrV   rW   rP   list_decoderN   rO   datetimedatetimer   UnicodeDecodeError)r9   paramrG   rR   rS   CONVERT_TYPESs         r   r\   zNormalCursorMixin._decode   s    Jul;ue${{599--ui({{5==11 eeT]+9>?gDLL)?? eT"?D{{}MeCe,,MM "**HMM8==I	&UZ}5U1UVV @ N " 	&%	&s   ?D%=D*D0 0	D<;D<c                    d| j                   _        	 | j                   j                  j                  | j                  || j                  |            | j                  | j                   _        S # | j                  | j                   _        w xY w)z0Get the last executed query from the connection.N)r:   r   opslast_executed_queryr   rT   r"   )r9   sqlrQ   s      r   _last_executed_queryz&NormalCursorMixin._last_executed_query   sd      $	/77;;22S$"4"4V"< $(;;DGG 4;;DGG s   ?A. .Bc                    | j                   j                  }| j                   j                  }|dk(  r,| j                   j                  }|j                  j
                  }t               }	  |||      t               }	|	|z
  dz  }
d}t        j                  t              5  t        j                  | j                  |            }d d d        t               }|dk(  rDt        |t              s4t        |t               r|j#                  d      }n|j%                        }nt        |      }||| j'                  ||      |
|||t)        d      |d	}|dk(  r	 j*                  }|j                  j
                  }|t.        k(  rAt.        k(  r| j0                  j3                  |      }n| j0                  j5                  |      }nd }|j7                  ||j                  j
                  |d	        | j0                  j8                  d
i | S # 1 sw Y   HxY w# j,                  $ r d}Y w xY w# t               }	|	|z
  dz  }
d}t        j                  t              5  t        j                  | j                  |            }d d d        n# 1 sw Y   nxY wt               }|dk(  rDt        |t              s4t        |t               r|j#                  d      }n|j%                        }nt        |      }||| j'                  ||      |
|||t)        d      |d	}|dk(  r	 j*                  }n# j,                  $ r d}Y nw xY w|j                  j
                  }|t.        k(  rAt.        k(  r| j0                  j3                  |      }n| j0                  j5                  |      }nd }|j7                  ||j                  j
                  |d	        | j0                  j8                  d
i | w xY w)N
postgresqli   zutf-8   )skip)	vendoraliasrf   durationraw_sqlrQ   
raw_params
stacktracetemplate_infounknown)trans_idtrans_status	iso_levelr   )r:   rn   rm   r$   infotransaction_statusr   
contextlibsuppress	TypeErrorjsonrZ   r\   r   r'   rD   bytesdecode	as_stringrg   r   isolation_levelInternalErrorr   r"   current_transaction_idnew_transaction_idupdaterecord)r9   methodrf   rQ   rn   rm   conninitial_conn_status
start_time	stop_timero   _paramsrs   r!   rw   final_conn_statusru   s                    r   _recordzNormalCursorMixin._record   s   \!77%%D"&))">">!^
F	)#v&$I!J.$6HG$$Y/ ;**T\\&%9:; ./M %jc.Bc5)**W-C---C#h !00f=$!$-15!.
F %* $ 4 4I %)II$@$@!$(==*.CC#';;#E#Ee#L#';;#A#A%#H#H$,(,		(D(D%. DKK((A; ;B )) * )I*I %I!J.$6HG$$Y/ ;**T\\&%9:; ; ; ./M %jc.Bc5)**W-C---C#h !00f=$!$-15!.
F %* $ 4 4I)) * )I* %)II$@$@!$(==*.CC#';;#E#Ee#L#';;#A#A%#H#H$,(,		(D(D%. DKK((sh   )H- %H	H	H	H*)H*-.O+%J	 	O+	JBO+L,+O+,M =O+?M  B+O+c                 :    | j                  t        |   ||      S r   )r   r7   callproc)r9   procnamerQ   r   s      r   r   zNormalCursorMixin.callproc   s    ||EG,h??r   c                 :    | j                  t        |   ||      S r   )r   r7   execute)r9   rf   rQ   r   s      r   r   zNormalCursorMixin.execute   s    ||EGOS&99r   c                 :    | j                  t        |   ||      S r   )r   r7   executemany)r9   rf   
param_listr   s      r   r   zNormalCursorMixin.executemany   s    ||EG/jAAr   r   )r   r   r   r   rH   rT   r\   rg   r   r   r   r   r;   r<   s   @r   r   r   k   s:    !5&0/P)d@:B Br   r   )"rz   contextvarsr]   r}   r_   r   django.test.testcasesr*   django.utils.encodingr   debug_toolbar.utilsr   r   psycopgtypesJsonbrY   pqTransactionStatusINTRANSr   ImportErrorpsycopg2._jsonr   psycopg2.extensions
ContextVarr   	Exceptionr   r/   r   r(   r   r   r   r   r   <module>r      s          + B%==%%++L#JJ88@@ #K""#<dK	6	 6-3` "1 "TB. TBu  %%7= % $%	%s6   AB4 4C:CC	CCCCC