def test_save_models(self): """Tests calling JobErrorMapping.save_models() successfully""" job_type_name = 'test-job' mapping = JobErrorMapping(job_type_name) error_1 = JobError(job_type_name, 'mapped_error_1', title='Title', description='Description', category='ALGORITHM') error_2 = JobError(job_type_name, 'mapped_error_2', category='DATA') mapping.add_mapping(1, error_1) mapping.add_mapping(2, error_2) # Make sure error models are created successfully mapping.save_models() self.assertEqual( Error.objects.filter(job_type_name=job_type_name).count(), 2) # Make some changes error_1.description = 'New description' error_2.category = 'ALGORITHM' # Make sure error models are updated successfully mapping.save_models() self.assertEqual( Error.objects.get(name='mapped_error_1').description, 'New description') self.assertEqual( Error.objects.get(name='mapped_error_2').category, 'ALGORITHM')
def get_error_mapping(self): """Returns the error mapping for this manifest :return: The error mapping :rtype: :class:`job.error.mapping.JobErrorMapping` """ job_type_name = self.get_name() mapping = JobErrorMapping(job_type_name) for error_dict in self.get_errors(): exit_code = error_dict['code'] error_name = error_dict['name'] title = error_dict['title'] if 'title' in error_dict else None description = error_dict[ 'description'] if 'description' in error_dict else None category = 'DATA' if 'category' in error_dict and error_dict[ 'category'] == 'data' else 'ALGORITHM' error = JobError(job_type_name, error_name, title=title, description=description, category=category) mapping.add_mapping(exit_code, error) return mapping
def create_legacy_error_mapping(error_dict): """Returns the error mapping for the given legacy error dict :param error_dict: The legacy error dict :type error_dict: dict :returns: The error mapping :rtype: :class:`job.error.mapping.JobErrorMapping` """ if error_dict is None: error_dict = {} mapping = JobErrorMapping(None) mapping.error_dict = error_dict if 'version' not in error_dict: error_dict['version'] = '1.0' if error_dict['version'] != '1.0': raise InvalidInterfaceDefinition( 'Invalid error interface version: %s' % error_dict['version']) if 'exit_codes' not in error_dict: error_dict['exit_codes'] = {} if not isinstance(error_dict['exit_codes'], dict): raise InvalidInterfaceDefinition('Invalid error interface') for exit_code, error_name in error_dict['exit_codes'].items(): exit_code = int(exit_code) error = JobError(None, error_name) mapping.add_mapping(exit_code, error) return mapping
def test_create_error_model(self): """Validate that a complete Error model is created using JobError """ job_type_name = 'test-job' name = 'bad-data' title = 'Bad Data' description = 'Error received when bad data is detected' category = 'DATA' error = JobError(job_type_name, name, title, description, category) model = error.create_model() self.assertEqual(model.name, name) self.assertEqual(model.title, title) self.assertEqual(model.description, description) self.assertEqual(model.category, category) self.assertEqual(model.job_type_name, job_type_name)