+
    iv  c                   s    ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt	^ RI	t	 ! R R4      t
 ! R R]
4      t ! R R]4      t ! R R	]
4      t ! R
 R]
4      t ! R R4      t]! 4       tR# )    Nc                   s@   a  ] tR t^t o RtR tRR ltR tR tRt	V t
R# )		LogTargetz#Abstract class for logging targets.c                s    R V n         R # Nfdself   &9/usr/lib/python3.14/site-packages/firewall/core/logger.py__init__ZLogTarget.__init__   s	        c                    \        R 4      h)z%LogTarget.write is an abstract methodZNotImplementedErrorr   datalevelloggeris_debug   &&&&&r   writeZLogTarget.write       !"IJJr
   c                r   )z%LogTarget.flush is an abstract methodr   r   r   r   flushZLogTarget.flush    r   r
   c                r   )z%LogTarget.close is an abstract methodr   r   r   r   closeZLogTarget.close#   r   r
   r   Nr    )__name__
__module____qualname____firstlineno____doc__r	   r   r   r   __static_attributes____classdictcell__Z__classdict__   @r   r   r      s%     -KKK Kr
   r   c                   s<   a  ] tR t^+t o R tRR ltR tR tRtV t	R# )
_StdoutLogc                Z    \         P                  V 4       \        P                  V n        R # r   )r   r	   sysstdoutr   r   r   r   r	   Z_StdoutLog.__init__,   s    4 **r
   c                s\    V P                   P                  V4       V P                  4        R # r   )r   r   r   r   r   r   r   Z_StdoutLog.write0   s    d

r
   c                s&    V P                  4        R # r   )r   r   r   r   r   Z_StdoutLog.close5   s    

r
   c                s:    V P                   P                  4        R # r   r   r   r   r   r   r   Z_StdoutLog.flush8   s    r
   r   Nr   
r   r   r   r   r	   r   r   r   r   r   r   r    r   r!   r!   +   s     
 r
   r!   c                   s&   a  ] tR t^@t o R tRtV tR# )
_StderrLogc                r"   r   )r!   r	   r#   stderrr   r   r   r   r	   Z_StderrLog.__init__A   s    D!**r
   r   N)r   r   r   r   r	   r   r   r   r    r   r'   r'   @   s      r
   r'   c                   s<   a  ] tR t^Jt o R tRR ltR tR tRtV t	R# )
_SyslogLogc                s    \         P                  V 4       \        P                  ! \        P
                  P                  \        P                  ^ ,          4      \        P                  \        P                  4       R# )r    N)r   r	   syslogZopenlogosZpathZbasenamer#   ZargvZLOG_PIDZ
LOG_DAEMONr   r   r   r	   Z_SyslogLog.__init__K   sC    4  	rww''4fnnfFWFWXr
   c                s"   R pV'       d   \         P                  pMW#P                  8  d   \         P                  pMbW#P                  8X  d   \         P
                  pMAW#P                  8X  d   \         P                  pM W#P                  8X  d   \         P                  pVP                  R4      '       d   VR \        V4      ^,
           p\        V4      ^ 8  d5   Vf   \         P                   ! V4       R # \         P                   ! WQ4       R # R # )N
)r*   Z	LOG_DEBUGINFO1ZLOG_INFOWARNINGZLOG_WARNINGERRORZLOG_ERRFATALZLOG_CRITZendswithlen)r   r   r   r   r   Zprioritys   &&&&& r   r   Z_SyslogLog.writeX   s    ''H$!??..(!--,,&!>>,,&!??==#d)a-(Dt9q=d#h-	 r
   c                s0    \         P                  ! 4        R # r   )r*   Zcloselogr   r   r   r   Z_SyslogLog.closen   s    r
   c                s    R # r    r   r   r   r   Z_SyslogLog.flushq   s    r
   r2   Nr   r&   r   r    r   r)   r)   J   s     Y., r
   r)   c                   sJ   a  ] tR t^xt o RtR	R ltR tR
R ltR tR t	Rt
V tR# )FileLogz6FileLog class.
File will be opened on the first write.c                sH    \         P                  V 4       Wn        W n        R # r   )r   r	   filenamemode)r   r4   r5      &&&r   r	   ZFileLog.__init__|   s    4  	r
   c                sT   V P                   '       d   R # \        P                  \        P                  ,          pV P                  P                  R4      '       d   V\        P                  ,          p\        P                  ! V P                  VR4      V n         \        P                  ! V P                   R4       \        P                  ! V P                   V P                  4      V n         \        P                  ! V P                   \        P                  \        P                  4       R # )NZai  )r   r+   ZO_CREATZO_WRONLYr5   
startswithZO_APPENDopenr4   ZfchmodZfdopenfcntlZF_SETFDZ
FD_CLOEXEC)r   Zflagss   & r   r8   ZFileLog.open   s    777

R[[(99$$R[[ E''$--6
		$''5!))DGGTYY/DGGU]]E,<,<=r
   c                s    V P                   '       g   V P                  4        V P                   P                  V4       V P                   P                  4        R # r   )r   r8   r   r   r   r   r   r   ZFileLog.write   s1    wwwIIKdr
   c                sp    V P                   '       g   R # V P                   P                  4        R V n         R # r   )r   r   r   r   r   r   ZFileLog.close   s"    wwwr
   c                sb    V P                   '       g   R # V P                   P                  4        R # r   r%   r   r   r   r   ZFileLog.flush   s    wwwr
   )r   r4   r5   N)Zwr   )r   r   r   r   r   r	   r8   r   r   r   r   r   r   r    r   r3   r3   x   s(     /
> r
   r3   c                   s  a  ] tR t^t o RtR,tR-tR.tR/tR0t	^ t
]! 4       t]! 4       t]! 4       tR1R ltR tR2R ltR2R ltR2R ltR2R ltR tR	 tR
 tR tR tR t]R3R lt]R3R lt]R3R lt]R3R lt ]R3R lt!]R3R lt"R t#R t$R t%R t&R t'R t(R t)R t*R t+R t,R t-R3R  lt.R! t/R3R" lt0]R^ 3R# lt1]R^ 3R$ lt2]R^ 3R% lt3R3R& lt4R' t5R( t6R) t7R3R* lt8R+t9V t:R# )4Loggerah  
Format string:

%(class)s      Calling class the function belongs to, else empty
%(date)s       Date using Logger.date_format, see time module
%(domain)s     Full Domain: %(module)s.%(class)s.%(function)s
%(file)s       Filename of the module
%(function)s   Function name, empty in __main__
%(label)s      Label according to log function call from Logger.label
%(level)d      Internal logging level
%(line)d       Line number in module
%(module)s     Module name
%(message)s    Log message

Standard levels:

FATAL                 Fatal error messages
ERROR                 Error messages
WARNING               Warning messages
INFOx, x in [1..5]    Information
DEBUGy, y in [1..10]  Debug messages
NO_INFO               No info output
NO_DEBUG              No debug output
INFO_MAX              Maximum info level
DEBUG_MAX             Maximum debug level

x and y depend on info_max and debug_max from Logger class
initialization. See __init__ function.

Default logging targets:

stdout        Logs to stdout
stderr        Logs to stderr
syslog        Logs to syslog

Additional arguments for logging functions (fatal, error, warning, info
and debug):

nl       Disable newline at the end with nl=0, default is nl=1.
fmt      Format string for this logging entry, overloads global format
         string. Example: fmt="%(file)s:%(line)d %(message)s"
nofmt    Only output message with nofmt=1. The nofmt argument wins over
         the fmt argument.

Example:

from logger import log
log.setInfoLogLevel(log.INFO1)
log.setDebugLogLevel(log.DEBUG1)
for i in range(1, log.INFO_MAX+1):
    log.setInfoLogLabel(i, "INFO%d: " % i)
log.setFormat("%(date)s %(module)s:%(line)d [%(domain)s] %(label)s: "
              "%(level)d %(message)s")
log.setDateFormat("%Y-%m-%d %H:%M:%S")

fl = FileLog("/tmp/log", "a")
log.addInfoLogging("*", fl)
log.addDebugLogging("*", fl)
log.addInfoLogging("*", log.syslog, fmt="%(label)s%(message)s")

log.debug3("debug3")
log.debug2("debug2")
log.debug1("debug1")
log.info2("info2")
log.info1("info1")
log.warning("warning\n", nl=0)
log.error("error\n", nl=0)
log.fatal("fatal")
log.info(log.INFO1, "nofmt info", nofmt=1)

c           	     s0   / V n         / V n        RV n        RV n        / V n        / V n        / V n        / V n        / V n        / V n	        V^8  d   \        RV,          4      hV^ 8  d   \        RV,          4      hV P                  V n        Wn        ^ V n        W n        V P!                  V P"                  R4       V P!                  V P$                  R4       V P!                  V P&                  R4       V P!                  V P                  R4       \)        ^V P                  ^,           4       FD  p\+        V RV,          V4       V P!                  VR4       \+        V RV,          R	 ! W4      4       KF  	  \)        ^V P                  ^,           4       FK  p\+        V R
V,          V4       V P-                  VRV,          4       \+        V RV,          R ! W4      4       KM  	  V P/                  V P0                  4       V P3                  V P                  4       V P5                  R4       V P7                  R4       V P9                  RV P:                  V P"                  V P&                  V P                  .4       T P9                  RV P<                  \)        V P0                  V P                  ^,           4       Uu. uF  qDNK  	  up4       T P?                  RV P<                  \)        ^V P                  ^,           4       Uu. uF  qDNK  	  up4       R# u upi u upi )zLogger class initialization zLogger: info_max %d is too lowzLogger: debug_max %d is too lowzFATAL ERROR: zERROR: z	WARNING: zINFO%dzinfo%dc                    a a V V3R  l# )c                 2   < SP                   ! SV .VO5/ VB # r   )infomessageargskwargsr   x   &*,r   <lambda>3Logger.__init__.<locals>.<lambda>.<locals>.<lambda>  s&    TYY7F%)F-3Fr
   r2   r   rC      ffr   rE   !Logger.__init__.<locals>.<lambda>       %r
   zDEBUG%dz	DEBUG%d: zdebug%dc                 r<   )c                 r=   r   )debugr?   rD   r   rE   rF   ,  s&    TZZ7F%)F-3Fr
   r2   rG   rH   r   rE   rI   ,  rJ   r
   z%(label)s%(message)sz%d %b %Y %H:%M:%S*N) _level_debug_level_format_date_format_label_debug_label_logging_debug_logging_domains_debug_domains
ValueErrorr.   NO_INFOINFO_MAXNO_DEBUG	DEBUG_MAXsetInfoLogLabelr0   	TRACEBACKr/   rangeZsetattrsetDebugLogLabelsetInfoLogLevelr-   setDebugLogLevel	setFormatsetDateFormatsetInfoLoggingr(   r$   setDebugLogging)r   Zinfo_maxZ	debug_maxrM   i   &&&  r   r	   ZLogger.__init__   s      a<=HIIq=>JKK|| "TZZ9T^^R0TZZ3T\\;7 At}}q01FD(V+V4  ,F# 	  2 At~~12FD)f,f5!!&+*>?V$ 	  3 	TZZ(dmm,-../Ctzz4::t||.TU%

DMMA<M*NO*NQq*NO	
 	%4>>A3E*FG*FQq*FG	
 P Hs   4
L;
Lc                s    \        V P                  V P                  ^,           4       FB  pWP                  9  d   K  V P                  V,           F  w  r#pVP	                  4        K  	  KD  	  R# )zClose all logging targetsN)r^   r0   r[   rS   r   )r   r   dummytargets   &   r   r   ZLogger.close?  sQ    4::t~~'9:EMM)(,e(<(<$u )= ;r
   c                s    V P                  V4       WP                  9   d   V P                  V,          # V P                  # )zGet info log level.)_checkDomainrM   NOTHINGr   domain   &&r   getInfoLogLevelZLogger.getInfoLogLevelG  s3    &![[ ;;v&&||r
   c                s    V P                  V4       WP                  8  d   V P                  pWP                  8  d   V P                  pWP                  V&   R# )z#Set log level [NOTHING .. INFO_MAX]N)rj   rk   rY   rM   r   r   rm   r6   r   r`   ZLogger.setInfoLogLevelN  sB    &!<<LLE== MME#Fr
   c                s    V P                  V4       WP                  9   d%   V P                  V,          V P                  ,           # V P                  # )zGet debug log level.)rj   rN   rZ   rl   rn   r   getDebugLogLevelZLogger.getDebugLogLevelW  s@    &!&&&$$V,t}}<<}}r
   c                s    V P                  V4       V^ 8  d   ^ pWP                  8  d   V P                  pWP                  ,
          V P                  V&   R# )z+Set debug log level [NO_DEBUG .. DEBUG_MAX]N)rj   r[   rZ   rN   rp   r6   r   ra   ZLogger.setDebugLogLevel^  sF    &!19E>>!NNE$)MM$9&!r
   c                    V P                   # r   rO   r   r   r   	getFormatZLogger.getFormatg  s    ||r
   c                    Wn         R # r   rs   r   rO   rn   r   rb   ZLogger.setFormatj  s    r
   c                rr   r   rP   r   r   r   getDateFormatZLogger.getDateFormatm  s       r
   c                ru   r   rw   rv   rn   r   rc   ZLogger.setDateFormatp  s    #r
   c                s    V P                  V4      pV F8  pV P                  WP                  V P                  R7       W P                  V&   K:  	  R# )KSet log label for level. Level can be a single level or an array
of levels.	min_level	max_levelN)
_getLevels_checkLogLevelr0   rY   rQ   r   r   labellevels   &&& r   r\   ZLogger.setInfoLogLabels  sC     'Et}}U!&KK r
   c                s    V P                  V^R7      pV F8  pV P                  WP                  V P                  R7       W P                  V&   K:  	  R# )ry   r   rz   N)r}   r~   r-   r[   rR   r   r   r   r_   ZLogger.setDebugLogLabel{  sI     3Et~~V',e$ r
   Nc                .    V P                  WW4^ R7       R# )zSet info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_setLoggingr   rm   ri   r   fmtr   r   rd   ZLogger.setInfoLogging       	a@r
   c                .    V P                  WW4^R7       R# )zSet debug log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   r   r   re   ZLogger.setDebugLogging  r   r
   c                r   )zAdd info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_addLoggingr   r   r   addInfoLoggingZLogger.addInfoLogging  r   r
   c                r   )zAdd debg log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   r   r   addDebugLoggingZLogger.addDebugLogging  r   r
   c                r   )zDelete info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_delLoggingr   r   r   delInfoLoggingZLogger.delInfoLogging  r   r
   c                r   )zDelete debug log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   r   r   delDebugLoggingZLogger.delDebugLogging  r   r
   c                s(    V P                  V^ R7      # )zDIs there currently any info logging for this log level (and
domain)?r   _isLoggingHerer   r   rn   r   isInfoLoggingHereZLogger.isInfoLoggingHere       ""51"55r
   c                s(    V P                  V^R7      # )zEIs there currently any debug logging for this log level (and
domain)?r   r   r   rn   r   isDebugLoggingHereZLogger.isDebugLoggingHere  r   r
   c                t    V P                  V4       ^ VR&   V P                  ! V P                  V.VO5/ VB  R# )zFatal error log.r   N)_checkKWargs_logr0   r   rO   rA   rB      &&*,r   fatalZLogger.fatal  6    &!z		$**g777r
   c                r   )z
Error log.r   N)r   r   r/   r   r   r   errorZLogger.error  r   r
   c                r   )zWarning log.r   N)r   r   r.   r   r   r   warningZLogger.warning  s6    &!z		$,,9$9&9r
   c                s    V P                  V^V P                  R7       V P                  V4       ^ VR&   V P                  ! WP                  ,           V.VO5/ VB  R# )zxInformation log using info level [1..info_max].
There are additional infox functions according to info_max from
__init__rz   r   N)r~   rY   r   r   rX   r   r   rO   rA   rB      &&&*,r   r>   ZLogger.info  sT     	EQ$--H&!z		%,,&A$A&Ar
   c                s    V P                  V^V P                  R7       V P                  V4       ^VR&   V P                  ! W.VO5/ VB  R# )zvDebug log using debug level [1..debug_max].
There are additional debugx functions according to debug_max
from __init__rz   r   N)r~   r[   r   r   r   r   r   rK   ZLogger.debug  sK     	EQ$..I&!z		%24262r
   c                sj    V P                  V P                  \        P                  ! 4       . / R 7       R# ))rA   rB   N)r   r]   	tracebackZ
format_excr   r   r   	exceptionZLogger.exception  s#    		$..)"6"6"8r"	Mr
   c                sF    W8  g   W8  d   \        R WV3,          4      hR# )z*Level %d out of range, should be [%d..%d].NrW   )r   r   r{   r|   s   &&&&r   r~   ZLogger._checkLogLevel  s/     1<Y/0  !2r
   c                sz    V'       g   R # VP                  4        F  pVR9  g   K  \        RV,          4      h	  R # )Nz0Key '%s' is not allowed as argument for logging.)nlr   nofmt)ZkeysrW   )r   rB   Zkeys   && r   r   ZLogger._checkKWargs  s6    ;;=C00 FL  !r
   c                sH    V'       d   VR 8X  d   \        RV,          4      hR# )r;   zDomain '%s' is not valid.Nr   rl   rn   r   rj   ZLogger._checkDomain  s!    286ABB &r
   c                s   WP                   8w  d   \        V\        4      '       g   \        V\        4      '       d   TpMV.pV FR  pV'       d!   V P	                  V^V P
                  R7       K+  V P	                  WP                  V P                  R7       KT  	  V# V'       d1   \        V P                  V P
                  4       Uu. uF  qDNK  	  ppV# \        V P                  V P                  4       Uu. uF  qDNK  	  ppV# u upi u upi )zGenerate log level array.rz   )
ALL
isinstancelisttupler~   r[   r0   rY   r^   ZDEBUG1)r   r   r   r   rf   rg   r   r}   ZLogger._getLevels  s    HH%&&*UE*B*B''dnn'U''t}} ( 	   	 %*4;;%GH%G!%GH  &+4::t}}%EF%E!%EF IFs   
D7
D
c                s   \        V\        4      '       g   \        V\        4      '       d   TpMV.pV FI  p\        VP                  \
        4      '       d   K%  \        RVP                  P                  ,          4      h	  V# )zGenerate target array.z '%s' is no valid logging target.)r   r   r   Z
issubclass	__class__r   rW   r   )r   ri   targetsZ_targets   &&  r   _getTargetsZLogger._getTargets  sl    fd##z&%'@'@GhGGg//;; 69J9J9S9SS  
 r
   c                s   V'       d/   V P                   pV P                  p^V P                  ^,           3pM7V P                  pV P                  pV P
                  V P                  ^,           3p\        V4      ^ 8  d   VP                  4        \        V^ ,          V^,          4       FG  pWS9  d   K  W5,           F0  w  p pWb9  g   K  VP                  V. 4      P                  V4       K2  	  KI  	  R# )z#Generate dict with domain by level.N)rV   rT   r[   rU   rS   r0   rY   r1   Zclearr^   
setdefaultappend)r   r   rU   rS   Z_ranger   rm   rh   s   &&      r   _genDomainsZLogger._genDomains  s     **H**H!+,F}}H}}Hjj$--!"34Fx=1NN6!9fQi0E$(0$u)''r299&A )8 1r
   c                s   V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F  pV F
  pWV3.W&   K  	  K  	  V P                  V4       R # r   )rj   r}   r   rT   rS   r   	r   rm   ri   r   r   r   r   r   rS   	   &&&&&&   r   r   ZLogger._setLogging(  sx    &!1""6***H}}HE!$*C#8"9 "  	"r
   c                s:   V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F/  pV F&  pVP                  V. 4      P                  WV34       K(  	  K1  	  V P                  V4       R # r   )rj   r}   r   rT   rS   r   r   r   r   r   r   r   ZLogger._addLogging7  s    &!1""6***H}}HE!##E2.55vs6KL "  	"r
   c           	     s   V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F  p	V F  pW9  d   K  WV3W,          9   d4   W,          P                  WV34       \        W,          4      ^ 8X  d   W KM  W0P                  8w  g   K_  \        RWVP                  P                  V3,          4      h	  K  	  V P                  V4       R# )r    zENo matching logging for level %d, domain %s, target %s and format %s.N)rj   r}   r   rT   rS   Zremover1   r   rW   r   r   r   )
r   rm   ri   r   r   r   r   r   rS   rM   s
   &&&&&&    r   r   ZLogger._delLoggingF  s    &!1""6***H}}HF!)C(H,<<$++VS,AB8+,1$, HH$$H!6+;+;+D+DcJK  "  	"r
   c                sN   V P                  W4      pV'       g   R # VR,          R,           pV'       d   V P                  pMV P                  pWQ,           FL  w  p pVR8X  g>   VP                  V4      '       g'   \        P
                  ! VR,          V4      '       g   KK   R# 	  R # )Frm   .rL   T)_genDictrT   rS   r7   fnmatchfnmatchcase)r   r   r   _dictpoint_domainrS   rm   rh   s   &&&     r   r   ZLogger._isLoggingHerea  s    e.X,**H}}H %-OO FE5#**622&&uX?? %4 r
   c                s   VP                   P                  ^ 8  dq   VP                   P                  ^ ,          pW!P                  9   dD   VP                  V,          pV P	                  VP
                  VP                   4      pV'       d   V# \        P                  ! VP                   4      pVP                   pVP                  VP                  9   d\   \        VP                  VP                  ,          R4      '       d/   VP                  VP                  ,          P                  V8X  d   R# VP                  P                  4        F  w  rt\        V\        P                  4      '       g   K'  \        WFP                  4      '       g   KD  \!        WFP                  4      p\        V\        P"                  4      '       g   K{  VP                  V8X  g   K  Vu # 	  R# )z5Function to get calling class. Returns class or None.Z	func_codeN)f_codeZco_argcountZco_varnamesZf_locals
_getClass2r   inspectZ	getmoduleco_name__dict__Zhasattr__code__Zitemsr   typesZ	ClassTypeZgetattrFunctionType)	r   ZframeZselfnameZ_selfobjmodulecoderh   values	   &&       r   	_getClassZLogger._getClassw  s;    <<##a'||//2H>>)x0ooeoou||DJ""5<<0|| <<6??*5{CCOODLL1::dB !////1JE#u//3--#C6E!%););<< >>T1#&J 2 r
   c                s   VP                   P                  4        F:  p\        V\        P                  4      '       g   K%  VP
                  V8X  g   K8  Vu # 	  VP                   F   pV P                  WB4      pV'       g   K  Vu # 	  R# )z>Internal function to get calling class. Returns class or None.N)r   Zvaluesr   r   r   r   Z	__bases__r   )r   r   r   r   ZbaseZ_objs   &&&   r   r   ZLogger._getClass2  sj    \\((*E%!3!344>>T)J +
 MMD??4.Dt " r
   c                sv   ^ pRV9   d
   VR,          p^pRV9   d
   VR,          p^ pRV9   d
   VR,          pV P                  W4      pV'       g   R# \        V4      ^8  d   W#,          VR&   M'\        V4      ^8X  d   W#^ ,          ,          VR&   MW(R&   VR,          R,           p	V'       d   V P                  p
MV P                  p
. pW,           F  w  rpW9   d   K  VR8X  gE   V	P	                  VR,           4      '       g'   \
        P                  ! VR,          V4      '       g   KY  V'       g   V P                  pR	V9   d
   VR	,          pV'       d   VP                  VR,          WV4       MVP                  W(,          WV4       V'       d   VP                  R
WV4       VP                  V4       K  	  R# )r    r   r   r   Nr@   rm   r   rL   r   r,   )
r   r1   rT   rS   r7   r   r   rO   r   r   )r   r   rO   rA   rB   r   r   r   r   r   rS   Zused_targetsrm   ri   s   &&&*,         r   r   ZLogger._log  ss   j)H6>Bf7OEe.t9q=&~E)Y!^&a0E)&)X,**H}}H'/#FG%#**6C<88&&uX??"llGF?$UmGLLy!15ILL%xHLLuH=##F+% (7r
   c                s0   . pRpV'       d&   V P                   pV P                  pV P                  pM$V P                  pV P                  pV P
                  pV FO  pVR8X  d&   WX,          V8  d   Rp\        V4      ^ 8  d   . p M&K/  WX,          V8  g   K>  VP                  V4       KQ  	  V'       g   \        V4      ^8  d   R# W9  d   R# \        P                  ! 4       p	V	'       dC   V	P                  '       d1   V	P                  R,          V P                  8X  d   V	P                  p	KJ  V	'       g   \        R4      hV	P                  R,          p
V
R,           pV F  pVP                  V4      '       g   K  . p M	  V	P                  p\        V
4      pWa,           Fr  pVP!                  R4      pV^ 8X  d   K  V^ 8  d   VRV pMTpV\        V4      8  d   V
P                  V4      '       g    R# KX  VP                  V
4      '       d   Kq   R# 	  RpW9   d	   Wq,          pR	VP"                  R
V	P$                  RV
RRRVP&                  RRRVRVR\(        P*                  ! V P,                  \(        P.                  ! 4       4      /	pVR,          R8X  d   RVR&   RpWa,           F  pVR8X  d   K  Rp M	  V P0                  P!                  R4      ^ 8  g9   V P0                  P!                  R4      ^ 8  g   V'       g   \        V4      ^ 8  d)   V P3                  V	4      pV'       d   VP4                  VR&   RVR,          ,           VR&   VR,          R8w  d$   VR;;,          RVR,          ,           ,          uu&   VR,          R8w  d$   VR;;,          RVR,          ,           ,          uu&   \        V4      ^8  d   V# VR,          R,           pV FB  pVP                  V4      '       g'   \6        P8                  ! VR,          V4      '       g   K@  Vu # 	  R# )zInternal function.FrL   TNr   z Frame information not available.r   r;   ZfileZliner   ZclassZfunctionrm   r   r   ZdateZ?z	%(domain)z%(class))rN   rV   rR   rM   rU   rQ   r1   r   r   ZcurrentframeZf_backZ	f_globalsr   rW   r7   r   ZfindZco_filenameZf_linenor   timeZstrftimerP   Z	localtimerO   r   r   r   r   )r   r   r   Zcheck_domainsZsimple_matchr   rU   rQ   rm   ZfZmodule_nameZpoint_moduleZcoZ_lenrf   ZdZ	level_strZdomain_neededr   r   s   &&&                 r   r   ZLogger._genDict  s   %%E**H&&FKKE}}H[[F F}=E)#'L=)A-(*	 * =E)!((0  M 2Q 6   " AHHHZ!8DOO!KA?@@ kk*- #S(#F&&v.. "	 $ XX ;ooFC AAvQ2AJs1v~"--a00 1 ||K00 &  	?IBNNAJJkR

bYUDMM$"3"3T^^5EF

 # "E* ooF} M & LLk*a/||  ,1=!A%..#C!$g uX.h>R(OsU7^33O"(OsU:%666O}!LX,#F&&v..'2E2Eh3 3 	 $ r
   )r[   rY   rZ   rX   rP   rV   rR   rN   rT   rU   rO   rQ   rM   rS   iiiii)i   i
   )rL   r   );r   r   r   r   r   r   rk   r0   r]   r/   r.   r!   r$   r'   r(   r)   r*   r	   r   ro   r`   rq   ra   rt   rb   rx   rc   r\   r_   rd   re   r   r   r   r   r   r   r   r   r   r>   rK   r   r~   r   rj   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r:   r:      se    FP CGEIEG \F\F\FD
L$:!$'- 47D A 58T A 47D A 58T A 47D A 58T A6
688:B3N
C*B, 14 # 14 # 14 #6, D3,lA Ar
   r:   )r#   r   r   r   r   r*   r   r9   Zos.pathr+   r   r!   r'   r)   r3   r:   Zlogr2   r
   r   <module>r      s~             	K K( * ( (\%i %V{
 {
B h0r
   