Beispiel #1
0
    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
Beispiel #3
0
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