o
    PDi'                     @   sz   d dl Z 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 e dZdd	 Zd
d Zdd Zdd ZdS )    N)EmptyResultSet)timezone	force_str)DataCollector)SilkyConfigzsilk.sqlc                 C   s,   t  jsdS t jD ]	}|| v r dS q
dS )NFT)r   requestr   SILKY_IGNORE_QUERIES)	sql_query
ignore_str r   A/var/www/Datamplify/venv/lib/python3.10/site-packages/silk/sql.py_should_wrap   s   r   c                 c   s8    | D ]}t |tsddd |D V  q|V  qd S )N c                 s       | ]}t |V  qd S N)str).0cr   r   r   	<genexpr>       z&_unpack_explanation.<locals>.<genexpr>)
isinstancer   join)resultrowr   r   r   _unpack_explanation   s   
r   c           	   
   C   s  | j jrt jrCz| jjdddit jpi }W n. tyB } zt|}|	dr6t
d| | j }n|W Y d }~n
d }~ww | j }| 	| rT|}n| d| }|  }||| t| }d|W  d    S 1 s{w   Y  d S )NanalyzeTzUnknown options:zqDatabase does not support analyzing queries with provided params. %s.SILKY_ANALYZE_QUERIES option will be ignoredr   
r   )features#supports_explaining_query_executionr   SILKY_ANALYZE_QUERIESopsexplain_query_prefixSILKY_EXPLAIN_FLAGS
ValueErrorr   
startswithLoggerwarninguppercursorexecuter   fetchallr   )	
connectionqparamsprefixerror	error_strprefixed_querycurr   r   r   r   _explain_query    s<   





 r4   c           
      O   s  z|   \}}|stW n* ty6   z|d }W n ty(   |dd}Y nw |dkr3tg  Y S Y dS w z|tdd |D  }W n tyU   | j|i | Y S w t|rd	t
t }|t |d}z9| j|i |W t |d	< t j}	|	r|	|d
< t| jjdddkrt| j|||d< t | S t | S t |d	< t j}	|	r|	|d
< t| jjdddkrt| j|||d< t | w t | w | j|i |S )z?wrapper around real execute_sql in order to extract informationr   result_typemultiNc                 s   r   r   r   )r   paramr   r   r   r   U   r   zexecute_sql.<locals>.<genexpr> )query
start_time	tracebackend_timer   
__module__zsilk.modelsanalysis)as_sqlr   
IndexErrorgetitertupleUnicodeDecodeError_execute_sqlr   r   reversedr;   format_stackr   nowr   r   getattrr9   modelr4   r,   register_queryregister_silk_query)
selfargskwargsr-   r.   r5   r
   tb
query_dictr   r   r   r   execute_sqlD   sZ   	rR   )loggingr;   django.core.exceptionsr   django.utilsr   django.utils.encodingr   silk.collectorr   silk.configr   	getLoggerr&   r   r   r4   rR   r   r   r   r   <module>   s    

$