def test_should_fail_missing_parameters(self): """Missing parameters should cause JSONSchema validation failure.""" validator = Validator(SCHEMAS[ARBITRARY]) for required in ['start', 'end']: data = copy.deepcopy(VALID_ARBITRARY) del data[required] self.assertEqual(False, validator.is_valid(data)) validator = Validator(SCHEMAS[DAY]) for required in ['day', 'month', 'year']: data = copy.deepcopy(VALID_DAY) del data[required] self.assertEqual(False, validator.is_valid(data)) validator = Validator(SCHEMAS[MONTH]) for required in ['month', 'year']: data = copy.deepcopy(VALID_MONTH) del data[required] self.assertEqual(False, validator.is_valid(data)) validator = Validator(SCHEMAS[WEEK]) for required in ['isoweek', 'isoyear']: data = copy.deepcopy(VALID_WEEK) del data[required] self.assertEqual(False, validator.is_valid(data)) validator = Validator(CATEGORIES_SCHEMA) for required in ['main_slug', 'sub_slug']: data = copy.deepcopy(VALID_CATEGORIES) del data[0][required] self.assertEqual(False, validator.is_valid(data))
def check_syntax(config, double_validate=True): """ check the given configuration against the schema definition :param config: :param double_validate: validate invalid syntax a second time with raising exception :return: True if the syntax is valid, False otherwise """ try: with open(ROOT_SCHEMA, 'r') as f: schema = json.load(f) except FileNotFoundError as fnfe: factory_logger.error( 'JSON root schema could not be found: {}'.format(ROOT_SCHEMA_NAME)) factory_logger.error(fnfe) sys.exit() except Exception as e: factory_logger.error(e) sys.exit() # resolver: reference sub-schemas from relative URIs # -> https://github.com/Julian/jsonschema/issues/313 resolver = RefResolver(base_uri=ROOT_SCHEMA_BASE_URI, referrer=schema) validator = Validator(schema, resolver=resolver) is_valid = validator.is_valid(config) if not is_valid and double_validate: # if configuration is invalid, run validate to get error message try: validator.validate(config) except jsonschema.exceptions.ValidationError as err: factory_logger.error(err) return is_valid
def check_json(validator: Draft7Validator, json_obj: json, logger=app_logger) -> bool: is_valid = False if validator.is_valid(json_obj): logger.debug(f"JSON Schema check PASSED.") is_valid = True else: for e in validator.iter_errors(json_obj): logger.error(e) raise Exception(f"JSON Schema check FAILED. Json string: {json_obj}") return is_valid