
y<i                 @   s   d  Z  d d l Z d d l Z d d l m Z y& d d l m Z m Z m Z m	 Z	 Wn e
 k
 rh Yn Xd d l m Z Gd d   d e j  Z d	 d
   Z d d   Z e d e d d   Z e d d    Z d S)zB
Helper functionality for interoperability with stdlib `logging`.
    N)contextmanager)IteratorListOptionalType   )tqdmc                   s1   e  Z d  Z e   f d d  Z d d   Z   S)_TqdmLoggingHandlerc                s   t    j   | |  _ d  S)N)super__init__
tqdm_class)selfr   )	__class__ Y/home/www/utuvibe.miabetepe.com/venv/lib/python3.12/site-packages/tqdm/contrib/logging.pyr      s    z_TqdmLoggingHandler.__init__c             C   sl   y6 |  j  |  } |  j j | d |  j |  j   Wn/ t t f k
 rS   Yn |  j |  Yn Xd  S)Nfile)formatr   writestreamflushKeyboardInterrupt
SystemExitZhandleError)r   recordmsgr   r   r   emit   s    z_TqdmLoggingHandler.emit)__name__
__module____qualname__std_tqdmr   r   r   r   )r   r   r	      s   r	   c             C   s+   t  |  t j  o* |  j t j t j h k S)N)
isinstanceloggingStreamHandlerr   sysstdoutstderr)handlerr   r   r   _is_console_logging_handler#   s    r&   c             C   s%   x |  D] } t  |  r | Sq Wd  S)N)r&   )handlersr%   r   r   r   (_get_first_found_console_logging_handler(   s    r(   c             c   s   |  d k r t  j g }  d d   |  D } z} xq |  D]i } t |  } t | j  } | d k	 r~ | j | j  | j | _ d d   | j D | g | _ q5 Wd VWd x& t |  |  D] \ } } | | _ q WXd S)a  
    Context manager redirecting console logging to `tqdm.write()`, leaving
    other logging handlers (e.g. log files) unaffected.

    Parameters
    ----------
    loggers  : list, optional
      Which handlers to redirect (default: [logging.root]).
    tqdm_class  : optional

    Example
    -------
    ```python
    import logging
    from tqdm import trange
    from tqdm.contrib.logging import logging_redirect_tqdm

    LOG = logging.getLogger(__name__)

    if __name__ == '__main__':
        logging.basicConfig(level=logging.INFO)
        with logging_redirect_tqdm():
            for i in trange(9):
                if i == 4:
                    LOG.info("console logging redirected to `tqdm.write()`")
        # logging restored
    ```
    Nc             S   s   g  |  ] } | j   q Sr   )r'   ).0loggerr   r   r   
<listcomp>R   s   	 z)logging_redirect_tqdm.<locals>.<listcomp>c             S   s"   g  |  ] } t  |  s |  q Sr   )r&   )r)   r%   r   r   r   r+   [   s   	 )	r    rootr	   r(   r'   setFormatterZ	formatterr   zip)loggersr   Zoriginal_handlers_listr*   Ztqdm_handlerZorig_handlerZoriginal_handlersr   r   r   logging_redirect_tqdm.   s    "	r0   c              o   so   | j    } | j d d  } | j d t  } | |  |   ) } t d | d |  
 | VWd QRXWd QRXd S)ap  
    Convenience shortcut for:
    ```python
    with tqdm_class(*args, **tqdm_kwargs) as pbar:
        with logging_redirect_tqdm(loggers=loggers, tqdm_class=tqdm_class):
            yield pbar
    ```

    Parameters
    ----------
    tqdm_class  : optional, (default: tqdm.std.tqdm).
    loggers  : optional, list.
    **tqdm_kwargs  : passed to `tqdm_class`.
    r/   Nr   )copypopr   r0   )argskwargsZtqdm_kwargsr/   r   Zpbarr   r   r   tqdm_logging_redirectc   s    r5   )__doc__r    r"   Z
contextlibr   Ztypingr   r   r   r   ImportErrorstdr   r   r!   r	   r&   r(   r0   r5   r   r   r   r   <module>   s   &2