def _run_single_job_with_ui_loop(self, job, job_state, ui):
     comments = ""
     while True:
         if job.plugin in ('user-interact', 'user-interact-verify',
                           'user-verify', 'manual'):
             ui.notify_about_purpose(job)
             if (self.is_interactive
                     and job.plugin in ('user-interact',
                                        'user-interact-verify', 'manual')):
                 ui.notify_about_steps(job)
                 if job.plugin == 'manual':
                     cmd = 'run'
                 else:
                     cmd = ui.wait_for_interaction_prompt(job)
                 if cmd == 'run' or cmd is None:
                     result_builder = self.runner.run_job(
                         job, job_state, self.config,
                         ui).get_builder(comments=comments)
                 elif cmd == 'comment':
                     new_comment = input(
                         self.C.BLUE(
                             _('Please enter your comments:') + '\n'))
                     if new_comment:
                         comments += new_comment + '\n'
                     continue
                 elif cmd == 'skip':
                     result_builder = JobResultBuilder(
                         outcome=IJobResult.OUTCOME_SKIP,
                         comments=_("Explicitly skipped before"
                                    " execution"))
                     if comments != "":
                         result_builder.comments = comments
                     break
                 elif cmd == 'quit':
                     raise SystemExit()
             else:
                 result_builder = self.runner.run_job(
                     job, job_state, self.config, ui).get_builder()
         else:
             if 'noreturn' in job.get_flag_set():
                 ui.noreturn_job()
             result_builder = self.runner.run_job(job, job_state,
                                                  self.config,
                                                  ui).get_builder()
         if (self.is_interactive and result_builder.outcome
                 == IJobResult.OUTCOME_UNDECIDED):
             try:
                 if comments != "":
                     result_builder.comments = comments
                 ui.notify_about_verification(job)
                 self._interaction_callback(self.runner, job,
                                            result_builder, self.config)
             except ReRunJob:
                 continue
         break
     return result_builder
예제 #2
0
 def skipped_builder(*args, **kwargs):
     result_builder = JobResultBuilder(
         outcome=IJobResult.OUTCOME_SKIP,
         comments=_("Explicitly skipped before execution"))
     if self._current_comments != "":
         result_builder.comments = self._current_comments
     return result_builder
 def test_smoke_disk(self):
     builder = JobResultBuilder()
     builder.comments = 'it works'
     builder.execution_duration = 0.1
     builder.io_log_filename = 'log'
     builder.outcome = 'pass'
     builder.return_code = 0
     result = builder.get_result()
     self.assertEqual(result.comments, "it works")
     self.assertEqual(result.execution_duration, 0.1)
     self.assertEqual(result.io_log_filename, 'log')
     self.assertEqual(result.outcome, "pass")
     self.assertEqual(result.return_code, 0)
     # Sanity check: the builder we can re-create is identical
     builder2 = result.get_builder()
     self.assertEqual(builder, builder2)
 def test_smoke_memory(self):
     builder = JobResultBuilder()
     builder.comments = 'it works'
     builder.execution_duration = 0.1
     builder.io_log = [(0, 'stdout', b'ok\n')]
     builder.outcome = 'pass'
     builder.return_code = 0
     result = builder.get_result()
     self.assertEqual(result.comments, "it works")
     self.assertEqual(result.execution_duration, 0.1)
     self.assertEqual(
         result.io_log,
         (IOLogRecord(delay=0, stream_name='stdout', data=b'ok\n'), ))
     self.assertEqual(result.outcome, "pass")
     self.assertEqual(result.return_code, 0)
     # Sanity check: the builder we can re-create is identical
     builder2 = result.get_builder()
     self.assertEqual(builder, builder2)
예제 #5
0
 def _run_single_job_with_ui_loop(self, job, ui):
     print(self.C.header(job.tr_summary(), fill='-'))
     print(_("ID: {0}").format(job.id))
     print(
         _("Category: {0}").format(
             self.sa.get_job_state(job.id).effective_category_id))
     comments = ""
     while True:
         if job.plugin in ('user-interact', 'user-interact-verify',
                           'user-verify', 'manual'):
             job_state = self.sa.get_job_state(job.id)
             if (not self.is_interactive
                     and job.plugin in ('user-interact',
                                        'user-interact-verify', 'manual')):
                 result_builder = JobResultBuilder(
                     outcome=IJobResult.OUTCOME_SKIP,
                     comments=_("Trying to run interactive job in a silent"
                                " session"))
                 return result_builder
             if job_state.can_start():
                 ui.notify_about_purpose(job)
             if (self.is_interactive
                     and job.plugin in ('user-interact',
                                        'user-interact-verify', 'manual')):
                 if job_state.can_start():
                     ui.notify_about_steps(job)
                 if job.plugin == 'manual':
                     cmd = 'run'
                 else:
                     if job_state.can_start():
                         cmd = ui.wait_for_interaction_prompt(job)
                     else:
                         # 'running' the job will make it marked as skipped
                         # because of the failed dependency
                         cmd = 'run'
                 if cmd == 'run' or cmd is None:
                     result_builder = self.sa.run_job(job.id, ui, False)
                 elif cmd == 'comment':
                     new_comment = input(
                         self.C.BLUE(
                             _('Please enter your comments:') + '\n'))
                     if new_comment:
                         comments += new_comment + '\n'
                     continue
                 elif cmd == 'skip':
                     result_builder = JobResultBuilder(
                         outcome=IJobResult.OUTCOME_SKIP,
                         comments=_("Explicitly skipped before"
                                    " execution"))
                     if comments != "":
                         result_builder.comments = comments
                     break
                 elif cmd == 'quit':
                     raise SystemExit()
             else:
                 result_builder = self.sa.run_job(job.id, ui, False)
         else:
             if 'noreturn' in job.get_flag_set():
                 ui.noreturn_job()
             result_builder = self.sa.run_job(job.id, ui, False)
         if (self.is_interactive and result_builder.outcome
                 == IJobResult.OUTCOME_UNDECIDED):
             try:
                 if comments != "":
                     result_builder.comments = comments
                 ui.notify_about_verification(job)
                 self._interaction_callback(job, result_builder)
             except ReRunJob:
                 self.sa.use_job_result(job.id, result_builder.get_result())
                 continue
         break
     return result_builder