Source code for swh.model.fields.simple

# Copyright (C) 2015  The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information

import datetime
import numbers

from ..exceptions import ValidationError

[docs]def validate_type(value, type): """Validate that value is an integer""" if not isinstance(value, type): if isinstance(type, tuple): typestr = "one of %s" % ", ".join(typ.__name__ for typ in type) else: typestr = type.__name__ raise ValidationError( "Unexpected type %(type)s, expected %(expected_type)s", params={"type": value.__class__.__name__, "expected_type": typestr,}, code="unexpected-type", ) return True
[docs]def validate_int(value): """Validate that the given value is an int""" return validate_type(value, numbers.Integral)
[docs]def validate_str(value): """Validate that the given value is a string""" return validate_type(value, str)
[docs]def validate_bytes(value): """Validate that the given value is a bytes object""" return validate_type(value, bytes)
[docs]def validate_datetime(value): """Validate that the given value is either a datetime, or a numeric number of seconds since the UNIX epoch.""" errors = [] try: validate_type(value, (datetime.datetime, numbers.Real)) except ValidationError as e: errors.append(e) if isinstance(value, datetime.datetime) and value.tzinfo is None: errors.append( ValidationError( "Datetimes must be timezone-aware in swh", code="datetime-without-tzinfo", ) ) if errors: raise ValidationError(errors) return True
[docs]def validate_enum(value, expected_values): """Validate that value is contained in expected_values""" if value not in expected_values: raise ValidationError( "Unexpected value %(value)s, expected one of %(expected_values)s", params={ "value": value, "expected_values": ", ".join(sorted(expected_values)), }, code="unexpected-value", ) return True