blob: 7bb40e6786a1dce27941ba1603d71da7d7c5cba2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# Copyright 2012 Linaro.
"""Helper class for creating new scripts.
It pre-defines a logger using the script_name (passed through the constructor)
and allows different verbosity levels.
Overload the work() method to define the main work to be done by the script.
You can use the logger by accessing instance.logger attribute.
You can use the parser (eg. to add another argument) by accessing
instance.argument_parser attribute.
Parsed arguments are available to your work() method in instance.arguments.
"""
import argparse
import logging
class LinaroScript(object):
def __init__(self, script_name, description=None):
self.script_name = script_name
self.description = description
self.argument_parser = argparse.ArgumentParser(
description=self.description)
self.setup_parser()
def work(self):
"""The main body of the script. Overload when subclassing."""
raise NotImplementedError
def run(self):
self.arguments = self.argument_parser.parse_args()
logging_level = self.get_logging_level_from_verbosity(
self.arguments.verbose)
self.logger = logging.getLogger(self.script_name)
self.logger.setLevel(logging_level)
formatter = logging.Formatter(
fmt='%(asctime)s %(levelname)s: %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
self.logger.addHandler(handler)
self.work()
def setup_parser(self):
self.argument_parser.add_argument(
"-v", "--verbose", action='count',
help=("Increase the output verbosity. "
"Can be used multiple times"))
def get_logging_level_from_verbosity(self, verbosity):
"""Return a logging level based on the number of -v arguments."""
if verbosity == 0:
logging_level = logging.ERROR
elif verbosity == 1:
logging_level = logging.WARNING
elif verbosity == 2:
logging_level = logging.INFO
elif verbosity >= 3:
logging_level = logging.DEBUG
else:
logging_level = logging.ERROR
return logging_level
|