40
40
https://github.com/adafruit/circuitpython/releases
41
41
42
42
"""
43
- #pylint:disable=redefined-outer-name
43
+ #pylint:disable=redefined-outer-name,consider-using-enumerate,no-self-use
44
44
45
45
# imports
46
46
49
49
50
50
import time
51
51
52
- levels = [(0 , 'NOTSET' ),
52
+ LEVELS = [(00 , 'NOTSET' ),
53
53
(10 , 'DEBUG' ),
54
54
(20 , 'INFO' ),
55
55
(30 , 'WARNING' ),
56
56
(40 , 'ERROR' ),
57
57
(50 , 'CRITICAL' )]
58
58
59
- for value , name in levels :
59
+ for value , name in LEVELS :
60
60
globals ()[name ] = value
61
61
62
62
def 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 ]
67
70
68
71
class LoggingHandler (object ):
72
+ """Abstract logging message handler."""
69
73
70
74
def format (self , level , msg ):
75
+ """Generate a timestamped message.
76
+ level -- the logging level
77
+ msg -- the message to log
78
+ """
71
79
now = time .localtime ()
72
80
time_vals = (now .tm_year , now .tm_mon , now .tm_mday ,
73
81
now .tm_hour , now .tm_min , now .tm_sec )
74
82
timestamp = '%4d/%02d/%02d %02d:%02d:%02d' % time_vals
75
83
return '{0}: {1} - {2}' .format (timestamp , level_for (level ), msg )
76
84
77
85
def emit (self , level , msg ):
86
+ """Send a message where it should go.
87
+ Place holder for subclass implementations.
88
+ """
78
89
raise NotImplementedError ()
79
90
91
+
80
92
class PrintHandler (LoggingHandler ):
93
+ """Send logging messages to the console by using print."""
81
94
82
95
def emit (self , level , msg ):
96
+ """Send a message to teh console.
97
+ level -- the logging level
98
+ msg -- the message to log
99
+ """
83
100
print (self .format (level , msg ))
84
101
85
102
86
103
# The level module-global variables get created when loaded
87
104
#pylint:disable=undefined-variable
88
105
89
106
class Logger (object ):
107
+ """Provide a logging api."""
90
108
91
109
def __init__ (self , handler = None ):
110
+ """Create an instance.
111
+ handler -- what to use to output messages. Defaults to a PrintHandler.
112
+ """
92
113
self ._level = NOTSET
93
114
if handler is None :
94
115
self ._handler = PrintHandler ()
@@ -97,27 +118,54 @@ def __init__(self, handler=None):
97
118
98
119
@property
99
120
def level (self ):
121
+ """Get the level."""
100
122
return self ._level
101
123
102
124
@level .setter
103
125
def level (self , value ):
126
+ """Set the level."""
104
127
self ._level = value
105
128
106
129
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
+ """
107
135
if self ._level != NOTSET and level >= self ._level :
108
136
self ._handler .emit (level , format_string .format (* args ))
109
137
110
138
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
+ """
111
143
self .log (DEBUG , format_string , * args )
112
144
113
145
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
+ """
114
150
self .log (INFO , format_string , * args )
115
151
116
152
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
+ """
117
157
self .log (WARNING , format_string , * args )
118
158
119
159
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
+ """
120
164
self .log (ERROR , format_string , * args )
121
165
122
166
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
+ """
123
171
self .log (CRITICAL , format_string , * args )
0 commit comments