def test_enable_disable(self): """ should properly enable and disable redirection """ support.create_project(self, 'tonks') support.add_step(self) project = cd.project.get_internal_project() step = project.steps[0] redirection.enable(step) self.assertIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertIsInstance(sys.stderr, redirection.RedirectBuffer) redirection.disable(step) self.assertNotIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertNotIsInstance(sys.stderr, redirection.RedirectBuffer) self.assertEqual(sys.stdout, sys.__stdout__) self.assertEqual(sys.stderr, sys.__stderr__)
def test_restore(self): """ should restore from an enabled state """ support.create_project(self, 'percy') support.add_step(self) project = cd.project.get_internal_project() step = project.steps[0] redirection.enable(step) self.assertIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertIsInstance(sys.stderr, redirection.RedirectBuffer) redirection.restore_default_configuration() self.assertNotIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertNotIsInstance(sys.stderr, redirection.RedirectBuffer) self.assertEqual(sys.stdout, sys.__stdout__) self.assertEqual(sys.stderr, sys.__stderr__)
def test_enable_disable(self): """ should properly enable and disable redirection """ support.create_project(self, 'tonks') support.add_step(self) project = cd.project.internal_project step = project.steps[0] redirection.enable(step) self.assertIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertIsInstance(sys.stderr, redirection.RedirectBuffer) redirection.disable(step) self.assertNotIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertNotIsInstance(sys.stderr, redirection.RedirectBuffer) self.assertEqual(sys.stdout, sys.__stdout__) self.assertEqual(sys.stderr, sys.__stderr__)
def test_restore(self): """ should restore from an enabled state """ support.create_project(self, 'percy') support.add_step(self) project = cd.project.internal_project step = project.steps[0] redirection.enable(step) self.assertIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertIsInstance(sys.stderr, redirection.RedirectBuffer) redirection.restore_default_configuration() self.assertNotIsInstance(sys.stdout, redirection.RedirectBuffer) self.assertNotIsInstance(sys.stderr, redirection.RedirectBuffer) self.assertEqual(sys.stdout, sys.__stdout__) self.assertEqual(sys.stderr, sys.__stderr__)
def run_step( response: Response, project: Project, step: typing.Union[ProjectStep, str], force: bool = False ) -> bool: """ :param response: :param project: :param step: :param force: :return: """ step = get_step(project, step) if step is None: return False status = check_status(response, project, step, force) if status == ERROR_STATUS: return False step.error = None if status == SKIP_STATUS: return True os.chdir(os.path.dirname(step.source_path)) project.current_step = step step.report.clear() step.dom = None step.is_running = True step.progress_message = None step.progress = 0 # Set the top-level display and cache values to the current project values # before running the step for availability within the step scripts cauldron.shared = cauldron.project.shared redirection.enable(step) try: result = _execute_step(project, step) except Exception as error: result = dict( success=False, message='{}'.format(error), html_message='<pre>{}</pre>'.format(error) ) os.chdir(os.path.expanduser('~')) step.mark_dirty(not result['success']) step.error = result.get('html_message') step.last_modified = time.time() if result['success'] else 0.0 step.is_running = False step.progress = 0 step.progress_message = None step.dumps() # Make sure this is called prior to printing response information to the # console or that will come along for the ride redirection.disable(step) if result['success']: environ.log('[{}]: Updated'.format(step.definition.name)) else: response.fail( message='Step execution error', code='EXECUTION_ERROR', project=project.kernel_serialize(), step_name=step.definition.name ).console_raw(result['message']) return result['success']
def run_step( response: Response, project: Project, step: typing.Union[ProjectStep, str], force: bool = False ) -> bool: """ :param response: :param project: :param step: :param force: :return: """ step = get_step(project, step) if step is None: return False status = check_status(response, project, step, force) if status == ERROR_STATUS: return False step.error = None if status == SKIP_STATUS: return True os.chdir(os.path.dirname(step.source_path)) project.current_step = step step.report.clear() step.dom = None step.is_visible = True step.is_running = True step.progress_message = None step.progress = 0 step.sub_progress_message = None step.sub_progress = 0 step.start_time = datetime.utcnow() step.end_time = None # Set the top-level display and cache values to the current project values # before running the step for availability within the step scripts cauldron.shared = cauldron.project.shared redirection.enable(step) try: result = _execute_step(project, step) except Exception as error: result = dict( success=False, message='{}'.format(error), html_message='<pre>{}</pre>'.format(error) ) step.end_time = datetime.utcnow() os.chdir(os.path.expanduser('~')) step.mark_dirty(not result['success']) step.error = result.get('html_message') step.last_modified = time.time() if result['success'] else 0.0 step.is_running = False step.progress = 0 step.progress_message = None step.dumps() # Make sure this is called prior to printing response information to the # console or that will come along for the ride redirection.disable(step) step.project.stop_condition = result.get( 'stop_condition', StopCondition(False, False) ) if result['success']: environ.log('[{}]: Updated in {}'.format( step.definition.name, step.get_elapsed_timestamp() )) else: response.fail( message='Step execution error', code='EXECUTION_ERROR', project=project.kernel_serialize(), step_name=step.definition.name ).console_raw(result['message']) return result['success']