def update_database_results(self, session): """Update the database with the results of ramp_test_submission.""" while not self._processed_submission_queue.empty(): submission_id, submission_name = \ self._processed_submission_queue.get_nowait() if 'error' in get_submission_state(session, submission_id): update_leaderboards(session, self._ramp_config['event_name']) update_all_user_leaderboards(session, self._ramp_config['event_name']) logger.info('Skip update for {} due to failure during the ' 'processing'.format(submission_name)) continue logger.info('Update the results obtained on each fold for ' '{}'.format(submission_name)) path_predictions = os.path.join( self._worker_config['predictions_dir'], submission_name ) set_predictions(session, submission_id, path_predictions) set_time(session, submission_id, path_predictions) set_scores(session, submission_id, path_predictions) set_bagged_scores(session, submission_id, path_predictions) set_submission_state(session, submission_id, 'scored') update_leaderboards(session, self._ramp_config['event_name']) update_all_user_leaderboards(session, self._ramp_config['event_name'])
def update_database_results(self, session): """Update the database with the results of ramp_test_submission.""" make_update_leaderboard = False while not self._processed_submission_queue.empty(): make_update_leaderboard = True submission_id, submission_name = \ self._processed_submission_queue.get_nowait() if 'error' in get_submission_state(session, submission_id): continue logger.info('Write info in database for submission {}'.format( submission_name)) path_predictions = os.path.join( self._worker_config['predictions_dir'], submission_name) # NOTE: In the past we were adding the predictions into the # database. Since they require too much space, we stop to store # them in the database and instead, keep it onto the disk. # set_predictions(session, submission_id, path_predictions) set_time(session, submission_id, path_predictions) set_scores(session, submission_id, path_predictions) set_bagged_scores(session, submission_id, path_predictions) set_submission_state(session, submission_id, 'scored') if make_update_leaderboard: logger.info('Update all leaderboards') update_leaderboards(session, self._ramp_config['event_name']) update_all_user_leaderboards(session, self._ramp_config['event_name'])
def launch(self): """Launch the dispatcher.""" logger.info('Starting the RAMP dispatcher') with session_scope(self._database_config) as session: logger.info('Open a session to the database') try: while not self._poison_pill: self.fetch_from_db(session) self.launch_workers(session) self.collect_result(session) self.update_database_results(session) finally: # reset the submissions to 'new' in case of error or unfinished # training submissions = get_submissions(session, self._ramp_config['event_name'], state=None) for submission_id, _, _ in submissions: submission_state = get_submission_state( session, submission_id) if submission_state in ('training', 'send_to_training'): set_submission_state(session, submission_id, 'new') logger.info('Dispatcher killed by the poison pill')
def update_database_results(self, session): """Update the database with the results of ramp_test_submission.""" make_update_leaderboard = False while not self._processed_submission_queue.empty(): make_update_leaderboard = True submission_id, submission_name = \ self._processed_submission_queue.get_nowait() if 'error' in get_submission_state(session, submission_id): continue logger.info('Write info in data base for submission {}'.format( submission_name)) path_predictions = os.path.join( self._worker_config['predictions_dir'], submission_name) set_predictions(session, submission_id, path_predictions) set_time(session, submission_id, path_predictions) set_scores(session, submission_id, path_predictions) set_bagged_scores(session, submission_id, path_predictions) set_submission_state(session, submission_id, 'scored') if make_update_leaderboard: logger.info('Update all leaderboards') update_leaderboards(session, self._ramp_config['event_name']) update_all_user_leaderboards(session, self._ramp_config['event_name'])
def _reset_submission_after_failure(session, even_name): submissions = get_submissions(session, even_name, state=None) for submission_id, _, _ in submissions: submission_state = get_submission_state(session, submission_id) if submission_state in ('training', 'send_to_training'): set_submission_state(session, submission_id, 'new')
def test_set_submission_state(session_scope_module): submission_id = 2 set_submission_state(session_scope_module, submission_id, 'trained') state = get_submission_state(session_scope_module, submission_id) assert state == 'trained'
def test_get_submission_state(session_scope_module, submission_id, state): assert get_submission_state(session_scope_module, submission_id) == state