o
    ѷ6i&                     @  s   d dl m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 d dlmZ G d	d
 d
ZG dd deZG dd deZeeZeeZdS )    )annotationsN)Iterable)connections)CursorWrapper)DEFAULT_DB_ALIAS)SimpleLazyObject)TimeoutErrorc                   @  sT   e Zd ZdZdZdddd	ZdddZd ddZd!ddZdd"ddZ	d#ddZ
dS )$
BaseStatusz+
    Base class for the status classes
     Nusing
str | NonereturnNonec                 C  s   |d u r	t | _d S || _d S N)r   db)selfr    r   X/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/django_mysql/status.py__init__   s   

zBaseStatus.__init__r   c                 C  s   t | j  S r   )r   r   cursorr   r   r   r   
get_cursor   s   zBaseStatus.get_cursornamestrint | float | bool | strc                 C  sx   d|v rt d|  &}|| jd |f}|dkr"td|| | d W  d    S 1 s5w   Y  d S )N%z6get() is for fetching single variables, no % wildcards LIKE %sr   zNo such status variable    )
ValueErrorr   executequeryKeyError_castfetchone)r   r   r   num_rowsr   r   r   get   s   
$zBaseStatus.getnamesIterable[str]#dict[str, int | float | bool | str]c              	     s   |si S t dd |D rtd  +}d jdddd |D dg}|||  fd	d
| D W  d    S 1 sCw   Y  d S )Nc                 s  s    | ]}d |v V  qdS )r   Nr   .0r   r   r   r   	<genexpr>-   s    z&BaseStatus.get_many.<locals>.<genexpr>z:get_many() is for fetching named variables, no % wildcards zWHERE Variable_name IN (z, c                 s  s    | ]}d V  qdS )z%sNr   )r*   nr   r   r   r+   7   s    )c                      i | ]
\}}|  |qS r   r"   r*   r   valuer   r   r   
<dictcomp>>       z'BaseStatus.get_many.<locals>.<dictcomp>)anyr   r   joinr    r   fetchall)r   r&   r   r    r   r   r   get_many)   s"   
	$zBaseStatus.get_manyprefixc                   st      ,}|d u r| j n| jd |d f | } fdd|D W  d    S 1 s3w   Y  d S )Nr   r   c                   r/   r   r0   r1   r   r   r   r3   G   r4   z&BaseStatus.as_dict.<locals>.<dictcomp>)r   r   r    r7   )r   r9   r   rowsr   r   r   as_dict@   s   
$zBaseStatus.as_dictr2   c                 C  s\   zt |W S  ty   zt|W  Y S  ty   Y nw Y nw |dkr&dS |dkr,dS |S )NONTOFFF)intr   float)r   r2   r   r   r   r"   I   s   
zBaseStatus._castr   )r   r   r   r   )r   r   )r   r   r   r   )r&   r'   r   r(   )r9   r   r   r(   )r2   r   r   r   )__name__
__module____qualname____doc__r    r   r   r%   r8   r;   r"   r   r   r   r   r	      s    


	r	   c                   @  s"   e Zd ZdZ			ddddZdS )GlobalStatuszSHOW GLOBAL STATUSN      N@皙?
thresholdsdict[str, int | float] | Nonetimeoutr?   sleepr   r   c           
        s    d u rddi t   }  }	 | |}g }| D ]\}}	t|	ttfs)J |	 | kr4|| q|s9d S |rSt   || krStdd	 fdd|D  t 
| q)NThreads_running
   Tz(Span too long waiting for load to drop: ,c                 3  s"    | ]}| d  |  V  qdS )z > Nr   r)   rG   r   r   r+   y   s     z3GlobalStatus.wait_until_load_low.<locals>.<genexpr>)timekeysr8   items
isinstancer>   r?   appendr   r6   rJ   )
r   rG   rI   rJ   startr&   currenthigherr   r2   r   rN   r   wait_until_load_low_   s,   


z GlobalStatus.wait_until_load_low)NrE   rF   )rG   rH   rI   r?   rJ   r?   r   r   )r@   rA   rB   r    rW   r   r   r   r   rD   \   s    rD   c                   @  s   e Zd ZdZdS )SessionStatuszSHOW SESSION STATUSN)r@   rA   rB   r    r   r   r   r   rX   ~   s    rX   )
__future__r   rO   typingr   	django.dbr   django.db.backends.utilsr   django.db.utilsr   django.utils.functionalr   django_mysql.exceptionsr   r	   rD   rX   global_statussession_statusr   r   r   r   <module>   s    N"