Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/logging/
Upload File :
Current File : //usr/lib/python2.7/logging/config.pyc


|_c@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
yddlZddlZWne
k
reZnXddlmZmZdZejdkrdZndZeaeedZd	Zd
ZdZdZd
ZdZejdejZ dZ!de"fdYZ#de$fdYZ%de&fdYZ'de(fdYZ)de)fdYZ*e*Z+dZ,edZ-dZ.dS(s
Configuration functions for the logging package for Python. The core package
is based on PEP 282 and comments thereto in comp.lang.python, and influenced
by Apache's log4j system.

Copyright (C) 2001-2010 Vinay Sajip. All Rights Reserved.

To use, simply 'import logging' and log away!
iN(tThreadingTCPServertStreamRequestHandleriF#twin32iF'ihcCsddl}|j|}t|dr:|j|n
|j|t|}tjz7tjjtj	2t
||}t|||WdtjXdS(sD
    Read the logging configuration from a ConfigParser-format file.

    This can be called several times from an application, allowing an end user
    the ability to select from various pre-canned configurations (if the
    developer provides a mechanism to present the choices and load the chosen
    configuration).
    iNtreadline(
tConfigParserthasattrtreadfptreadt_create_formatterstloggingt_acquireLockt	_handlerstcleart_handlerListt_install_handlerst_install_loggerst_releaseLock(tfnametdefaultstdisable_existing_loggersRtcpt
formattersthandlers((s$/usr/lib/python2.7/logging/config.pyt
fileConfig5s	


cCs|jd}|jd}t|}x\|D]T}|d|}yt||}Wq1tk
rt|t||}q1Xq1W|S(s)Resolve a dotted name to a global object.t.i(tsplittpopt
__import__tgetattrtAttributeError(tnametusedtfoundtn((s$/usr/lib/python2.7/logging/config.pyt_resolveTs


cCstd|S(NcSs
|jS(N(tstrip(tx((s$/usr/lib/python2.7/logging/config.pyt<lambda>cs(tmap(talist((s$/usr/lib/python2.7/logging/config.pyt
_strip_spacesbscCs t|tr|S|jdS(Nsutf-8(t
isinstancetstrtencode(ts((s$/usr/lib/python2.7/logging/config.pyt_encodedescCs|jdd}t|s"iS|jd}t|}i}x|D]}d|}|j|}d|kr|j|dd}nd	}d|kr|j|dd}nd	}tj}d|kr|j|d}	|	rt|	}qn|||}
|
||<qJW|S(
sCreate and return formattersRtkeyst,sformatter_%stformatitdatefmttclassN(	tgettlenRR(toptionstNoneR	t	FormatterR"(RtflistRtformtsectnametoptstfstdfstct
class_nametf((s$/usr/lib/python2.7/logging/config.pyRhs.

	cCs
|jdd}t|s"iS|jd}t|}i}g}x|D]}d|}|j|d}|j|}d|kr|j|d}	nd}	yt|tt}Wn#tt	fk
rt
|}nX|j|d}
t|
tt}
||
}d	|krO|j|d	}|jtj|nt|	ro|j
||	nt|tjjrd
|kr|j|d
}
nd}
t|
r|j||
fqn|||<qPWx%|D]\}}|j||qW|S(sInstall and return handlersRR.R/s
handler_%sR2t	formatterttargstlevelttarget(R3R4RR(R5tevaltvarsR	Rt	NameErrorR"tsetLevelt_levelNamestsetFormattert
issubclassRt
MemoryHandlertappendt	setTarget(RRthlistRtfixupsthandR:tklassR;tfmtRCthRDREtt((s$/usr/lib/python2.7/logging/config.pyRsH

cCsz|jdd}|jd}ttd|}|jdd}tj}|}|j|}d|kr|j|d}|jtj	|nx|j
D]}	|j|	qW|j|d}
t|
r|
jd}
t
|
}
x"|
D]}|j||qWnt|jjj}|jg}
x|D]}d	|}|j|d
}|j|}d|kr|j|d}nd}tj|}||krK|j|d}|d
}t|}t|}xB||kr:||| |kr-|
j||n|d7}qW|j|nd|kr|j|d}|jtj	|nx|j
D]}	|j|	qW||_d|_|j|d}
t|
rN|
jd}
t
|
}
x"|
D]}|j||qWqNqNWx]|D]U}|jj|}||
kr`tj|_g|_
d|_q|rd|_qqWdS(sCreate and install loggerstloggersR.R/cSs
|jS(N(R#(R$((s$/usr/lib/python2.7/logging/config.pyR%stroottlogger_rootRDRs	logger_%stqualnamet	propagateiRiN(R3RtlistR&tremoveR	RXR5RIRJRt
removeHandlerR4R(t
addHandlertmanagert
loggerDictR.tsorttgetintt	getLoggertindexRNR[tdisabledtNOTSETRD(RRRtllistR:RXtlogR;RDRURPRRtexistingt
child_loggerstqnR[tloggertitprefixedtpflentnum_existing((s$/usr/lib/python2.7/logging/config.pyRsz
	




		

	s^[a-z_][a-z0-9_]*$cCs,tj|}|s(td|ntS(Ns!Not a valid Python identifier: %r(t
IDENTIFIERtmatcht
ValueErrortTrue(R,tm((s$/usr/lib/python2.7/logging/config.pytvalid_identstConvertingDictcBs/eZdZdZddZddZRS(s A converting dictionary wrapper.cCsqtj||}|jj|}||k	rm|||<t|tttfkrm||_||_	qmn|S(N(
tdictt__getitem__tconfiguratortconvertttypeRxtConvertingListtConvertingTupletparenttkey(tselfRtvaluetresult((s$/usr/lib/python2.7/logging/config.pyRz"s
	cCsttj|||}|jj|}||k	rp|||<t|tttfkrp||_||_	qpn|S(N(
RyR3R{R|R}RxR~RRR(RRtdefaultRR((s$/usr/lib/python2.7/logging/config.pyR3.s
	cCsjtj|||}|jj|}||k	rft|tttfkrf||_||_	qfn|S(N(
RyRR{R|R}RxR~RRR(RRRRR((s$/usr/lib/python2.7/logging/config.pyR:s	N(t__name__t
__module__t__doc__RzR6R3R(((s$/usr/lib/python2.7/logging/config.pyRxs	R~cBs#eZdZdZddZRS(sA converting list wrapper.cCsqtj||}|jj|}||k	rm|||<t|tttfkrm||_||_	qmn|S(N(
R\RzR{R|R}RxR~RRR(RRRR((s$/usr/lib/python2.7/logging/config.pyRzFs
	icCs^tj||}|jj|}||k	rZt|tttfkrZ||_qZn|S(N(	R\RR{R|R}RxR~RR(RtidxRR((s$/usr/lib/python2.7/logging/config.pyRRs(RRRRzR(((s$/usr/lib/python2.7/logging/config.pyR~Ds	RcBseZdZdZRS(sA converting tuple wrapper.cCsgtj||}|jj|}||k	rct|tttfkrc||_||_	qcn|S(N(
ttupleRzR{R|R}RxR~RRR(RRRR((s$/usr/lib/python2.7/logging/config.pyRz]s	(RRRRz(((s$/usr/lib/python2.7/logging/config.pyR[stBaseConfiguratorcBseZdZejdZejdZejdZejdZejdZ	idd6dd	6Z
eZd
Z
dZdZd
ZdZdZdZRS(sI
    The configurator base class which defines some useful defaults.
    s%^(?P<prefix>[a-z]+)://(?P<suffix>.*)$s^\s*(\w+)\s*s^\.\s*(\w+)\s*s^\[\s*(\w+)\s*\]\s*s^\d+$text_converttexttcfg_converttcfgcCst||_||j_dS(N(RxtconfigR{(RR((s$/usr/lib/python2.7/logging/config.pyt__init__{sc	Cs|jd}|jd}yy|j|}x_|D]W}|d|7}yt||}Wq7tk
r|j|t||}q7Xq7W|SWnVtk
rtjd\}}td||f}|||_	|_
|nXdS(s`
        Resolve strings to objects using standard import and attribute
        syntax.
        RiisCannot resolve %r: %sN(RRtimporterRRtImportErrortsystexc_infoRtt	__cause__t
__traceback__(	RR,RRR tfragtettbtv((s$/usr/lib/python2.7/logging/config.pytresolves"



cCs
|j|S(s*Default converter for the ext:// protocol.(R(RR((s$/usr/lib/python2.7/logging/config.pyRscCsO|}|jj|}|dkr7td|n||j}|j|jd}x|rJ|jj|}|r||jd}n|jj|}|r|jd}|j	j|s||}qyt
|}||}Wqtk
r||}qXn|r1||j}qatd||fqaW|S(s*Default converter for the cfg:// protocol.sUnable to convert %risUnable to convert %r at %rN(tWORD_PATTERNRsR6RttendRtgroupstDOT_PATTERNt
INDEX_PATTERNt
DIGIT_PATTERNtintt	TypeError(RRtrestRvtdRR!((s$/usr/lib/python2.7/logging/config.pyRs2	

cCs/t|tr7t|tr7t|}||_nt|trnt|trnt|}||_nt|trt|trt|}||_nt|tr+|j	j
|}|r+|j}|d}|jj
|d}|r(|d}t||}||}q(q+n|S(s
        Convert values to an appropriate type. dicts, lists and tuples are
        replaced by their converting alternatives. Strings are checked to
        see if they have a conversion format and are converted if they do.
        tprefixtsuffixN(R)RxRyR{R~R\RRt
basestringtCONVERT_PATTERNRst	groupdicttvalue_convertersR3R6R(RRRvRRt	converterR((s$/usr/lib/python2.7/logging/config.pyR|s*

c	Cs|jd}t|drUttdrUt|tjkrU|j|}n|jdd}tg|D]"}t|rq|||f^qq}||}|rx-|j	D]\}}t
|||qWn|S(s1Configure an object with a user-supplied factory.s()t__call__t	ClassTypeRN(RRttypesR}RRR6RyRwtitemstsetattr(	RRR>tpropstktkwargsRRR((s$/usr/lib/python2.7/logging/config.pytconfigure_customs45cCs"t|trt|}n|S(s0Utility function which converts lists to tuples.(R)R\R(RR((s$/usr/lib/python2.7/logging/config.pytas_tuples(RRRtretcompileRRRRRRRRRRRRR|RR(((s$/usr/lib/python2.7/logging/config.pyRgs"
				"		tDictConfiguratorcBsheZdZdZdZdZdZdZdZe	dZ
e	dZe	d	ZRS(
s]
    Configure logging using a dictionary-like object to describe the
    configuration.
    cCsj|j}d|kr$tdn|ddkrKtd|dn|jdt}i}tjz|r|jd|}x|D]}|tjkrtd|qyLtj|}||}|jdd}|r|j	tj
|nWqtk
r.}	td	||	fqXqW|jd
|}
xU|
D]M}y|j||
|t
WqLtk
r}	td||	fqLXqLW|jdd}|rWy|j|t
Wqtk
r}	td
|	qXqWnb|jdt
}tjjtj2|jd|}
xU|
D]M}y|j|
||
|<Wq4tk
r}	td||	fq4Xq4W|jd|}xU|D]M}y|j||||<Wqtk
r}	td||	fqXqW|jd|}xjt|D]\}y*|j||}||_|||<Wqtk
ri}	td	||	fqXqWtj}|jjj}|jg}|jd
|}
x|
D]}t|}||kr]|j|}|d}t|}t|}|d}x?||krL||| |krL|j|||d}qW|j|ny|j||
|Wqtk
r}	td||	fqXqWx]|D]U}|jj|}||krtj |_!g|_"t
|_#q|rt
|_$qqW|jdd}|rWy|j|WqWtk
rS}	td
|	qWXnWdtj%XdS(sDo the configuration.tversions$dictionary doesn't specify a versionisUnsupported version: %stincrementalRsNo handler found with name %rRDs"Unable to configure handler %r: %sRWs!Unable to configure logger %r: %sRXs#Unable to configure root logger: %sRRs$Unable to configure formatter %r: %stfilterss!Unable to configure filter %r: %sRN(&RRtRtFalseR	R
R3RR6RIt_checkLevelt
StandardErrortconfigure_loggerRutconfigure_rootRR
tconfigure_formattertconfigure_filtertsortedtconfigure_handlerRRXR`RaR.RbR-ReR4RNR]RgRDRR[RfR(RRRt
EMPTY_DICTRRthandlerthandler_configRDRRWRXtdisable_existingRRRjRkRnRoRpRqRiRm((s$/usr/lib/python2.7/logging/config.pyt	configures	








		




	cCsd|kr|d}y|j|}Wqtk
r}dt|krSn|jd|d<||d<|j|}qXn6|jdd}|jdd}tj||}|S(s(Configure a formatter from a dictionary.s()s'format'R0RTR1N(RRR*RR3R6R	R7(RRtfactoryRtteRTtdfmt((s$/usr/lib/python2.7/logging/config.pyRs

cCsCd|kr|j|}n!|jdd}tj|}|S(s%Configure a filter from a dictionary.s()RRB(RR3R	tFilter(RRRR((s$/usr/lib/python2.7/logging/config.pyRs
cCs]xV|D]N}y|j|jd|Wqtk
rT}td||fqXqWdS(s/Add filters to a filterer from a list of names.RsUnable to add filter %r: %sN(t	addFilterRRRt(RtfiltererRR@R((s$/usr/lib/python2.7/logging/config.pytadd_filterss

c
	Cs|jdd}|r\y|jd|}Wq\tk
rX}td||fq\Xn|jdd}|jdd}d|kr|jd}t|drttdrt|tjkr|j	|}n|}n|j	|jd	}t
|tjj
rsd
|krsy|jd|d
|d
<Wqtk
ro}td|d
|fqXnvt
|tjjrd
|kr|j|d
|d
<n;t
|tjjrd|kr|j|d|d<n|}tg|D]"}	t|	r|	||	f^q}
y||
}WnJtk
r}dt|kr^n|
jd|
d<||
}nX|r|j|n|dk	r|jtj|n|r|j||n|S(s&Configure a handler from a dictionary.RARsUnable to set formatter %r: %sRDRs()RRR2RERs#Unable to set target handler %r: %stmailhosttaddresss'stream'tstreamtstrmN(RR6RRRtRRR}RRRLR	RRMtSMTPHandlerRt
SysLogHandlerRyRwRR*RKRIRR(
RRRARRDRR>RRSRRRR((s$/usr/lib/python2.7/logging/config.pyRsX4	5cCs]xV|D]N}y|j|jd|Wqtk
rT}td||fqXqWdS(s.Add handlers to a logger from a list of names.RsUnable to add handler %r: %sN(R_RRRt(RRmRRUR((s$/usr/lib/python2.7/logging/config.pytadd_handlerss

cCs|jdd}|dk	r7|jtj|n|sx|jD]}|j|qHW|jdd}|r|j||n|jdd}|r|j||qndS(sU
        Perform configuration which is common to root and non-root loggers.
        RDRRN(	R3R6RIR	RRR^RR(RRmRRRDRURR((s$/usr/lib/python2.7/logging/config.pytcommon_logger_configscCsPtj|}|j||||jdd}|dk	rL||_ndS(s.Configure a non-root logger from a dictionary.R[N(R	RdRR3R6R[(RRRRRmR[((s$/usr/lib/python2.7/logging/config.pyRs
cCs#tj}|j|||dS(s*Configure a root logger from a dictionary.N(R	RdR(RRRRX((s$/usr/lib/python2.7/logging/config.pyRs(
RRRRRRRRRRRRR(((s$/usr/lib/python2.7/logging/config.pyRs						5	cCst|jdS(s%Configure logging using a dictionary.N(tdictConfigClassR(R((s$/usr/lib/python2.7/logging/config.pyt
dictConfigscsptstdndtfdY}dtfdY}dtjffdY|||S(sW
    Start up a socket server on the specified port, and listen for new
    configurations.

    These will be sent as a file suitable for processing by fileConfig().
    Returns a Thread object on which you can call start() to start the server,
    and which you can join() when appropriate. To stop the server, call
    stopListening().
    s listen() needs threading to worktConfigStreamHandlercBseZdZdZRS(s
        Handler for a logging configuration request.

        It expects a completely new logging configuration and uses fileConfig
        to install it.
        c
Ssddl}y@|j}|jd}t|dkrKtjd|d}|jj|}x3t||kr||j|t|}qdWy>ddl}|j|}t|t	st
t|WnQtj
|}yt|Wq)ttfk
rq)tjq)XnX|jjrK|jjjqKnWnMtjk
r}t|jtsyq|jd}	|	tkrqnXdS(s
            Handle a request.

            Each request is expected to be a 4-byte length, packed using
            struct.pack(">L", n), followed by the config file.
            Uses fileConfig() to do the grunt work.
            iNis>Li(ttempfilet
connectiontrecvR4tstructtunpacktjsontloadsR)RytAssertionErrorRt	cStringIOtStringIORtKeyboardInterruptt
SystemExitt	tracebackt	print_exctservertreadytsettsocketterrorRCRtRESET_ERROR(
RRtconntchunktslenRRtfileRterrcode((s$/usr/lib/python2.7/logging/config.pythandle s<	!
(RRRR(((s$/usr/lib/python2.7/logging/config.pyRstConfigSocketReceivercBs2eZdZdZdedddZdZRS(sD
        A simple TCP socket-based logging config receiver.
        it	localhostcSsLtj|||f|tjd|_tjd|_||_dS(Nii(RRR	R
tabortRttimeoutR(RthosttportRR((s$/usr/lib/python2.7/logging/config.pyRQs
	
	cSsddl}d}xj|s~|j|jjggg|j\}}}|r^|jntj|j}tjqW|jj	dS(Nii(
tselectRtfilenoRthandle_requestR	R
RRtclose(RRRtrdtwrtex((s$/usr/lib/python2.7/logging/config.pytserve_until_stoppedZs	

	N(RRRtallow_reuse_addresstDEFAULT_LOGGING_CONFIG_PORTR6RR(((s$/usr/lib/python2.7/logging/config.pyRJs
tServercs eZfdZdZRS(csAt|j||_||_||_tj|_dS(N(tsuperRtrcvrthdlrRt	threadingtEventR(RR
RR(R(s$/usr/lib/python2.7/logging/config.pyRjs
			cSs~|jd|jd|jd|j}|jdkrI|jd|_n|jjtj|atj	|j
dS(NRRRii(R
RRRtserver_addressRR	R
t	_listenerRR(RR((s$/usr/lib/python2.7/logging/config.pytrunqs


(RRRR((R(s$/usr/lib/python2.7/logging/config.pyRhs(tthreadtNotImplementedErrorRRRtThread(RRR((Rs$/usr/lib/python2.7/logging/config.pytlistens
1cCs8tjztr%dt_danWdtjXdS(sN
    Stop the listening server which was created with a call to listen().
    iN(R	R
RRR6R(((s$/usr/lib/python2.7/logging/config.pyt
stopListenings
	
(/RRR	tlogging.handlersRRtosRRRRRRRR6tSocketServerRRRtplatformRRRuRR"R(R-RRRRtIRrRwRyRxR\R~RRtobjectRRRRRR(((s$/usr/lib/python2.7/logging/config.pyt<module>s@`

						+	\	%	s