9
9
from hwtest.contrib.persist import Persist
11
11
from hwtest import VERSION
12
from hwtest.config import Config
13
13
from hwtest.plugin import PluginManager
14
14
from hwtest.reactor import Reactor
15
from hwtest.constants import HWTEST_DIR
16
15
from hwtest.report import Report
19
18
class Application(object):
21
def __init__(self, reactor, data_path, log_handlers=None, log_level=None):
20
def __init__(self, config_file, data_dir, log_handlers=None, log_level=None):
24
23
format = ("%(asctime)s %(levelname)-8s %(message)s")
32
31
logging.disable(logging.CRITICAL)
37
self.reactor = reactor
34
self.reactor = Reactor()
40
persist_filename = os.path.join(data_path, "data.bpickle")
37
persist_filename = os.path.join(data_dir, "data.bpickle")
41
38
self.persist = self._get_persist(persist_filename)
41
self.config = Config()
42
if os.path.exists(config_file):
43
self.config.load_path(config_file)
44
46
self.report = Report()
46
48
# Plugin manager setup
47
49
self.plugin_manager = PluginManager(self.reactor, self.report,
48
self.persist, persist_filename)
50
self.config, self.persist, persist_filename)
50
52
def _get_persist(self, persist_filename):
51
53
persist = Persist()
71
76
application_factory = Application
73
def make_parser(self):
78
def parse_options(self, args):
74
79
parser = OptionParser(version=VERSION)
75
parser.add_option("-d", "--data-path", metavar="PATH",
80
parser.add_option("-c", "--config-file", metavar="PATH",
81
default="/etc/default/hwtest.conf",
82
help="The file name of the configuration.")
83
parser.add_option("-d", "--data-dir", metavar="PATH",
76
84
default="~/.hwtest",
77
help="The directory to store data files in.")
85
help="The directory to store data files.")
78
86
parser.add_option("-l", "--log", metavar="FILE",
79
87
help="The file to write the log to.")
80
88
parser.add_option("--log-level",
81
89
default="critical",
82
90
help="One of debug, info, warning, error or critical.")
91
return parser.parse_args(args)[0]
85
93
def create_application(self, args=sys.argv):
86
parser = self.make_parser()
87
options = parser.parse_args(args)[0]
94
options = self.parse_options(args)
89
96
log_level = logging.getLevelName(options.log_level.upper())
93
100
log_filename = options.log
94
101
log_handlers.append(FileHandler(log_filename))
98
data_path = os.path.expanduser(options.data_path)
100
return self.application_factory(reactor,
101
data_path=data_path, log_handlers=log_handlers,
103
data_dir = os.path.expanduser(options.data_dir)
104
config_file = os.path.expanduser(options.config_file)
106
return self.application_factory(
107
config_file=config_file, data_dir=data_dir,
108
log_handlers=log_handlers, log_level=log_level)