
    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n(# 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 nw xY w ej        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!dS )    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dS )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        5555r   r   c                      t           j        t          j        j        j                  rd S t           d          s9 j         _         j         _	        d  _
         fd} fd}| _        | _        d S d S )N_djdt_cursorc                      j         } j        | i |}||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
connections        r   r   zwrap_cursor.<locals>.cursor3   sr      ,F,Z,d=f==F~)2R%%>REK263CUKKz6  r   c                      j         } j        | i |}|at          |t                    sLt                                          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   s      ,F4Z4dEfEEF!*V=S*T*T!-6]]__V))BVO6v7GOOM:v   Mr   )r'   r   djangotest	testcases_DatabaseFailurehasattrr   r)   r&   r   )r$   r   r)   s   `  r   wrap_cursorr/   #   s     *#V[%:%KLL :~.. "3","3
*4*C
'"&
	 	 	 	 	 
	 
	 
	 
	 
	 #
$2
!!!E"3 "3r   c                 $     G d d||           }|S )Nc                       e Zd ZdS ):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   s6        E<    r   c                        e Zd Z fdZ xZS )r(   c                 Z    t                                          ||           || _        d S 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   s8                r   r(   c                       e Zd ZdZd ZdS )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                 |    t          |t                    rd|                    dd          z  S t          |          S )Nz'%s''z'')r'   strreplacerepr)r9   elements     r   _quote_exprzNormalCursorMixin._quote_exprp   s9    gs## 	!GOOC6666== r   c                      |s|S t          |t                    r  fd|                                D             S t          |t                    rt           fd|D                       S  fd|D             S )Nc                 B    i | ]\  }}|                     |          S r   rH   .0keyvaluer9   s      r   
<dictcomp>z3NormalCursorMixin._quote_params.<locals>.<dictcomp>z   s-    RRRZS%C))%00RRRr   c              3   B   K   | ]}                     |          V  d S r   rK   rM   pr9   s     r   	<genexpr>z2NormalCursorMixin._quote_params.<locals>.<genexpr>|   s1      ==))!,,======r   c                 :    g | ]}                     |          S r   rK   rR   s     r   
<listcomp>z3NormalCursorMixin._quote_params.<locals>.<listcomp>}   s'    444  ##444r   )r'   dictitemstuple)r9   paramss   ` r   _quote_paramszNormalCursorMixin._quote_paramsv   s     	Mfd## 	SRRRR6<<>>RRRRfe$$ 	>====f======4444V4444r   c                 L    t           rit          |t                     rTt          |d          r|                    |j                  S t          |d          r|                    |j                  S t          |t          t          f          r fd|D             S t          |t                    r  fd|	                                D             S t          j
        t          j        t          j        f}	 t          |t          ||                     S # t          $ r Y dS w xY w)Nobjadaptedc                 :    g | ]}                     |          S r   _decode)rM   rG   r9   s     r   rV   z-NormalCursorMixin._decode.<locals>.<listcomp>   s%    ???gDLL))???r   c                 B    i | ]\  }}|                     |          S r   r`   rL   s      r   rP   z-NormalCursorMixin._decode.<locals>.<dictcomp>   s+    MMMeCe,,MMMr   )strings_onlyz(encoded string))PostgresJsonr'   r.   dumpsr]   r^   rY   listrW   rX   datetimedatetimer   UnicodeDecodeError)r9   paramCONVERT_TYPESs   `  r   ra   zNormalCursorMixin._decode   s0    	2Jul;; 	2ue$$ .{{59---ui(( 2{{5=111 eeT]++ 	@???????? eT"" 	NMMMMu{{}}MMMM "*HM8=I	&UZ}5U5U1UVVVV! 	& 	& 	&%%%	&s   5D 
D#"D#c                     d| 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   r[   r"   )r9   sqlrZ   s      r   _last_executed_queryz&NormalCursorMixin._last_executed_query   sj      $	/7;22S$"4"4V"<"<  $(;DG  4;DG ....s   8A A+c                    | j         j        }| j         j        }|dk    r| j         j        }|j        j        }t                      }	  |||          t                      }	|	|z
  dz  }
d}t          j        t                    5  t          j        |                     |                    }d d d            n# 1 swxY w Y   t                      }|dk    rVt          |t                    sAt          |t                     r|                    d          }n%|                    |          }nt          |          }|||                     ||          |
|||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| j                            |          }n| j                            |          }nd }|                    ||j        j        |d	            | j        j        d
i | S # t                      }	|	|z
  dz  }
d}t          j        t                    5  t          j        |                     |                    }d d d            n# 1 swxY w Y   t                      }|dk    rVt          |t                    sAt          |t                     r|                    d          }n%|                    |          }nt          |          }|||                     ||          |
|||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| j                            |          }n| j                            |          }nd }|                    ||j        j        |d	            | j        j        d
i | w xY w)N
postgresqli   zutf-8   )skip)	vendoraliasrp   durationraw_sqlrZ   
raw_params
stacktracetemplate_infounknown)trans_idtrans_status	iso_levelr   )r:   rx   rw   r$   infotransaction_statusr   
contextlibsuppress	TypeErrorjsonre   ra   r   r'   rD   bytesdecode	as_stringrq   r   isolation_levelInternalErrorr   r"   current_transaction_idnew_transaction_idupdaterecord)r9   methodrp   rZ   rx   rw   conninitial_conn_status
start_time	stop_timery   _paramsr}   r!   r   final_conn_statusr   s                    r   _recordzNormalCursorMixin._record   s   \!!7%D"&)">!^^
F	)6#v&&$I!J.$6HG$Y// ; ;*T\\&%9%9::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; .//M %%jc.B.B%c5)) .**W--CC----CC#hh !00f==$!$-1555!.
 
F %%* $ 4II) * * * )III* %)I$@!$(===*.CCC#';#E#Ee#L#L#';#A#A%#H#H#H$,(,	(D%.    DK((((((G %I!J.$6HG$Y// ; ;*T\\&%9%9::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; .//M %%jc.B.B%c5)) .**W--CC----CC#hh !00f==$!$-1555!.
 
F %%* $ 4II) * * * )III* %)I$@!$(===*.CCC#';#E#Ee#L#L#';#A#A%#H#H#H$,(,	(D%.    DK((((((sz   H (B66B:	=B:	/E77FF2O"(I?3O"?JO"JB0O"8M ?O" MO"MBO"Nc                 T    |                      t                      j        ||          S r   )r   r7   callproc)r9   procnamerZ   r   s      r   r   zNormalCursorMixin.callproc   s     ||EGG,h???r   c                 T    |                      t                      j        ||          S r   )r   r7   execute)r9   rp   rZ   r   s      r   r   zNormalCursorMixin.execute   s    ||EGGOS&999r   c                 T    |                      t                      j        ||          S r   )r   r7   executemany)r9   rp   
param_listr   s      r   r   zNormalCursorMixin.executemany   s     ||EGG/jAAAr   r   )r   r   r   r   rH   r[   ra   rq   r   r   r   r   r;   r<   s   @r   r   r   k   s         ! ! !5 5 5& & &0/ / /P) P) P)d@ @ @ @ @ @: : : : : :B B B B B B B B Br   r   )"r   contextvarsrg   r   ri   r   django.test.testcasesr*   django.utils.encodingr   debug_toolbar.utilsr   r   psycopgtypesJsonbrd   pqTransactionStatusINTRANSr   ImportErrorpsycopg2._jsonr   psycopg2.extensions
ContextVarr   	Exceptionr   r/   r   r(   r   r   r   r   r   <module>r      s                       + + + + + + B B B B B B B B%NNN=%+L#J8@ % % %%777777======= % % % $%	% #K"#<dKKK	6 6 6 6 6	 6 6 6-3 -3 -3`         " " " " "1 " " "TB TB TB TB TB. TB TB TB TB TBs5   &A A6A$#A6$	A0-A6/A00A65A6