45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
from .schema import Schema
|
||
|
from .yamale_error import YamaleError
|
||
|
|
||
|
|
||
|
def make_schema(path=None, parser='PyYAML', validators=None, content=None):
|
||
|
# validators = None means use default.
|
||
|
# Import readers here so we can get version information in setup.py.
|
||
|
from . import readers
|
||
|
raw_schemas = readers.parse_yaml(path, parser, content=content)
|
||
|
if not raw_schemas:
|
||
|
raise ValueError('{} is an empty file!'.format(path))
|
||
|
# First document is the base schema
|
||
|
try:
|
||
|
s = Schema(raw_schemas[0], path, validators=validators)
|
||
|
# Additional documents contain Includes.
|
||
|
for raw_schema in raw_schemas[1:]:
|
||
|
s.add_include(raw_schema)
|
||
|
except (TypeError, SyntaxError) as e:
|
||
|
error = 'Schema error in file %s\n' % path
|
||
|
error += str(e)
|
||
|
raise SyntaxError(error)
|
||
|
|
||
|
return s
|
||
|
|
||
|
|
||
|
def make_data(path=None, parser='PyYAML', content=None):
|
||
|
from . import readers
|
||
|
raw_data = readers.parse_yaml(path, parser, content=content)
|
||
|
if len(raw_data) == 0:
|
||
|
return [({}, path)]
|
||
|
return [(d, path) for d in raw_data]
|
||
|
|
||
|
|
||
|
def validate(schema, data, strict=True, _raise_error=True):
|
||
|
results = []
|
||
|
is_valid = True
|
||
|
for d, path in data:
|
||
|
result = schema.validate(d, path, strict)
|
||
|
results.append(result)
|
||
|
is_valid = is_valid and result.isValid()
|
||
|
if _raise_error and not is_valid:
|
||
|
raise YamaleError(results)
|
||
|
return results
|