Source code for frater.validation.json

import copy
import functools

from .error import ValidationError


[docs]def validate_json(_func=None, default=None, completion=True): def decorator_validate(func): @functools.wraps(func) def wrapper_validate(data): if completion: data = add_defaults(copy.deepcopy(data), default) else: validate_helper(data, default) return func(data) return wrapper_validate if _func is None: return decorator_validate else: return decorator_validate(_func)
[docs]def validate_helper(data, default): for key, value in default.items(): if key not in data: raise ValidationError( 'Key {} not found in {} Object'.format(key, type(data))) elif type(value) != type(data[key]): raise ValidationError( 'Key {} is invalid type: default - {}, data - {}'.format( key, type(value), type(data[key]) ) )
[docs]def add_defaults(data, default): default_keys = set(default.keys()) data_keys = set(data.keys()) default_keys.difference_update(data_keys) for key in default_keys: data[key] = default[key] return data