ó
Ý™xTc           @   s×   d  Z  d d l m Z d d l Z d d l Z d e f d „  ƒ  YZ e ƒ  Z e j j Z e j j	 Z	 e j j Z e j j
 Z
 e j j Z e j j Z d d l Z d e j f d „  ƒ  YZ e d k rÓ e j ƒ  n  d S(	   s   A simple logging interface.iÿÿÿÿ(   t   divisionNt   loggerc           B   sh   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „ Z e d „ Z	 d d „ Z
 d	 „  Z d
 „  Z RS(   sû  A basic wrapper over Python standard library logging module.

  This class is designed to be used as a logging singleton, with a few
  basic convenience methods:
    set_quiet       Suppress output except errors.
    set_logfile     Set an output log file.
    set_stdout      Set log output to stdout.

  It may also be written to as a file-like object.

  Examples:

  # Basic usage
  >>> import libtbx.log
  >>> libtbx.log.info("Helpful message")

  # Write as a file handle
  >>> print >> libtbx.log.logger, "As file handle"

  # Set debug, or quiet states
  >>> libtbx.log.logger.set_debug(True)
  >>> libtbx.log.debug("Debugging output.")
  >>> libtbx.log.logger.set_quiet(True)
  >>> libtbx.log.info("This should be muted.")

  # Output file
  >>> libtbx.log.logger.set_logfile("test.log")
  >>> libtbx.log.info("Redirected to test.log")

  # Experimental sys.stdout redirection
  >>> libtbx.log.logger.set_logfile("test.log")
  >>> sys.stdout = libtbx.log.logger
  >>> print "stdout redirection to test.log"

  c         C   sK   t  j d ƒ |  _ |  j j t  j ƒ t  j ƒ  |  _ d  |  _ |  j	 ƒ  d  S(   Nt   phenix(
   t   loggingt	   getLoggert   logt   setLevelt   INFOt	   Formattert	   formattert   Nonet   cht
   set_stdout(   t   self(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   __init__+   s
    	c         C   s   |  j  j | ƒ d  S(   N(   R   t   info(   R   t   data(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   write7   s    c         C   s+   y |  j  j ƒ  Wn t k
 r& } n Xd  S(   N(   R   t   flusht	   Exception(   R   t   e(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyR   :   s    c         C   s+   y |  j  j ƒ  Wn t k
 r& } n Xd  S(   N(   R   t   closeR   (   R   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyR   @   s    c         C   s/   t  j } | r t  j } n  |  j j | ƒ d  S(   N(   R   R   t   ERRORR   R   (   R   t   statet   level(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt	   set_quietF   s    	c         C   s/   t  j } | r t  j } n  |  j j | ƒ d  S(   N(   R   R   t   DEBUGR   R   (   R   R   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt	   set_debugL   s    	t   wc         C   sa   t  j | d | ƒ} | j |  j ƒ |  j rD |  j j |  j ƒ n  |  j j | ƒ | |  _ d  S(   Nt   mode(   R   t   FileHandlert   setFormatterR	   R   R   t   removeHandlert
   addHandler(   R   t   filenameR   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   set_logfileR   s    	c         C   s   d  S(   N(    (   R   t   fileobj(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   set_fileobjZ   s    c         C   sX   t  j ƒ  } | j |  j ƒ |  j r; |  j j |  j ƒ n  |  j j | ƒ | |  _ d  S(   N(   R   t   StreamHandlerR   R	   R   R   R    R!   (   R   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyR   ]   s    	(   t   __name__t
   __module__t   __doc__R   R   R   R   t   TrueR   R   R#   R%   R   (    (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyR      s   #					t   TestLogc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sŸ   t  j t ƒ t t t t t g } xv | D]n } t  j d ƒ d | } | | ƒ t  j	 ƒ  t  j
 ƒ  t d ƒ �% } | j ƒ  } | | k s‘ t ‚ Wd  QXq) Wd  S(   Ns   test.logs   test %s(   R   R   R*   t   debugR   t   warnt   errort   criticalR#   R   R   t   opent   readt   AssertionError(   R   t   testst   testt   valuet   fR   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   test_ft   s    



c         C   s–   d GHt  j d ƒ t  j t ƒ t d ƒ t  j t ƒ t d ƒ t  j t ƒ t d ƒ �7 } | j ƒ  } d | k sz t ‚ d | k sŒ t ‚ Wd  QXd  S(   Ns   Check set_debugs   test.logs   debug: muteds	   debug: okt   mutedt   ok(	   R   R#   R   t   FalseR,   R*   R0   R1   R2   (   R   R6   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt
   test_debug�   s    

c         C   s–   d GHt  j d ƒ t  j t ƒ t d ƒ t  j t ƒ t d ƒ t  j t ƒ t d ƒ �7 } | j ƒ  } d | k sz t ‚ d | k sŒ t ‚ Wd  QXd  S(   Ns   Check set_quiets   test.logs	   quiet: oks   quiet: mutedR8   R9   (	   R   R#   R   R:   R   R*   R0   R1   R2   (   R   R6   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt
   test_quietŽ   s    

c         C   sS   d GHt  j d ƒ t d ƒ t d ƒ �% } | j ƒ  } d | k sI t ‚ Wd  QXd  S(   Ns   Check output files   test.logs   logfile: okR9   (   R   R#   R   R0   R1   R2   (   R   R6   R   (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   test_logfile›   s    
c         C   s.   t  j } d GHt t  _ d GH| t  _ d GHd  S(   Ns   Checking sys.stdout redirects   redirect: oks   ... and back again(   t   syst   stdoutR   (   R   t   oldsys(    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   test_stdout£   s    			(   R'   R(   R7   R;   R<   R=   RA   (    (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyR+   s   s
   				t   __main__(   R)   t
   __future__R    R   R>   t   objectR   R   R   R,   R-   R.   R/   t   unittestt   TestCaseR+   R'   t   main(    (    (    s8   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/log.pyt   <module>   s   `	8