def test_ConnectNotify(self): one = Callable(1) two = Callable(2) three = Callable(3) signal.connect(two, 'test', priority=200) signal.connect(one, 'test', priority=100) signal.connect(three, 'test', priority=300) result = [i[1] for i in signal.send('test')] assert_equal(result, [3, 2, 1])
def do_execute(self, context): self.logger.info('Connecting to target') context.tm.initialize() if context.cm.run_config.reboot_policy.perform_initial_reboot: self.logger.info('Performing initial reboot.') attempts = context.cm.run_config.max_retries while attempts: try: self.target_manager.reboot(context) except TargetError as e: if attempts: attempts -= 1 else: raise e else: break context.output.set_target_info(self.target_manager.get_target_info()) self.logger.info('Generating jobs') context.cm.generate_jobs(context) context.write_job_specs() context.output.write_state() self.logger.info('Installing instruments') for instrument in context.cm.get_instruments( self.target_manager.target): instrumentation.install(instrument, context) instrumentation.validate() self.logger.info('Installing output processors') pm = ProcessorManager() for proc in context.cm.get_processors(): pm.install(proc, context) pm.validate() context.write_config() self.logger.info('Starting run') runner = Runner(context, pm) signal.send(signal.RUN_STARTED, self, context) runner.run()
def execute(self, config_manager, output): """ Execute the run specified by an agenda. Optionally, selectors may be used to only execute a subset of the specified agenda. Params:: :state: a ``ConfigManager`` containing processed configuration :output: an initialized ``RunOutput`` that will be used to store the results. """ signal.connect(self._error_signalled_callback, signal.ERROR_LOGGED) signal.connect(self._warning_signalled_callback, signal.WARNING_LOGGED) self.logger.info('Initializing run') self.logger.debug('Finalizing run configuration.') config = config_manager.finalize() output.write_config(config) self.target_manager = TargetManager(config.run_config.device, config.run_config.device_config, output.basepath) self.logger.info('Initializing execution context') context = ExecutionContext(config_manager, self.target_manager, output) try: self.do_execute(context) except KeyboardInterrupt as e: context.run_output.status = Status.ABORTED log.log_error(e, self.logger) context.write_output() raise except Exception as e: context.run_output.status = Status.FAILED log.log_error(e, self.logger) context.write_output() raise finally: context.finalize() self.execute_postamble(context, output) signal.send(signal.RUN_COMPLETED, self, context)
def execute(self, config_manager, output): """ Execute the run specified by an agenda. Optionally, selectors may be used to only selecute a subset of the specified agenda. Params:: :state: a ``ConfigManager`` containing processed configuration :output: an initialized ``RunOutput`` that will be used to store the results. """ signal.connect(self._error_signalled_callback, signal.ERROR_LOGGED) signal.connect(self._warning_signalled_callback, signal.WARNING_LOGGED) self.logger.info('Initializing run') self.logger.debug('Finalizing run configuration.') config = config_manager.finalize() output.write_config(config) self.target_manager = TargetManager(config.run_config.device, config.run_config.device_config, output.basepath) self.logger.info('Initializing execution context') context = ExecutionContext(config_manager, self.target_manager, output) try: self.do_execute(context) except KeyboardInterrupt as e: context.run_output.status = 'ABORTED' log.log_error(e, self.logger) context.write_output() raise except Exception as e: context.run_output.status = 'FAILED' log.log_error(e, self.logger) context.write_output() raise finally: context.finalize() self.execute_postamble(context, output) signal.send(signal.RUN_COMPLETED, self, context)
def do_execute(self, context): self.logger.info('Connecting to target') context.tm.initialize() if context.cm.run_config.reboot_policy.perform_initial_reboot: self.logger.info('Performing initial reboot.') attempts = context.cm.run_config.max_retries while attempts: try: self.target_manager.reboot() except TargetError as e: if attempts: attempts -= 1 else: raise e else: break context.output.set_target_info(self.target_manager.get_target_info()) self.logger.info('Generating jobs') context.cm.generate_jobs(context) context.write_job_specs() context.output.write_state() self.logger.info('Installing instruments') for instrument in context.cm.get_instruments(self.target_manager.target): instrumentation.install(instrument, context) instrumentation.validate() self.logger.info('Installing output processors') pm = ProcessorManager() for proc in context.cm.get_processors(): pm.install(proc, context) pm.validate() context.write_config() self.logger.info('Starting run') runner = Runner(context, pm) signal.send(signal.RUN_STARTED, self, context) runner.run()
def test_ConnectNotify(self): one = Callable(1) two = Callable(2) three = Callable(3) signal.connect( two, 'test', priority=200 ) signal.connect( one, 'test', priority=100 ) signal.connect( three, 'test', priority=300 ) result = [i[1] for i in signal.send('test')] assert_equal(result, [3, 2, 1])
def send(self, s): signal.send(s, self, self.context)
def emit(self, record): if record.levelno == logging.ERROR: signal.send(signal.ERROR_LOGGED, self, record) elif record.levelno == logging.WARNING: signal.send(signal.WARNING_LOGGED, self, record)
def test_handler_disconnected(self): signal.send('first') signal.send('second')