Skip to content

Commit 09cb595

Browse files
committed
added test
1 parent 21566b4 commit 09cb595

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

google/cloud/datastore/helpers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,9 @@ def _set_pb_meaning_from_entity(entity, name, value, value_pb, is_list=False):
183183
return
184184
elif is_list:
185185
# for lists, set meaning on the root pb and on each sub-element
186-
try:
186+
if isinstance(meaning, tuple):
187187
root_meaning, sub_meaning_list = meaning
188-
except TypeError:
188+
else:
189189
# if meaning isn't a tuple, fall back to pre-v2.20.2 meaning format
190190
root_meaning = None
191191
if isinstance(meaning, list):

tests/unit/test_helpers.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,6 +1345,34 @@ def test__set_pb_meaning_w_list_and_single_value():
13451345
assert sub_value_pb2.meaning == updated_meaning
13461346

13471347

1348+
def test__set_pb_meaning_w_list_and_list():
1349+
"""
1350+
v2.20.2 uses a tuple to represent list meanings (https://github.com/googleapis/python-datastore/pull/575)
1351+
1352+
This check ensures _set_pb_meaning_from_entity is backwards
1353+
compatible with the old meaning style, still used by python-ndb
1354+
"""
1355+
from google.cloud.datastore_v1.types import entity as entity_pb2
1356+
from google.cloud.datastore.helpers import _set_pb_meaning_from_entity
1357+
from google.cloud.datastore.entity import Entity
1358+
1359+
orig_root_meaning = 1
1360+
updated_meaning_1 = 12
1361+
updated_meaning_2 = 4
1362+
orig_pb = entity_pb2.Entity()
1363+
value_pb = orig_pb._pb.properties.get_or_create("value")
1364+
value_pb.meaning = orig_root_meaning
1365+
sub_value_pb1 = value_pb.array_value.values.add()
1366+
sub_value_pb2 = value_pb.array_value.values.add()
1367+
1368+
entity = Entity(key="key")
1369+
entity._meanings = {"value": ([updated_meaning_1, updated_meaning_2], None)}
1370+
_set_pb_meaning_from_entity(entity, "value", None, value_pb, is_list=True)
1371+
assert value_pb.meaning == orig_root_meaning
1372+
assert sub_value_pb1.meaning == updated_meaning_1
1373+
assert sub_value_pb2.meaning == updated_meaning_2
1374+
1375+
13481376
def test__array_w_meaning_end_to_end():
13491377
"""
13501378
Test proto->entity->proto with an array with a meaning field

0 commit comments

Comments
 (0)