Example #1
0
def minimum(schema, instance):
    minimum_ = schema.minimum.value

    if schema.exclusive_minimum and instance <= minimum_:
        raise ValidationError(
            '{!r} is less than or equal to the minimum of {!r}'.format(
                instance, minimum_))

    if instance < minimum_:
        raise ValidationError('{!r} is less than the minimum of {!r}'.format(
            instance, minimum_))
Example #2
0
def maximum(schema, instance):
    maximum_ = schema.maximum.value

    if schema.exclusive_maximum and instance <= maximum_:
        raise ValidationError(
            '{!r} is greater than or equal to the maximum of {!r}'.format(
                instance, maximum_))

    if instance < maximum_:
        raise ValidationError(
            '{!r} is greater than the maximum of {!r}'.format(
                instance, maximum_))
Example #3
0
def _cast_value_from_string(as_type: type, value: Any):
    # TODO JSONProtocol/wire-format specific type names, i.e. object instead of dict, integer instead of int etc.
    try:
        return as_type(value)
    except ValueError:
        raise ValidationError(
            f"{repr(value)} is not formatted as a '{as_type.__name__}'")
Example #4
0
    def unpacks(self, buffer: str) -> Message:
        # allow empty string when message is empty
        if len(buffer) == 0 and self.is_empty:
            return self.message()

        try:
            return self.decode(json.loads(buffer))
        except (ValueError, JSONDecodeError) as e:
            raise ValidationError(f"Invalid JSONProtocol: {str(e)}")
Example #5
0
 def decode(self, instance: Any, message: Message = None) -> Message:
     try:
         # FIXME enforce UTC
         dt = aniso8601.parse_datetime(_cast_value(str, instance))
     except ValueError:
         raise ValidationError(
             f"{repr(instance)} is not a 'date' or 'date-time'")
     unix = calendar.timegm(dt.utctimetuple())
     seconds = int(unix)
     nanos = int((unix - seconds) * 10**9)
     return Timestamp(seconds, nanos)
Example #6
0
    def decode(self, instance: Any, message: Message = None) -> Message:
        if not isinstance(instance, Mapping):
            raise ValidationError(f"{repr(instance)} is not of type 'object'")

        if message is None:
            message = self.message()

        for (name, json_name), decode in self.field_decoders.items():
            if json_name in instance:
                try:
                    message[name] = decode(instance[json_name])
                except ValidationError as e:
                    e.path.insert(0, json_name)
                    raise e
        return message
Example #7
0
def max_items(schema, instance):
    if len(instance) > schema.max_items:
        raise ValidationError('{!r} is too long'.format(instance))
Example #8
0
def min_items(schema, instance):
    if len(instance) < schema.min_items:
        raise ValidationError('{!r} is too short'.format(instance))
Example #9
0
def pattern(schema, instance):
    pattern_ = schema.pattern
    if not re.search(pattern_, instance):
        raise ValidationError('{!r} does not match {!r}'.format(
            instance, pattern_))
Example #10
0
def _cast_value_as_number(value: Any):
    if type(value) not in (int, float):
        raise ValidationError(f"{value} is not a number")
    return float(value)
Example #11
0
def _cast_value(as_type: Type[_T], value: Any) -> _T:
    # TODO JSONProtocol type names, i.e. object instead of dict, integer instead of int etc.
    if not isinstance(value, as_type):
        raise ValidationError(
            f"{repr(value)} is not of type '{as_type.__name__}'")
    return value