Beispiel #1
0
class DataValidationTest(unittest.TestCase):
    validator = None

    def setUp(self):
        self.validator = DataFileValidator()
        self.base_dir = os.path.dirname(os.path.realpath(__file__))

        self.invalid_file_yaml = os.path.join(self.base_dir,
                                              'test_data/invalid_file.yaml')

        self.valid_file_yaml = os.path.join(self.base_dir,
                                            'test_data/valid_file.yaml')

        self.valid_file_json = os.path.join(self.base_dir,
                                            'test_data/valid_file.json')

        self.invalid_file_json = os.path.join(self.base_dir,
                                              'test_data/invalid_file.json')

        self.valid_file_error_percent_yaml = os.path.join(
            self.base_dir, 'test_data/valid_data_with_error.yaml')

        self.invalid_syntax_data_file = os.path.join(
            self.base_dir, 'test_data/invalid_data_file.yaml')

        self.invalid_parser_file = os.path.join(
            self.base_dir, 'test_data/invalid_parser_file.yaml')

        self.valid_custom_file = os.path.join(
            self.base_dir, 'test_data/valid_file_custom.yaml')

    def test_no_file_path_supplied(self):
        try:
            self.validator.validate(file_path=None)
        except LookupError as le:
            assert (le)

    def test_valid_yaml_file(self):
        print('___DATA_VALIDATION: Testing valid yaml submission___')
        is_valid = self.validator.validate(file_path=self.valid_file_yaml)
        self.validator.print_errors(self.valid_file_yaml)
        self.assertEqual(is_valid, True)

    def test_invalid_yaml_file(self):
        print('___DATA_VALIDATION: Testing invalid yaml submission___')
        self.assertEqual(
            self.validator.validate(file_path=self.invalid_file_yaml), False)

        self.validator.print_errors(self.invalid_file_yaml)

    def test_valid_file_with_percent_errors(self):
        print('___DATA_VALIDATION: Testing valid yaml percent error ___')
        self.assertEqual(
            self.validator.validate(
                file_path=self.valid_file_error_percent_yaml), False)
        self.validator.print_errors(self.valid_file_error_percent_yaml)

    def test_valid_json_file(self):
        print('___DATA_VALIDATION: Testing valid json submission___')
        is_valid = self.validator.validate(file_path=self.valid_file_json)
        self.validator.print_errors(self.valid_file_json)
        self.assertEqual(is_valid, True)

        self.validator.print_errors(self.valid_file_json)

    def test_invalid_json_file(self):
        print('___DATA_VALIDATION: Testing invalid json submission___')
        self.assertEqual(
            self.validator.validate(file_path=self.invalid_file_json), False)
        self.validator.print_errors(self.invalid_file_json)

    def test_load_data_with_custom_data_type(self):
        self.validator = DataFileValidator()
        custom_schema_path = os.path.join(self.base_dir,
                                          'test_data/custom_data_schema.json')
        self.validator.load_custom_schema('different', custom_schema_path)

        self.assertTrue('different' in self.validator.custom_data_schemas)

        self.assertTrue(
            self.validator.validate(file_path=self.valid_custom_file))

    def test_load_invalid_custom_schema(self):
        self.validator.custom_data_schemas = {}
        print('Loading invalid schema')
        try:
            self.validator.load_custom_schema('different')
        except UnsupportedDataSchemaException as udse:
            self.assertTrue(
                udse.message ==
                "There is no schema defined for the 'different' data type.")
            self.assertTrue(udse.message == udse.__unicode__())

    def test_load_invalid_data_file(self):

        print('Loading invalid data file')

        self.assertFalse(
            self.validator.validate(file_path=self.invalid_syntax_data_file))

        self.assertTrue(
            self.validator.has_errors(self.invalid_syntax_data_file))
        self.assertTrue(
            len(self.validator.get_messages(self.invalid_syntax_data_file)) ==
            1)
        self.validator.print_errors(self.invalid_syntax_data_file)
        for message in self.validator.get_messages(
                self.invalid_syntax_data_file):
            self.assertTrue(
                message.message.index("There was a problem parsing the file.")
                == 0)

    def test_invalid_parser_yaml_file(self):
        print('___DATA_VALIDATION: Testing invalid parser yaml submission___')
        self.assertEqual(
            self.validator.validate(file_path=self.invalid_parser_file), False)

        self.validator.print_errors(self.invalid_parser_file)

    def test_ioerror_yaml_file(self):
        print('___DATA_VALIDATION: Testing ioerror yaml submission___')
        self.assertEqual(
            self.validator.validate(file_path=self.valid_file_yaml[:-1]),
            False)

        self.validator.print_errors(self.valid_file_yaml[:-1])
                'data_file'] if directory else doc['data_file']

            # Just try to load YAML data file without validating schema.
            # Script will terminate with an exception if there is a problem.
            contents = yaml.load(open(data_file_path, 'r'), Loader=Loader)

            # Validate the YAML data file if validator imported.
            if not validator_imported:
                print('%s is valid YAML.' % data_file_path)
            else:
                data_file_validator = DataFileValidator()
                is_valid_data_file = data_file_validator.validate(
                    file_path=data_file_path, data=contents)
                if not is_valid_data_file:
                    print('%s is invalid HEPData YAML.' % data_file_path)
                    data_file_validator.print_errors(data_file_path)
                else:
                    # Check that the length of the 'values' list is consistent for
                    # each of the independent_variables and dependent_variables.
                    indep_count = [
                        len(indep['values'])
                        for indep in contents['independent_variables']
                    ]
                    dep_count = [
                        len(dep['values'])
                        for dep in contents['dependent_variables']
                    ]
                    if len(set(indep_count + dep_count)
                           ) > 1:  # if more than one unique count
                        print(
                            "%s has inconsistent length of 'values' list: " %
Beispiel #3
0
from hepdata_validator.data_file_validator import DataFileValidator
import argparse

parser = argparse.ArgumentParser(description='Validate yaml files.')
parser.add_argument('-filename',dest='filename', type=str, help='file to check')

args = parser.parse_args()

data_file_validator = DataFileValidator()

# the validate method takes a string representing the file path.
data_file_validator.validate(file_path=args.filename)

# if there are any error messages, they are retrievable through this call
data_file_validator.get_messages()

# the error messages can be printed
data_file_validator.print_errors('data.yaml')
class DataValidationTest(unittest.TestCase):
    validator = None

    def setUp(self):
        self.validator = DataFileValidator()
        self.base_dir = os.path.dirname(os.path.realpath(__file__))

        self.invalid_file_yaml = os.path.join(
            self.base_dir,
            'test_data/invalid_file.yaml'
        )

        self.valid_file_yaml = os.path.join(
            self.base_dir,
            'test_data/valid_file.yaml'
        )

        self.valid_file_json = os.path.join(
            self.base_dir,
            'test_data/valid_file.json'
        )

        self.invalid_file_json = os.path.join(
            self.base_dir,
            'test_data/invalid_file.json')

        self.valid_file_error_percent_yaml = os.path.join(
            self.base_dir,
            'test_data/valid_data_with_error.yaml'
        )

        self.invalid_syntax_data_file = os.path.join(
            self.base_dir,
            'test_data/invalid_data_file.yaml'
        )

        self.valid_custom_file = os.path.join(
            self.base_dir,
            'test_data/valid_file_custom.yaml')

    def test_valid_yaml_file(self):
        print '___DATA_VALIDATION: Testing valid yaml submission___'
        is_valid = self.validator.validate(file_path=self.valid_file_yaml)
        self.validator.print_errors(self.valid_file_yaml)
        self.assertEqual(is_valid, True)

    def test_invalid_yaml_file(self):
        print '___DATA_VALIDATION: Testing invalid yaml submission___'
        self.assertEqual(self.validator.validate(file_path=self.invalid_file_yaml),
                         False)

        self.validator.print_errors(self.invalid_file_yaml)

    def test_valid_file_with_percent_errors(self):
        print '___DATA_VALIDATION: Testing valid yaml percent error ___'
        self.assertEqual(self.validator.validate(file_path=self.valid_file_error_percent_yaml),
                         False)
        self.validator.print_errors(self.valid_file_error_percent_yaml)

    def test_valid_json_file(self):
        print '___DATA_VALIDATION: Testing valid json submission___'
        is_valid = self.validator.validate(file_path=self.valid_file_json)
        self.validator.print_errors(self.valid_file_json)
        self.assertEqual(is_valid, True)

        self.validator.print_errors(self.valid_file_json)

    def test_invalid_json_file(self):
        print '___DATA_VALIDATION: Testing invalid json submission___'
        self.assertEqual(self.validator.validate(file_path=self.invalid_file_json),
                         False)
        self.validator.print_errors(self.invalid_file_json)

    def test_load_data_with_custom_data_type(self):
        self.validator = DataFileValidator()
        custom_schema_path = os.path.join(self.base_dir, 'test_data/custom_data_schema.json')
        self.validator.load_custom_schema('different', custom_schema_path)

        self.assertTrue('different' in self.validator.custom_data_schemas)

        self.assertTrue(self.validator.validate(file_path=self.valid_custom_file))

    def test_load_invalid_custom_schema(self):
        self.validator.custom_data_schemas = {}
        print('Loading invalid schema')
        try:
            self.validator.load_custom_schema('different')
        except UnsupportedDataSchemaException as udse:
            self.assertTrue(udse.message == "There is no schema defined for the 'different' data type.")
            self.assertTrue(udse.message == udse.__unicode__())

    def test_load_invalid_data_file(self):

        print('Loading invalid data file')

        self.assertFalse(self.validator.validate(file_path=self.invalid_syntax_data_file))

        self.assertTrue(self.validator.has_errors(self.invalid_syntax_data_file))
        self.assertTrue(len(self.validator.get_messages(self.invalid_syntax_data_file)) == 1)
        self.validator.print_errors(self.invalid_syntax_data_file)
        for message in self.validator.get_messages(self.invalid_syntax_data_file):
            self.assertTrue(message.message.index("There was a problem parsing the file.") == 0)