ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@sdZddlZddlZejdZejejkrRejejndZ e Z dZ de fdYZde fd YZdd Zd e fd YZdS( sLogging 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` and :class:`.Pool` objects, corresponds to a logger specific to that instance only. iNt sqlalchemycCs9tjtj}|jtjd|j|dS(Ns.%(asctime)s %(levelname)s %(name)s %(message)s(tloggingt StreamHandlertsyststdoutt setFormattert Formattert addHandler(tloggerthandler((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt_add_default_handler!scs[tj|jd|jfd|_fd|_|_tj||S(Nt.csjtjS(N(t isEnabledForRtDEBUG(tself(R(sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt.tcsjtjS(N(R RtINFO(R(R(sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR/R( Rt getLoggert __module__t__name__t_should_log_debugt_should_log_infoRt_logged_classestadd(tcls((RsA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt class_logger,s   t IdentifiedcBs eZdZdZdZRS(cCs|jjtjS(N(RR RR (R((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR8scCs|jjtjS(N(RR RR(R((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR;sN(RRtNonet logging_nameRR(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR5s tInstanceLoggercBseZdZiejd 6eje6eje6ej d6Z dZ dZ dZ dZeZdZdZdZd Zd Zd ZRS( sA 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 tdebugcCsR||_tj||_|j|tjkrN|jj rNt|jndS(N(techoRRRt _echo_mapRthandlersR (RR tname((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt__init__Zs #cOs|jtj|||dS(s/Delegate a debug call to the underlying logger.N(tlogRR (Rtmsgtargstkwargs((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyRfscOs|jtj|||dS(s/Delegate an info call to the underlying logger.N(R%RR(RR&R'R(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pytinfokscOs|jtj|||dS(s1Delegate a warning call to the underlying logger.N(R%RtWARNING(RR&R'R(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pytwarningpscOs|jtj|||dS(sB Delegate an error call to the underlying logger. N(R%RtERROR(RR&R'R(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyterrorwscOs'd|d<|jtj|||dS(s4Delegate an exception call to the underlying logger.itexc_infoN(R%RR,(RR&R'R(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt exception}s cOs|jtj|||dS(s2Delegate a critical call to the underlying logger.N(R%RtCRITICAL(RR&R'R(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pytcriticalscOsv|jjj|krdS|j|j}|tjkrJ|jj}n||krr|jj||||ndS(sDelegate 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( RtmanagertdisableR!R RtNOTSETtgetEffectiveLevelt_log(RtlevelR&R'R(tselected_level((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR%s  cCs)|jjj|krtS||jkS(s)Is this logger enabled for level 'level'?(RR2R3tFalseR5(RR7((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR scCs5|j|j}|tjkr1|jj}n|S(s+What's the effective level for this logger?(R!R RR4RR5(RR7((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR5sN(RRt__doc__RR4RR9RtTrueR R!R$RR)R+twarnR-R/R1R%R R5(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyR?s"            cCs|jr.d|jj|jj|jf}nd|jj|jjf}||_|tdfkrwtj|}nt ||}||_ dS(sEcreate a logger for an instance that implements :class:`.Identified`.s%s.%s.%ss%s.%sN( Rt __class__RRt_echoR9RRRRR(tinstancetechoflagR#R((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pytinstance_loggers     t echo_propertycBs eZdZdZdZRS(s} 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``. cCs|dkr|S|jSdS(N(RR>(RR?towner((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt__get__s cCst|d|dS(NR@(RA(RR?tvalue((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyt__set__s(RRR:RDRF(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyRBs  (R:RRRt rootloggerR7R4tsetLeveltWARNR tsetRRtobjectRRRRARB(((sA/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/log.pyts      o