Skip to content

Commit 17caf0b

Browse files
feat: Add field information when raising validation errors. (#956)
* feat: Add field information when raising validation errors. * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix: Fix string formatting error --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 7dfd56b commit 17caf0b

File tree

1 file changed

+52
-20
lines changed

1 file changed

+52
-20
lines changed

google/cloud/ndb/model.py

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,9 @@ def _set_value(self, entity, value):
14851485
if self._repeated:
14861486
if not isinstance(value, (list, tuple, set, frozenset)):
14871487
raise exceptions.BadValueError(
1488-
"Expected list or tuple, got {!r}".format(value)
1488+
"In field {}, expected list or tuple, got {!r}".format(
1489+
self._name, value
1490+
)
14891491
)
14901492
value = [self._do_validate(v) for v in value]
14911493
else:
@@ -2372,7 +2374,9 @@ def _validate(self, value):
23722374
.BadValueError: If ``value`` is not a :class:`bool`.
23732375
"""
23742376
if not isinstance(value, bool):
2375-
raise exceptions.BadValueError("Expected bool, got {!r}".format(value))
2377+
raise exceptions.BadValueError(
2378+
"In field {}, expected bool, got {!r}".format(self._name, value)
2379+
)
23762380
return value
23772381

23782382
def _from_base_type(self, value):
@@ -2417,7 +2421,9 @@ def _validate(self, value):
24172421
to one.
24182422
"""
24192423
if not isinstance(value, six.integer_types):
2420-
raise exceptions.BadValueError("Expected integer, got {!r}".format(value))
2424+
raise exceptions.BadValueError(
2425+
"In field {}, expected integer, got {!r}".format(self._name, value)
2426+
)
24212427
return int(value)
24222428

24232429

@@ -2447,7 +2453,9 @@ def _validate(self, value):
24472453
to one.
24482454
"""
24492455
if not isinstance(value, six.integer_types + (float,)):
2450-
raise exceptions.BadValueError("Expected float, got {!r}".format(value))
2456+
raise exceptions.BadValueError(
2457+
"In field {}, expected float, got {!r}".format(self._name, value)
2458+
)
24512459
return float(value)
24522460

24532461

@@ -2578,7 +2586,9 @@ def _validate(self, value):
25782586
exceeds the maximum length (1500 bytes).
25792587
"""
25802588
if not isinstance(value, bytes):
2581-
raise exceptions.BadValueError("Expected bytes, got {!r}".format(value))
2589+
raise exceptions.BadValueError(
2590+
"In field {}, expected bytes, got {!r}".format(self._name, value)
2591+
)
25822592

25832593
if self._indexed and len(value) > _MAX_STRING_LENGTH:
25842594
raise exceptions.BadValueError(
@@ -2761,11 +2771,13 @@ def _validate(self, value):
27612771
value = value.decode("utf-8")
27622772
except UnicodeError:
27632773
raise exceptions.BadValueError(
2764-
"Expected valid UTF-8, got {!r}".format(value)
2774+
"In field {}, expected valid UTF-8, got {!r}".format(
2775+
self._name, value
2776+
)
27652777
)
27662778
else:
27672779
raise exceptions.BadValueError(
2768-
"Expected string, got {!r}".format(value)
2780+
"In field {}, expected string, got {!r}".format(self._name, value)
27692781
)
27702782

27712783
def _to_base_type(self, value):
@@ -2920,7 +2932,9 @@ def _validate(self, value):
29202932
value = value.decode("utf-8")
29212933
except UnicodeError:
29222934
raise exceptions.BadValueError(
2923-
"Expected valid UTF-8, got {!r}".format(value)
2935+
"In field {}, expected valid UTF-8, got {!r}".format(
2936+
self._name, value
2937+
)
29242938
)
29252939
elif isinstance(value, six.string_types):
29262940
encoded_length = len(value.encode("utf-8"))
@@ -3026,7 +3040,9 @@ def _validate(self, value):
30263040
.BadValueError: If ``value`` is not a :attr:`.GeoPt`.
30273041
"""
30283042
if not isinstance(value, GeoPt):
3029-
raise exceptions.BadValueError("Expected GeoPt, got {!r}".format(value))
3043+
raise exceptions.BadValueError(
3044+
"In field {}, expected GeoPt, got {!r}".format(self._name, value)
3045+
)
30303046

30313047

30323048
class PickleProperty(BlobProperty):
@@ -3447,7 +3463,9 @@ def _validate(self, value):
34473463
"""
34483464
# Might be GAE User or our own version
34493465
if type(value).__name__ != "User":
3450-
raise exceptions.BadValueError("Expected User, got {!r}".format(value))
3466+
raise exceptions.BadValueError(
3467+
"In field {}, expected User, got {!r}".format(self._name, value)
3468+
)
34513469

34523470
def _prepare_for_put(self, entity):
34533471
"""Pre-put hook
@@ -3659,19 +3677,22 @@ def _validate(self, value):
36593677
and ``value`` does not match that kind.
36603678
"""
36613679
if not isinstance(value, Key):
3662-
raise exceptions.BadValueError("Expected Key, got {!r}".format(value))
3680+
raise exceptions.BadValueError(
3681+
"In field {}, expected Key, got {!r}".format(self._name, value)
3682+
)
36633683

36643684
# Reject incomplete keys.
36653685
if not value.id():
36663686
raise exceptions.BadValueError(
3667-
"Expected complete Key, got {!r}".format(value)
3687+
"In field {}, expected complete Key, got {!r}".format(self._name, value)
36683688
)
36693689

36703690
# Verify kind if provided.
36713691
if self._kind is not None:
36723692
if value.kind() != self._kind:
36733693
raise exceptions.BadValueError(
3674-
"Expected Key with kind={!r}, got " "{!r}".format(self._kind, value)
3694+
"In field {}, expected Key with kind={!r}, got "
3695+
"{!r}".format(self._name, self._kind, value)
36753696
)
36763697

36773698
def _to_base_type(self, value):
@@ -3722,7 +3743,9 @@ def _validate(self, value):
37223743
:class:`~google.cloud.ndb.model.BlobKey`.
37233744
"""
37243745
if not isinstance(value, BlobKey):
3725-
raise exceptions.BadValueError("Expected BlobKey, got {!r}".format(value))
3746+
raise exceptions.BadValueError(
3747+
"In field {}, expected BlobKey, got {!r}".format(self._name, value)
3748+
)
37263749

37273750

37283751
class DateTimeProperty(Property):
@@ -3838,7 +3861,9 @@ def _validate(self, value):
38383861
.BadValueError: If ``value`` is not a :class:`~datetime.datetime`.
38393862
"""
38403863
if not isinstance(value, datetime.datetime):
3841-
raise exceptions.BadValueError("Expected datetime, got {!r}".format(value))
3864+
raise exceptions.BadValueError(
3865+
"In field {}, expected datetime, got {!r}".format(self._name, value)
3866+
)
38423867

38433868
if self._tzinfo is None and value.tzinfo is not None:
38443869
raise exceptions.BadValueError(
@@ -3935,7 +3960,9 @@ def _validate(self, value):
39353960
.BadValueError: If ``value`` is not a :class:`~datetime.date`.
39363961
"""
39373962
if not isinstance(value, datetime.date):
3938-
raise exceptions.BadValueError("Expected date, got {!r}".format(value))
3963+
raise exceptions.BadValueError(
3964+
"In field {}, expected date, got {!r}".format(self._name, value)
3965+
)
39393966

39403967
def _to_base_type(self, value):
39413968
"""Convert a value to the "base" value type for this property.
@@ -3993,7 +4020,9 @@ def _validate(self, value):
39934020
.BadValueError: If ``value`` is not a :class:`~datetime.time`.
39944021
"""
39954022
if not isinstance(value, datetime.time):
3996-
raise exceptions.BadValueError("Expected time, got {!r}".format(value))
4023+
raise exceptions.BadValueError(
4024+
"In field {}, expected time, got {!r}".format(self._name, value)
4025+
)
39974026

39984027
def _to_base_type(self, value):
39994028
"""Convert a value to the "base" value type for this property.
@@ -4191,8 +4220,9 @@ def _validate(self, value):
41914220
return self._model_class(**value)
41924221
if not isinstance(value, self._model_class):
41934222
raise exceptions.BadValueError(
4194-
"Expected %s instance, got %s"
4195-
% (self._model_class.__name__, value.__class__)
4223+
"In field {}, expected {} instance, got {!r}".format(
4224+
self._name, self._model_class.__name__, value.__class__
4225+
)
41964226
)
41974227

41984228
def _has_value(self, entity, rest=None):
@@ -4399,7 +4429,9 @@ def _validate(self, value):
43994429

44004430
if not isinstance(value, self._model_class):
44014431
raise exceptions.BadValueError(
4402-
"Expected {}, got {!r}".format(self._model_class.__name__, value)
4432+
"In field {}, expected {}, got {!r}".format(
4433+
self._name, self._model_class.__name__, value
4434+
)
44034435
)
44044436

44054437
def _get_for_dict(self, entity):

0 commit comments

Comments
 (0)