
    h"                       U d Z ddlmZ 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
 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r	dZerdndZndZdZ edd      Zedeed   f   Z ej.                  d      Zej2                  ej4                  k(  rej7                  ej8                         d"dZ e       Zde d<   d#dZ!d$dZ"eejF                  df   Z$ G d d      Z% G d d      Z&	 d%	 	 	 	 	 d&dZ' G d  d!      Z(y)'a  Logging control and utilities.

Control of logging for SA can be performed from the regular python logging
module.  The regular dotted module namespace is used, starting at
'sqlalchemy'.  For class-level logging, the class name is appended.

The "echo" keyword parameter, available on SQLA :class:`_engine.Engine`
and :class:`_pool.Pool` objects, corresponds to a logger specific to that
instance only.

    )annotationsN)Any)Optional)overload)Set)Type)TypeVar)Union   )py311)py38)LiteralT   F_IT
Identified)bounddebug
sqlalchemyc                    t        j                  t        j                        }|j	                  t        j
                  d             | j                  |       y )Nz.%(asctime)s %(levelname)s %(name)s %(message)s)loggingStreamHandlersysstdoutsetFormatter	Formatter
addHandler)loggerhandlers     7D:\EasyAligner\venv\Lib\site-packages\sqlalchemy/log.py_add_default_handlerr    :   sC    ##CJJ/GJK g    zSet[Type[Identified]]_logged_classesc                X    t        | dd       xs | j                  dz   | j                  z   S )N_sqla_logger_namespace.)getattr
__module____name__)clss    r   _qual_logger_name_for_clsr*   E   s.    -t4 	/>>C#,,.r!   c                    t        j                  t        |             fd| _        fd| _        | _        t        j                  |        | S )Nc                B    j                  t        j                        S N)isEnabledForr   DEBUGselfr   s    r   <lambda>zclass_logger.<locals>.<lambda>N   s    )<)<*r!   c                B    j                  t        j                        S r-   )r.   r   INFOr0   s    r   r2   zclass_logger.<locals>.<lambda>Q   s    (;(;)r!   )r   	getLoggerr*   _should_log_debug_should_log_infor   r"   add)r)   r   s    @r   class_loggerr9   L   sI    8=>FCC CJJr!   InstanceLoggerc                  D    e Zd ZU dZdZded<   ded<   ded<   dd	Zdd
Zy)r    NzOptional[str]logging_name_IdentifiedLoggerTyper   _EchoFlagType_echoc                T    | j                   j                  t        j                        S r-   )r   r.   r   r/   r1   s    r   r6   zIdentified._should_log_debuge   s    {{''66r!   c                T    | j                   j                  t        j                        S r-   )r   r.   r   r4   rB   s    r   r7   zIdentified._should_log_infoh   s    {{''55r!   )returnbool)r(   r'   __qualname__	__slots__r=   __annotations__r6   r7   r<   r!   r   r   r   \   s'    I"&L-&!!76r!   c                      e Zd ZU dZej
                  ej
                  ej                  ej                  dZde	d<   dZ
ddZddZddZdd	ZeZdd
ZddZddZddZddZddZy)r:   a  A logger adapter (wrapper) for :class:`.Identified` subclasses.

    This allows multiple instances (e.g. Engine or Pool instances)
    to share a logger, but have its verbosity controlled on a
    per-instance basis.

    The basic functionality is to return a logging level
    which is based on an instance's echo setting.

    Default implementation is:

    'debug' -> logging.DEBUG
    True    -> logging.INFO
    False   -> Effective level of underlying logger (
    logging.WARNING by default)
    None    -> same as False
    )NFTr   r?   r@   )echor   c                    || _         t        j                  |      | _        | j                  |   t        j
                  k  r-| j                  j                  st        | j                         y y y r-   )rJ   r   r5   r   	_echo_mapr4   handlersr    )r1   rJ   names      r   __init__zInstanceLogger.__init__   sS    	''- >>$7<</8L8L - 9M/r!   c                N     | j                   t        j                  |g|i | y)z/Delegate a debug call to the underlying logger.N)logr   r/   r1   msgargskwargss       r   r   zInstanceLogger.debug   s"     	5d5f5r!   c                N     | j                   t        j                  |g|i | y)z/Delegate an info call to the underlying logger.N)rQ   r   r4   rR   s       r   infozInstanceLogger.info   s"     	s4T4V4r!   c                N     | j                   t        j                  |g|i | y)z1Delegate a warning call to the underlying logger.N)rQ   r   WARNINGrR   s       r   warningzInstanceLogger.warning   s"     	#777r!   c                N     | j                   t        j                  |g|i | y)zB
        Delegate an error call to the underlying logger.
        NrQ   r   ERRORrR   s       r   errorzInstanceLogger.error   s"     	5d5f5r!   c                X    d|d<    | j                   t        j                  |g|i | y)z4Delegate an exception call to the underlying logger.r   exc_infoNr\   rR   s       r   	exceptionzInstanceLogger.exception   s,     z5d5f5r!   c                N     | j                   t        j                  |g|i | y)z2Delegate a critical call to the underlying logger.N)rQ   r   CRITICALrR   s       r   criticalzInstanceLogger.critical   s$     	!!3888r!   c                f   | j                   j                  j                  |k\  ry| j                  | j                     }|t
        j                  k(  r| j                   j                         }||k\  rBt        r|j                  dd      t        z   |d<    | j                   j                  |||fi | yy)zDelegate a log call to the underlying logger.

        The level here is determined by the echo
        flag as well as that of the underlying logger, and
        logger._log() is called directly.

        N
stacklevelr   )r   managerdisablerL   rJ   r   NOTSETgetEffectiveLevel
STACKLEVELgetSTACKLEVEL_OFFSET_log)r1   levelrS   rT   rU   selected_levels         r   rQ   zInstanceLogger.log   s     ;;&&%/		2W^^+![[::<NN"JJ|Q/2CC |$ DKKUC88 #r!   c                p    | j                   j                  j                  |k\  ry|| j                         k\  S )z)Is this logger enabled for level 'level'?F)r   rg   rh   rj   r1   ro   s     r   r.   zInstanceLogger.isEnabledFor   s3     ;;&&%/..000r!   c                    | j                   | j                     }|t        j                  k(  r| j                  j                         }|S )z+What's the effective level for this logger?)rL   rJ   r   ri   r   rj   rr   s     r   rj   z InstanceLogger.getEffectiveLevel   s9     tyy)GNN"KK113Er!   N)rJ   r?   rN   str)rS   rt   rT   r   rU   r   rD   None)
ro   intrS   rt   rT   r   rU   r   rD   ru   )ro   rv   rD   rE   )rD   rv   )r(   r'   rF   __doc__r   ri   r4   r/   rL   rH   rG   rO   r   rW   rZ   warnr^   ra   rd   rQ   r.   rj   r<   r!   r   r:   r:   l   sr    ( nn~~ll	I "I.6
5
8
 D669
961r!   c                   | j                   r%t        | j                        d| j                   }nt        | j                        }|| _        |dv rt	        j
                  |      }|| _        yt        ||      }|| _        y)zEcreate a logger for an instance that implements :class:`.Identified`.r%   )FNN)r=   r*   	__class__r@   r   r5   r:   r   )instanceechoflagrN   r   s       r   instance_loggerr}      s~    
 %h&8&89!!

 )););<HN =  ""4( HO  $/HOr!   c                  h    e Zd ZdZe	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Z	 	 	 	 	 	 d	dZd
dZy)echo_propertya}      When ``True``, enable log output for this element.

    This has the effect of setting the Python logging level for the namespace
    of this element's class and object reference.  A value of boolean ``True``
    indicates that the loglevel ``logging.INFO`` will be set for the logger,
    whereas the string value ``debug`` will set the loglevel to
    ``logging.DEBUG``.
    c                     y r-   r<   r1   r{   owners      r   __get__zecho_property.__get__       r!   c                     y r-   r<   r   s      r   r   zecho_property.__get__  r   r!   c                "    || S |j                   S r-   )r@   r   s      r   r   zecho_property.__get__  s     K>>!r!   c                    t        ||       y )N)r|   )r}   )r1   r{   values      r   __set__zecho_property.__set__  s    51r!   N)r{   zLiteral[None]r   Type[Identified]rD   r   )r{   r   r   r   rD   r?   )r{   zOptional[Identified]r   r   rD   z#Union[echo_property, _EchoFlagType])r{   r   r   r?   rD   ru   )r(   r'   rF   rw   r   r   r   r<   r!   r   r   r     s    G %.>	  "+;	 ","5E"	,"2r!   r   )r   zlogging.LoggerrD   ru   )r)   r   rD   rt   )r)   	Type[_IT]rD   r   r-   )r{   r   r|   r?   rD   ru   ))rw   
__future__r   r   r   typingr   r   r   r   r   r	   r
   utilr   r   util.typingr   rk   rm   r   rE   r?   r5   
rootloggerro   ri   setLevelWARNr    setr"   rH   r*   r9   Loggerr>   r   r:   r}   r   r<   r!   r   <module>r      s&  
 #  
            J #Je<(dD''"223
 W|,
w~~%% *-& .
 gnn.>>? 6 6 u ur 59$1	<2 2r!   