mò &U²Ic@s“dkZdkZdkZdkZdkZdklZlZlZl Z l Z l Z ddddgZ eZ eZeZdfd„ƒYZdS(N(s WHAT_ENTERs WHAT_EXITs WHAT_LINENOsWHAT_DEFINE_FILEsWHAT_DEFINE_FUNCs WHAT_ADD_INFOt LogReadertENTERtEXITtLINEcBswtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d d „Z d „Z d „Z d „Z RS(NcCsh|_h|_ti|ƒ|_|ii|_|ii |_ |i i dƒo|i d|_ n d|_ g|_|ii|_|ii|_dS(Nscurrent-directory(tselft_filemapt_funcmapt_hotshott logreadertlogfnt_readertnextt _nextitemtinfot_infothas_keytcwdtNonet_stacktappendt_appendtpopt_pop(RR ((t(/data/zmath/lib/python2.4/hotshot/log.pyt__init__s    cCs|iiƒdS(N(RR tclose(R((RR0scCs |iiƒS(s8Return the file descriptor of the log reader's log file.N(RR tfileno(R((RR3scCsdS(sòThis method is called for each additional ADD_INFO record. This can be overridden by applications that want to receive these events. The default implementation does not need to be called by alternate implementations. The initial set of ADD_INFO records do not pass through this mechanism; this is only needed to receive notification when new values are added. Subclasses can inspect self._info after calling LogReader.__init__(). N((Rtkeytvalue((Rtaddinfo7s cCs2y|i|SWntj otd‚nXdS(Nsunknown fileno(RRRtKeyErrort ValueError(RR((Rt get_filenameEscCs |iiƒS(N(RRtvalues(R((Rt get_filenamesKscCs`tiitii|ƒƒ}x2|iiƒD]!\}}||jo|Sq.q.Wt d‚dS(Nsunknown filename( tostpathtnormcasetnormpathtfilenameRRtitemsRtnameR(RR'RR)((Rt get_filenoNs    cCs8y|i||fSWntj otd‚nXdS(Nsunknown function location(RRRtlinenoRR(RRR+((Rt get_funcnameUsic CsŽx‡|iƒ\}}}}|tjoE|i||ƒ\}}|||f} |i | ƒ|| |fSn|t jo||i ƒ|fSn|tjo0|id\}}}||||f|fSn|tjo/tiitii|ƒƒ}||i|(!RRRR'RRR#R$R%tjoinRtabsnametopentfptIOErrortparsertsuitetreadtstRtsymboltfuncdeftlambdefttotupletstackRttreetsymt IndexErrort TypeErrorRtextendtlist( RRR@RHRKRLR'R>RGRJRE((RR;žs:   $      - %(t__name__t __module__RRRRR R"R*R,R R:R0R;(((RRs        $  (Rtos.pathR#RBRFtsysR/R3R4R6R7R8t__all__RRRR(R3RUR7RFRBRR6RTR8R4RRRRR/R#((Rt?s     +