o
    E6d"                     @  sn  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rXdZerUdndZndZdZedddZedeed f ZedZejejkr|eej d1ddZe Zde d< d2d"d#Z!d3d%d&Z"eej#d'f Z$G d(d dZ%G d)d' d'Z&	d4d5d-d.Z'G d/d0 d0Z(dS )6a  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debugZ
sqlalchemyloggerlogging.LoggerreturnNonec                 C  s*   t tj}|t d | | d S )Nz.%(asctime)s %(levelname)s %(name)s %(message)s)loggingStreamHandlersysstdoutsetFormatter	Formatter
addHandler)r   handler r   eC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\sqlalchemy/log.py_add_default_handler:   s
   r!   zSet[Type[Identified]]_logged_classesclsType[Identified]strc                 C  s   t | dd p| jd | j S )NZ_sqla_logger_namespace.)getattr
__module____name__r#   r   r   r    _qual_logger_name_for_clsE   s   r+   	Type[_IT]c                   s>   t t|   fdd| _ fdd| _ | _t|  | S )Nc                        tjS N)isEnabledForr   DEBUGselfr   r   r    <lambda>N       zclass_logger.<locals>.<lambda>c                   r-   r.   )r/   r   INFOr1   r3   r   r    r4   Q   r5   )r   	getLoggerr+   _should_log_debug_should_log_infor   r"   addr*   r   r3   r    class_loggerL   s   
r;   InstanceLoggerc                   @  sB   e Zd ZU dZdZded< ded< ded< dddZdddZdS )r   r   NzOptional[str]logging_name_IdentifiedLoggerTyper   _EchoFlagType_echor   boolc                 C     | j tjS r.   )r   r/   r   r0   r1   r   r   r    r8   e      zIdentified._should_log_debugc                 C  rB   r.   )r   r/   r   r6   r1   r   r   r    r9   h   rC   zIdentified._should_log_info)r   rA   )r)   r(   __qualname__	__slots__r=   __annotations__r8   r9   r   r   r   r    r   \   s   
 
c                   @  s   e Zd ZU dZejejejejdZde	d< dZ
d'd	d
Zd(ddZd(ddZd(ddZeZd(ddZd(ddZd(ddZd)dd Zd*d"d#Zd+d$d%Zd&S ),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   rG   namer%   c                 C  s@   || _ t|| _| j| tjkr| jjst| j d S d S d S r.   )rG   r   r7   r   	_echo_mapr6   handlersr!   )r2   rG   rH   r   r   r    __init__   s
   zInstanceLogger.__init__msgargsr   kwargsr   r   c                 O      | j tj|g|R i | dS )z/Delegate a debug call to the underlying logger.N)logr   r0   r2   rL   rM   rN   r   r   r    r          zInstanceLogger.debugc                 O  rO   )z/Delegate an info call to the underlying logger.N)rP   r   r6   rQ   r   r   r    info   rR   zInstanceLogger.infoc                 O  rO   )z1Delegate a warning call to the underlying logger.N)rP   r   WARNINGrQ   r   r   r    warning   rR   zInstanceLogger.warningc                 O  rO   )zB
        Delegate an error call to the underlying logger.
        NrP   r   ERRORrQ   r   r   r    error   s    zInstanceLogger.errorc                 O  s(   d|d< | j tj|g|R i | dS )z4Delegate an exception call to the underlying logger.r
   exc_infoNrV   rQ   r   r   r    	exception   s    zInstanceLogger.exceptionc                 O  rO   )z2Delegate a critical call to the underlying logger.N)rP   r   CRITICALrQ   r   r   r    critical   rR   zInstanceLogger.criticallevelintc                 O  sr   | j jj|kr	dS | j| j }|tjkr| j  }||kr7tr)|	ddt
 |d< | j j|||fi | dS dS )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disablerI   rG   r   NOTSETgetEffectiveLevel
STACKLEVELgetSTACKLEVEL_OFFSET_log)r2   r]   rL   rM   rN   Zselected_levelr   r   r    rP      s   

zInstanceLogger.logrA   c                 C  s   | j jj|kr	dS ||  kS )z)Is this logger enabled for level 'level'?F)r   r`   ra   rc   r2   r]   r   r   r    r/      s   zInstanceLogger.isEnabledForc                 C  s$   | j | j }|tjkr| j }|S )z+What's the effective level for this logger?)rI   rG   r   rb   r   rc   rh   r   r   r    rc      s   

z InstanceLogger.getEffectiveLevelN)rG   r?   rH   r%   )rL   r%   rM   r   rN   r   r   r   )
r]   r^   rL   r%   rM   r   rN   r   r   r   )r]   r^   r   rA   )r   r^   )r)   r(   rD   __doc__r   rb   r6   r0   rI   rF   rE   rK   r   rS   rU   warnrX   rZ   r\   rP   r/   rc   r   r   r   r    r<   l   s(   
 








instanceechoflagr?   c                 C  sT   | j rdt| j| j f }nt| j}|| _|dv r t|}nt||}|| _dS )zEcreate a logger for an instance that implements :class:`.Identified`.z%s.%s)FNN)r=   r+   	__class__r@   r   r7   r<   r   )rk   rl   rH   r   r   r   r    instance_logger   s   


rn   c                   @  s@   e Zd ZdZedddZedddZdddZdddZdS )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``.
    rk   Literal[None]ownerr$   r   c                 C     d S r.   r   r2   rk   rq   r   r   r    __get__     zecho_property.__get__r   r?   c                 C  rr   r.   r   rs   r   r   r    rt     ru   Optional[Identified]#Union[echo_property, _EchoFlagType]c                 C  s   |d u r| S |j S r.   )r@   rs   r   r   r    rt     s   valuer   c                 C  s   t ||d d S )N)rl   )rn   )r2   rk   rx   r   r   r    __set__!  s   zecho_property.__set__N)rk   rp   rq   r$   r   ro   )rk   r   rq   r$   r   r?   )rk   rv   rq   r$   r   rw   )rk   r   rx   r?   r   r   )r)   r(   rD   ri   r   rt   ry   r   r   r   r    ro     s    

ro   )r   r   r   r   )r#   r$   r   r%   )r#   r,   r   r,   r.   )rk   r   rl   r?   r   r   ))ri   
__future__r   r   r   typingr   r   r   r   r   r   r	   utilr   r   Zutil.typingr   rd   rf   r   rA   r?   r7   Z
rootloggerr]   rb   setLevelWARNr!   setr"   rF   r+   r;   Loggerr>   r   r<   rn   ro   r   r   r   r    <module>   sD   



y