Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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')