~kelemeng/checkbox/bug868571

« back to all changes in this revision

Viewing changes to hwtest/application.py

  • Committer: Marc Tardif
  • Date: 2007-10-04 23:12:10 UTC
  • Revision ID: marc.tardif@canonical.com-20071004231210-unxckndkgndxfdp6
Refactored questions to use templates and scripts which fixes bug #149195.

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
from hwtest.contrib.persist import Persist
10
10
 
11
11
from hwtest import VERSION
12
 
 
 
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
17
16
 
18
17
 
19
18
class Application(object):
20
19
 
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):
22
21
 
23
22
        # Logging setup
24
23
        format = ("%(asctime)s %(levelname)-8s %(message)s")
32
31
            logging.disable(logging.CRITICAL)
33
32
 
34
33
        # Reactor setup
35
 
        if reactor is None:
36
 
            reactor = Reactor()
37
 
        self.reactor = reactor
 
34
        self.reactor = Reactor()
38
35
 
39
36
        # Persist setup
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)
42
39
 
 
40
        # Config setup
 
41
        self.config = Config()
 
42
        if os.path.exists(config_file):
 
43
            self.config.load_path(config_file)
 
44
 
43
45
        # Report setup
44
46
        self.report = Report()
45
47
 
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)
49
51
 
50
52
    def _get_persist(self, persist_filename):
51
53
        persist = Persist()
55
57
        persist.save(persist_filename)
56
58
        return persist
57
59
 
 
60
    def load_plugins(self, directory):
 
61
        self.plugin_manager.load_directory(directory)
 
62
 
58
63
    def run(self):
59
64
        try:
60
65
            bpickle_dbus.install()
70
75
 
71
76
    application_factory = Application
72
77
 
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.")
83
 
        return parser
 
91
        return parser.parse_args(args)[0]
84
92
 
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)
88
95
 
89
96
        log_level = logging.getLevelName(options.log_level.upper())
90
97
        log_handlers = []
93
100
            log_filename = options.log
94
101
            log_handlers.append(FileHandler(log_filename))
95
102
 
96
 
        reactor = Reactor()
97
 
 
98
 
        data_path = os.path.expanduser(options.data_path)
99
 
 
100
 
        return self.application_factory(reactor,
101
 
            data_path=data_path, log_handlers=log_handlers,
102
 
            log_level=log_level)
 
103
        data_dir = os.path.expanduser(options.data_dir)
 
104
        config_file = os.path.expanduser(options.config_file)
 
105
 
 
106
        return self.application_factory(
 
107
            config_file=config_file, data_dir=data_dir,
 
108
            log_handlers=log_handlers, log_level=log_level)