ó
P'—^c           @@ s!  d  Z  d d l m Z m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z d d l m Z m Z d d l m Z d d l m Z m Z d d l m Z d d	 l m Z m Z d
 d l m Z d d d d d d d d d d d g Z e a e j  d d k Z! e j" j# d e ƒ Z$ e d ƒ Z% Z& e d ƒ Z' e a( d „  Z) d „  Z* e d „  ƒ Z+ d d „ Z, d  „  Z e d! ƒ Z- e d" ƒ Z. d# „  Z/ d$ „  Z0 d e j1 f d% „  ƒ  YZ2 d e3 f d& „  ƒ  YZ4 e d' „ Z5 d( „  Z6 d) „  Z7 d
 d* „ Z8 e5 ƒ  d S(+   sD   
    celery.utils.log
    ~~~~~~~~~~~~~~~~

    Logging utilities.

i    (   t   absolute_importt   print_functionN(   t   contextmanager(   t   current_processt   util(   t   values(   t
   get_loggert
   LOG_LEVELS(   t   safe_str(   t   string_tt   text_ti   (   t   coloredt   ColorFormattert   LoggingProxyt   base_loggert   set_in_sighandlert   in_sighandlerR   t   get_task_loggert   mlevelt   ensure_process_aware_loggert   get_multiprocessing_loggert   reset_multiprocessing_loggeri   t   MP_LOGt   celeryt   multiprocessingc         C@ s
   |  a  d  S(   N(   t   _in_sighandler(   t   value(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   2   s    c          c@ s±   t  ƒ  }  t t t j j j ƒ ƒ t j d  ƒ g } xv | D]n } yT xM | j	 D]B } y( | |  k r{ | j
 V|  j | ƒ n  WqN t k
 r qN XqN WWq; t k
 r¨ q; Xq; Wd  S(   N(   t   sett   listR   t   loggingt   Loggert   managert
   loggerDictt	   getLoggert   Nonet   handlerst   streamt   addt   AttributeError(   t   seent   loggerst   loggert   handler(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   iter_open_logger_fds7   s    	c           c@ s%   t  t ƒ z	 d  VWd  t  t ƒ Xd  S(   N(   R   t   Truet   False(    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   H   s    
	iè  c         C@ s”   |  t  ƒ  } } x} t | ƒ D]Z } | | k r3 t S| | k rW t d j |  ƒ ƒ ‚ n  | j | ƒ | j } | s Pq q Wt d j | ƒ ƒ ‚ t S(   Ns   Logger {0!r} parents recursives   Logger hierarchy exceeds {0}(   R   t   rangeR,   t   RuntimeErrort   formatR%   t   parentR-   (   t   lt   pt   maxt   thisR'   t   _(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt
   logger_isaQ   s    	c         C@ sR   t  |  ƒ } t j | | j f k rN | t k	 rN t | t ƒ sN t | _ qN n  | S(   N(   t   _get_loggerR   t   rootR1   R   R7   (   t   nameR2   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   d   s
    $s   celery.tasks   celery.workerc         C@ s+   t  |  ƒ } t | t ƒ s' t | _ n  | S(   N(   R   R7   t   task_loggerR1   (   R:   R)   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   n   s    c         C@ s+   |  r' t  |  t j ƒ r' t |  j ƒ  S|  S(   N(   t
   isinstancet   numberst   IntegralR   t   upper(   t   level(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   u   s    c           B@ sg   e  Z e ƒ  j Z i e d  d 6e d d 6e d d 6e d d 6Z d e d „ Z d	 „  Z	 d
 „  Z
 RS(   t   bluet   DEBUGt   yellowt   WARNINGt   redt   ERRORt   magentat   CRITICALc         C@ s    t  j j |  | ƒ | |  _ d  S(   N(   R   t	   Formattert   __init__t	   use_color(   t   selft   fmtRK   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRJ      s    c         C@ s^   | r% t  | t ƒ r% t j ƒ  } n  t j j |  | ƒ } t  | t ƒ rZ t rZ t	 | ƒ S| S(   N(
   R<   t   tuplet   syst   exc_infoR   RI   t   formatExceptiont   strt   PY3R   (   RL   t   eit   r(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRQ   …   s    
c         C@ s9  t  j j |  | ƒ } |  j j | j ƒ } | j d k rE t j ƒ  n | j } | r+|  j r+yX y9 t	 | t
 ƒ rˆ t | t | ƒ ƒ ƒ St | | ƒ ƒ SWn t k
 r³ t | ƒ SXWq5t k
 r'} | j d d j t | ƒ | ƒ } | _ | _ z t  j j |  | ƒ SWd  | | | _ | _ Xq5Xn
 t | ƒ Sd  S(   Ni   s   <Unrepresentable {0!r}: {1!r}>(   R   RI   R0   t   colorst   gett	   levelnameRP   RO   RK   R<   R	   R
   R   t   UnicodeDecodeErrort	   Exceptiont   msgt   type(   RL   t   recordR[   t   colort   einfot   exct   prev_msg(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR0      s$    $ N(   t   __name__t
   __module__R   t   namest   COLORSRV   R"   R,   RJ   RQ   R0   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   {   s   	c           B@ sw   e  Z d  Z d Z d	 Z e Z e j	 Z
 e j ƒ  Z d	 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(
   sÂ   Forward file object to :class:`logging.Logger` instance.

    :param logger: The :class:`logging.Logger` instance to forward to.
    :param loglevel: Loglevel to use when writing messages.

    t   wc         C@ s;   | |  _  t | p$ |  j  j p$ |  j ƒ |  _ |  j ƒ  d  S(   N(   R)   R   R@   t   loglevelt   _safewrap_handlers(   RL   R)   Rg   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRJ   »   s    	$c         C@ s,   d „  } g  |  j  j D] } | | ƒ ^ q S(   s‡   Make the logger handlers dump internal errors to
        `sys.__stderr__` instead of `sys.stderr` to circumvent
        infinite loops.c         S@ s,   d t  j f d „  ƒ  Y} | ƒ  j |  _ d  S(   Nt   WithSafeHandleErrorc           B@ s   e  Z d  „  Z RS(   c         S@ s[   t  j ƒ  } zD y, t j | d | d | d d  t  j ƒ Wn t k
 rN n XWd  ~ Xd  S(   Ni    i   i   (   RO   RP   t	   tracebackt   print_exceptionR"   t
   __stderr__t   IOError(   RL   R]   RP   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   handleErrorÉ   s    (   Rb   Rc   Rn   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRi   Ç   s   (   R   t   HandlerRn   (   R*   Ri   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   wrap_handlerÅ   s    (   R)   R#   (   RL   Rp   t   h(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRh   À   s    	c         C@ s—   t  r t t | ƒ d t j ƒSt |  j d t ƒ r8 d S| j ƒ  } | r“ |  j	 r“ t
 |  j _ z  |  j j |  j t | ƒ ƒ Wd t |  j _ Xn  d S(   s    Write message to logging object.t   filet   recurse_protectionN(   R   t   printR   RO   Rl   t   getattrt   _threadR-   t   stript   closedR,   Rs   R)   t   logRg   (   RL   t   data(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   writeÙ   s     c         C@ s"   x | D] } |  j  | ƒ q Wd S(   så   `writelines(sequence_of_strings) -> None`.

        Write the strings to the file.

        The sequence can be any iterable object producing strings.
        This is equivalent to calling :meth:`write` for each string.

        N(   R{   (   RL   t   sequencet   part(    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt
   writelinesè   s    	c         C@ s   d S(   sN   This object is not buffered so any :meth:`flush` requests
        are ignored.N(    (   RL   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   flushô   s    c         C@ s   t  |  _ d S(   sa   When the object is closed, no write requests are forwarded to
        the logging object anymore.N(   R,   Rx   (   RL   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   closeù   s    c         C@ s   t  S(   s9   Always return :const:`False`. Just here for file support.(   R-   (   RL   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   isattyþ   s    N(   Rb   Rc   t   __doc__t   modeR"   R:   R-   Rx   R   RF   Rg   t	   threadingt   localRv   RJ   Rh   R{   R~   R   R€   R   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   ®   s   						c         @ s   |  s t  r} t j ƒ  zU t a  t j ƒ  ‰  t ˆ  d t ƒ rB d Sd ˆ  f ‡  f d †  ƒ  Y} t j | ƒ Wd t j ƒ  Xn  d S(   s9   Make sure process name is recorded when loggers are used.t   _process_awareNt   ProcessAwareLoggerc           @ s2   e  Z e Z e Z ‡  f d  †  Z ‡  f d †  Z RS(   c         @ s(   ˆ  j  |  | | Ž } t ƒ  j | _ | S(   N(   t
   makeRecordR   t   _namet   processName(   RL   t   argst   kwdsR]   (   R   (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRˆ     s    c         @ s   t  r
 d  Sˆ  j |  | | Ž S(   N(   R   Ry   (   RL   R‹   t   kwargs(   R   (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyRy     s    (   Rb   Rc   R,   t   _signal_safeR†   Rˆ   Ry   (    (   R   (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR‡     s   (	   R†   R   t   _acquireLockR,   t   getLoggerClassRu   R-   t   setLoggerClasst   _releaseLock(   t   forceR‡   (    (   R   s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR     s    
c           C@ s   t  r t  j ƒ  Sd  S(   N(   t   mputilR   R"   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR      s    c           C@ s%   t  r! t t  d ƒ r! d  t  _ n  d  S(   Nt   _logger(   R”   t   hasattrR"   R•   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyR   $  s    c         C@ s7   t  r3 t t  ƒ  d d  ƒ } | d  k	 r/ | |  S| Sd  S(   Nt   index(   R   Ru   R"   (   t   baseR—   (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   current_process_index)  s    (9   R‚   t
   __future__R    R   R   R=   t   osRO   R„   Rj   t
   contextlibR   t   billiardR   R   R”   t
   kombu.fiveR   t	   kombu.logR   R8   R   t   kombu.utils.encodingR   t   celery.fiveR	   R
   t   termR   t   __all__R-   R†   t   version_infoRS   t   environRW   R   R   R)   t	   mp_loggerR   R   R+   R   R7   R;   t   worker_loggerR   R   RI   R   t   objectR   R   R   R   R™   (    (    (    s2   /tmp/pip-unpacked-wheel-gV1wwp/celery/utils/log.pyt   <module>   sP   									3U		