def validate_timestamp(self, timestamp): _assert_condition(0 <= timestamp.nanos < 1000000000, 'Timestamp nanos exceeds limit for field') _assert_condition( datastore_pbs.is_in_rfc_3339_bounds(timestamp.seconds * 1000 * 1000), 'Timestamp seconds exceeds limit for field')
def __validate_value_meaning_constraints(self, constraint, value): """Checks constraints on values that result from their meaning. For example, some meanings cause the length of a value to be constrained. Args: constraint: a _ValidationConstraint to apply value: an googledatastore.Value Raises: ValidationError: if the value is invalid """ meaning = value.meaning if not meaning: return if meaning == datastore_pbs.MEANING_BYTESTRING: _assert_condition( (len(value.blob_value) <= datastore_pbs.MAX_INDEXED_BLOB_BYTES), ('Blob value with meaning %d has more than ' 'permitted %d bytes.' % (meaning, datastore_pbs.MAX_INDEXED_BLOB_BYTES))) elif meaning in (datastore_pbs.MEANING_TEXT, datastore_pbs.MEANING_ZLIB): _assert_condition(value.exclude_from_indexes, 'Indexed value has meaning %d.' % meaning) elif meaning == datastore_pbs.MEANING_URL: _assert_condition( (len(value.string_value) <= datastore_pbs.MAX_URL_CHARS), 'URL value has more than permitted %d characters.' % datastore_pbs.MAX_URL_CHARS) elif meaning == datastore_pbs.MEANING_NON_RFC_3339_TIMESTAMP: _assert_condition( not datastore_pbs.is_in_rfc_3339_bounds(value.integer_value), ('A timestamp in range [0001-01-01T00:00:00Z, ' '9999-12-31T23:59:59.999999Z] must be stored as a timestamp ' 'value.')) elif meaning == datastore_pbs.MEANING_PERCENT: _assert_condition( (value.integer_value >= 0 and value.integer_value <= 100), 'Percent value outside permitted range [0, 100].') elif meaning == datastore_pbs.MEANING_PREDEFINED_ENTITY_USER: self._validate_predefined_entity_value( value.entity_value, 'user', _USER_ENTITY_PROPERTY_MAP, _USER_ENTITY_REQUIRED_PROPERTIES) elif meaning == datastore_pbs.MEANING_INDEX_ONLY: _assert_condition( constraint.meaning_index_only_allowed, 'Value has meaning %d.' % datastore_pbs.MEANING_INDEX_ONLY)
def __validate_value_meaning_constraints(self, constraint, value): """Checks constraints on values that result from their meaning. For example, some meanings cause the length of a value to be constrained. Args: constraint: a _ValidationConstraint to apply value: an googledatastore.Value Raises: ValidationError: if the value is invalid """ meaning = value.meaning if not meaning: return if meaning == datastore_pbs.MEANING_BYTESTRING: _assert_condition((len(value.blob_value) <= datastore_pbs.MAX_INDEXED_BLOB_BYTES), ('Blob value with meaning %d has more than ' 'permitted %d bytes.' % (meaning, datastore_pbs.MAX_INDEXED_BLOB_BYTES))) elif meaning in (datastore_pbs.MEANING_TEXT, datastore_pbs.MEANING_ZLIB): _assert_condition(value.exclude_from_indexes, 'Indexed value has meaning %d.' % meaning) elif meaning == datastore_pbs.MEANING_URL: _assert_condition((len(value.string_value) <= datastore_pbs.MAX_URL_CHARS), 'URL value has more than permitted %d characters.' % datastore_pbs.MAX_URL_CHARS) elif meaning == datastore_pbs.MEANING_NON_RFC_3339_TIMESTAMP: _assert_condition( not datastore_pbs.is_in_rfc_3339_bounds(value.integer_value), ('A timestamp in range [0001-01-01T00:00:00Z, ' '9999-12-31T23:59:59.999999Z] must be stored as a timestamp ' 'value.')) elif meaning == datastore_pbs.MEANING_PERCENT: _assert_condition((value.integer_value >= 0 and value.integer_value <= 100), 'Percent value outside permitted range [0, 100].') elif meaning == datastore_pbs.MEANING_PREDEFINED_ENTITY_USER: self._validate_predefined_entity_value(value.entity_value, 'user', _USER_ENTITY_PROPERTY_MAP, _USER_ENTITY_REQUIRED_PROPERTIES) elif meaning == datastore_pbs.MEANING_INDEX_ONLY: _assert_condition(constraint.meaning_index_only_allowed, 'Value has meaning %d.' % datastore_pbs.MEANING_INDEX_ONLY)