def validate(self, value, validator):
        """Validates and returns the value.

        If the value does not validate against the schema, SchemaValidationError
        will be raised.

        :param value: A value to validate (usually a dict).
        :param validator: An instance of a jsonschema validator class, as
            created by Schema.get_validator().
        :returns: the passed value.
        :raises SchemaValidationError:
        :raises Exception:
        """
        try:
            validator.validate(value)
        except Exception as e:
            logging.debug(e, exc_info=e)
            if isinstance(e, DoctorError):
                raise
            else:
                # Gather all the validation errors
                validation_errors = sorted(
                    validator.iter_errors(value), key=lambda e: e.path)
                errors = {}
                for error in validation_errors:
                    try:
                        key = error.path[0]
                    except IndexError:
                        key = '_other'
                    errors[key] = error.args[0]
                raise SchemaValidationError(e.args[0], errors=errors)
        return value
Validates and returns the value.

        If the value does not validate against the schema, SchemaValidationError
        will be raised.

        :param value: A value to validate (usually a dict).
        :param validator: An instance of a jsonschema validator class, as
            created by Schema.get_validator().
        :returns: the passed value.
        :raises SchemaValidationError:
        :raises Exception: