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: " %
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)