4040 https://github.com/adafruit/circuitpython/releases
4141
4242"""
43- #pylint:disable=redefined-outer-name
43+ #pylint:disable=redefined-outer-name,consider-using-enumerate,no-self-use
4444
4545# imports
4646
4949
5050import time
5151
52- levels = [(0 , 'NOTSET' ),
52+ LEVELS = [(00 , 'NOTSET' ),
5353 (10 , 'DEBUG' ),
5454 (20 , 'INFO' ),
5555 (30 , 'WARNING' ),
5656 (40 , 'ERROR' ),
5757 (50 , 'CRITICAL' )]
5858
59- for value , name in levels :
59+ for value , name in LEVELS :
6060 globals ()[name ] = value
6161
6262def level_for (value ):
63- for i in range (len (levels )):
64- if value < levels [i ][0 ]:
65- return levels [i - 1 ][1 ]
66- return levels [0 ][1 ]
63+ """Convert a numberic level to the most appropriate name.
64+ value -- a numeric level
65+ """
66+ for i in range (len (LEVELS )):
67+ if value < LEVELS [i ][0 ]:
68+ return LEVELS [i - 1 ][1 ]
69+ return LEVELS [0 ][1 ]
6770
6871class LoggingHandler (object ):
72+ """Abstract logging message handler."""
6973
7074 def format (self , level , msg ):
75+ """Generate a timestamped message.
76+ level -- the logging level
77+ msg -- the message to log
78+ """
7179 now = time .localtime ()
7280 time_vals = (now .tm_year , now .tm_mon , now .tm_mday ,
7381 now .tm_hour , now .tm_min , now .tm_sec )
7482 timestamp = '%4d/%02d/%02d %02d:%02d:%02d' % time_vals
7583 return '{0}: {1} - {2}' .format (timestamp , level_for (level ), msg )
7684
7785 def emit (self , level , msg ):
86+ """Send a message where it should go.
87+ Place holder for subclass implementations.
88+ """
7889 raise NotImplementedError ()
7990
91+
8092class PrintHandler (LoggingHandler ):
93+ """Send logging messages to the console by using print."""
8194
8295 def emit (self , level , msg ):
96+ """Send a message to teh console.
97+ level -- the logging level
98+ msg -- the message to log
99+ """
83100 print (self .format (level , msg ))
84101
85102
86103# The level module-global variables get created when loaded
87104#pylint:disable=undefined-variable
88105
89106class Logger (object ):
107+ """Provide a logging api."""
90108
91109 def __init__ (self , handler = None ):
110+ """Create an instance.
111+ handler -- what to use to output messages. Defaults to a PrintHandler.
112+ """
92113 self ._level = NOTSET
93114 if handler is None :
94115 self ._handler = PrintHandler ()
@@ -97,27 +118,54 @@ def __init__(self, handler=None):
97118
98119 @property
99120 def level (self ):
121+ """Get the level."""
100122 return self ._level
101123
102124 @level .setter
103125 def level (self , value ):
126+ """Set the level."""
104127 self ._level = value
105128
106129 def log (self , level , format_string , * args ):
130+ """Log a message.
131+ level -- the priority level at which to log
132+ format_string -- the core mesage string with embedded formatting directives
133+ args -- arguments format_string.format(), can be empty
134+ """
107135 if self ._level != NOTSET and level >= self ._level :
108136 self ._handler .emit (level , format_string .format (* args ))
109137
110138 def debug (self , format_string , * args ):
139+ """Log a debug message.
140+ format_string -- the core mesage string with embedded formatting directives
141+ args -- arguments format_string.format(), can be empty
142+ """
111143 self .log (DEBUG , format_string , * args )
112144
113145 def info (self , format_string , * args ):
146+ """Log a info message.
147+ format_string -- the core mesage string with embedded formatting directives
148+ args -- arguments format_string.format(), can be empty
149+ """
114150 self .log (INFO , format_string , * args )
115151
116152 def warning (self , format_string , * args ):
153+ """Log a warning message.
154+ format_string -- the core mesage string with embedded formatting directives
155+ args -- arguments format_string.format(), can be empty
156+ """
117157 self .log (WARNING , format_string , * args )
118158
119159 def error (self , format_string , * args ):
160+ """Log a error message.
161+ format_string -- the core mesage string with embedded formatting directives
162+ args -- arguments format_string.format(), can be empty
163+ """
120164 self .log (ERROR , format_string , * args )
121165
122166 def critical (self , format_string , * args ):
167+ """Log a critical message.
168+ format_string -- the core mesage string with embedded formatting directives
169+ args -- arguments format_string.format(), can be empty
170+ """
123171 self .log (CRITICAL , format_string , * args )
0 commit comments