
    f(&                        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__     \/var/www/cs2snipe.com/venv/lib/python3.12/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                   L     e 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         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.   dumpsrC   rD   tuplelist_decodedictitemsdatetimedatetimer   UnicodeDecodeError)r9   paramelementkeyvalueCONVERT_TYPESs         r   rJ   zNormalCursorMixin._decodep   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                   _        S # | j
                  | j                   _        w xY w)z0Get the last executed query from the connection.N)r:   r   opslast_executed_queryr   r"   )r9   sqlparamss      r   _last_executed_queryz&NormalCursorMixin._last_executed_query   sT      $	/77;;224;;VL#';;DGG 4;;DGG s   0A 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                  | 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aliasrY   durationraw_sqlrZ   
raw_params
stacktracetemplate_infounknown)trans_idtrans_status	iso_levelr   )r:   rb   ra   r$   infotransaction_statusr   
contextlibsuppress	TypeErrorjsonrG   rJ   r   r'   strbytesdecode	as_stringr[   r   isolation_levelInternalErrorr   r"   current_transaction_idnew_transaction_idupdaterecord)r9   methodrY   rZ   rb   ra   conninitial_conn_status
start_time	stop_timerc   _paramsrg   r!   rk   final_conn_statusri   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   procnamerZ   r   s      r   r   zNormalCursorMixin.callproc   s    ||EG,h??r   c                 :    | j                  t        |   ||      S r   )r   r7   execute)r9   rY   rZ   r   s      r   r   zNormalCursorMixin.execute   s    ||EGOS&99r   c                 :    | j                  t        |   ||      S r   )r   r7   executemany)r9   rY   
param_listr   s      r   r   zNormalCursorMixin.executemany   s    ||EG/jAAr   r   )r   r   r   r   rJ   r[   r   r   r   r   r;   r<   s   @r   r   r   k   s0    &0/P)d@:B Br   r   )"rn   contextvarsrM   rq   rO   r   django.test.testcasesr*   django.utils.encodingr   debug_toolbar.utilsr   r   psycopgtypesJsonbrF   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 "CB. CBu  %%7= % $%	%s6   AB4 4C:CC	CCCCC