2
# This file is part of Checkbox.
4
# Copyright 2008 Canonical Ltd.
6
# Checkbox is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
11
# Checkbox is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
19
from checkbox.job import Job, FAIL, UNINITIATED
20
from checkbox.plugin import Plugin
22
from gettext import gettext as _
25
class AttachmentInfo(Plugin):
27
def register(self, manager):
28
super(AttachmentInfo, self).register(manager)
29
self._attachments = []
32
("report", self.report),
33
("report-attachment", self.report_attachment)]:
34
self._manager.reactor.call_on(rt, rh)
36
self._manager.reactor.call_on("prompt-test", self.prompt_test, 100)
38
def prompt_test(self, interface, test):
39
if test.get("status", UNINITIATED) != FAIL:
43
for attachment in self._attachments:
44
if test["suite"] == attachment.get("suite", None) and \
45
test["name"] in attachment.get("depends", []):
46
job = Job(attachment["command"], attachment.get("environ"),
47
attachment.get("timeout"))
48
interface.show_wait(_("Running attachment..."), job.execute)
49
attachment = dict(attachment)
50
attachment["test"] = test["name"]
51
attachment["suite"] = test["suite"]
52
attachment["data"] = job.data
53
attachment["duration"] = job.duration
54
attachment["status"] = job.status
55
attachments.append(attachment)
58
self._manager.reactor.fire("report-attachments", attachments)
62
for attachment in self._attachments:
63
if not attachment.get("depends", []):
64
job = Job(attachment["command"], attachment.get("environ"),
65
attachment.get("timeout"))
67
attachment = dict(attachment)
68
attachment["data"] = job.data
69
attachment["duration"] = job.duration
70
attachment["status"] = job.status
71
attachments.append(attachment)
74
self._manager.reactor.fire("report-attachments", attachments)
76
def report_attachment(self, attachment):
77
if "command" in attachment:
78
self._attachments.append(attachment)
81
factory = AttachmentInfo