Merge lp:~roadmr/checkbox/1172835-xml-exporter-comments-2 into lp:checkbox

Proposed by Daniel Manrique
Status: Merged
Approved by: Zygmunt Krynicki
Approved revision: 2094
Merged at revision: 2092
Proposed branch: lp:~roadmr/checkbox/1172835-xml-exporter-comments-2
Merge into: lp:checkbox
Diff against target: 118 lines (+38/-24)
3 files modified
plainbox/plainbox/impl/applogic.py (+33/-0)
plainbox/plainbox/impl/commands/sru.py (+4/-24)
plainbox/plainbox/impl/exporter/xml.py (+1/-0)
To merge this branch: bzr merge lp:~roadmr/checkbox/1172835-xml-exporter-comments-2
Reviewer Review Type Date Requested Status
Zygmunt Krynicki (community) Approve
Review via email: mp+161239@code.launchpad.net

Commit message

xml: Set OPTION_WITH_COMMENTS so they get exported. Actually set the comment when a job has OUTCOME_NOT_SUPPORTED.

Description of the change

xml: Set OPTION_WITH_COMMENTS so they get exported

I also stole a couple of commits from Zygmunt to actually set the comment when a job has OUTCOME_NOT_SUPPORTED.

To post a comment you must log in.
2092. By Zygmunt Krynicki

applogic: add run_job_if_possible

This function serves as a reusable coupling point for session, runner
config and job objects. Keeping it in the applogic module will simplify
maintaining consistent behavior of various plainbox and checkbox tools

Signed-off-by: Zygmunt Krynicki <email address hidden>

2093. By Zygmunt Krynicki

commands: sru: use run_job_if_possible, drop local equivalent

This patch drops the local implementation of run_job_if_possible and
reuses the common function from the applogic module

Signed-off-by: Zygmunt Krynicki <email address hidden>

2094. By Daniel Manrique

exporters: xml: Set OPTION_WITH_COMMENTS so they get exported

Revision history for this message
Zygmunt Krynicki (zyga) wrote :

Thanks, and sorry for all the shake up, +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plainbox/plainbox/impl/applogic.py'
2--- plainbox/plainbox/impl/applogic.py 2013-04-18 10:17:25 +0000
3+++ plainbox/plainbox/impl/applogic.py 2013-04-26 21:18:27 +0000
4@@ -31,6 +31,7 @@
5 import re
6
7 from plainbox.impl import config
8+from plainbox.impl.result import JobResult
9
10
11 class IJobQualifier(metaclass=ABCMeta):
12@@ -106,6 +107,38 @@
13 return [job for job in job_list if qualifier.designates(job)]
14
15
16+def run_job_if_possible(session, runner, config, job):
17+ """
18+ Coupling point for session, runner, config and job
19+
20+ :returns: (job_state, job_result)
21+ """
22+ job_state = session.job_state_map[job.name]
23+ if job_state.can_start():
24+ job_result = runner.run_job(job, config)
25+ else:
26+ # Set the outcome of jobs that cannot start to
27+ # OUTCOME_NOT_SUPPORTED _except_ if any of the inhibitors point to
28+ # a job with an OUTCOME_SKIP outcome, if that is the case mirror
29+ # that outcome. This makes 'skip' stronger than 'not-supported'
30+ outcome = JobResult.OUTCOME_NOT_SUPPORTED
31+ for inhibitor in job_state.readiness_inhibitor_list:
32+ if inhibitor.cause != inhibitor.FAILED_DEP:
33+ continue
34+ related_job_state = session.job_state_map[
35+ inhibitor.related_job.name]
36+ if related_job_state.result.outcome == JobResult.OUTCOME_SKIP:
37+ outcome = JobResult.OUTCOME_SKIP
38+ job_result = JobResult({
39+ 'job': job,
40+ 'outcome': outcome,
41+ 'comments': job_state.get_readiness_description()
42+ })
43+ assert job_result is not None
44+ session.update_job_result(job, job_result)
45+ return job_state, job_result
46+
47+
48 class PlainBoxConfig(config.Config):
49 """
50 Configuration for PlainBox itself
51
52=== modified file 'plainbox/plainbox/impl/commands/sru.py'
53--- plainbox/plainbox/impl/commands/sru.py 2013-04-26 15:29:16 +0000
54+++ plainbox/plainbox/impl/commands/sru.py 2013-04-26 21:18:27 +0000
55@@ -33,18 +33,18 @@
56 from requests.exceptions import ConnectionError, InvalidSchema, HTTPError
57
58 from plainbox.impl.applogic import get_matching_job_list
59+from plainbox.impl.applogic import run_job_if_possible
60 from plainbox.impl.checkbox import CheckBox, WhiteList
61 from plainbox.impl.commands import PlainBoxCommand
62+from plainbox.impl.commands.check_config import CheckConfigInvocation
63 from plainbox.impl.config import ValidationError, Unset
64 from plainbox.impl.depmgr import DependencyDuplicateError
65 from plainbox.impl.exporter import ByteStringStreamTranslator
66 from plainbox.impl.exporter.xml import XMLSessionStateExporter
67-from plainbox.impl.result import JobResult
68 from plainbox.impl.runner import JobRunner
69 from plainbox.impl.session import SessionState
70 from plainbox.impl.transport.certification import CertificationTransport
71 from plainbox.impl.transport.certification import InvalidSecureIDError
72-from plainbox.impl.commands.check_config import CheckConfigInvocation
73
74
75 logger = logging.getLogger("plainbox.commands.sru")
76@@ -178,28 +178,8 @@
77
78 def _run_single_job(self, job):
79 print("- {}:".format(job.name), end=' ')
80- job_state = self.session.job_state_map[job.name]
81- if job_state.can_start():
82- job_result = self.runner.run_job(job, self.config)
83- else:
84- # Set the outcome of jobs that cannot start to
85- # OUTCOME_NOT_SUPPORTED _except_ if any of the inhibitors point to
86- # a job with an OUTCOME_SKIP outcome, if that is the case mirror
87- # that outcome. This makes 'skip' stronger than 'not-supported'
88- outcome = JobResult.OUTCOME_NOT_SUPPORTED
89- for inhibitor in job_state.readiness_inhibitor_list:
90- if inhibitor.cause != inhibitor.FAILED_DEP:
91- continue
92- related_job_state = self.session.job_state_map[
93- inhibitor.related_job.name]
94- if related_job_state.result.outcome == JobResult.OUTCOME_SKIP:
95- outcome = JobResult.OUTCOME_SKIP
96- job_result = JobResult({
97- 'job': job,
98- 'outcome': outcome,
99- 'comments': job_state.get_readiness_description()
100- })
101- assert job_result is not None
102+ job_state, job_result = run_job_if_possible(
103+ self.session, self.runner, self.config, job)
104 print("{0}".format(job_result.outcome))
105 if job_result.comments is not None:
106 print("comments: {0}".format(job_result.comments))
107
108=== modified file 'plainbox/plainbox/impl/exporter/xml.py'
109--- plainbox/plainbox/impl/exporter/xml.py 2013-04-09 20:24:11 +0000
110+++ plainbox/plainbox/impl/exporter/xml.py 2013-04-26 21:18:27 +0000
111@@ -149,6 +149,7 @@
112 SessionStateExporterBase.OPTION_FLATTEN_IO_LOG,
113 SessionStateExporterBase.OPTION_WITH_JOB_DEFS,
114 SessionStateExporterBase.OPTION_WITH_RESOURCE_MAP,
115+ SessionStateExporterBase.OPTION_WITH_COMMENTS,
116 SessionStateExporterBase.OPTION_WITH_ATTACHMENTS)
117 # Generate a dummy system hash if needed
118 if system_id is None:

Subscribers

People subscribed via source and target branches