Skip to content

Commit 0feba13

Browse files
committed
to fix system tests, return None if no meaning or submeanings
1 parent e420263 commit 0feba13

File tree

2 files changed

+39
-10
lines changed

2 files changed

+39
-10
lines changed

google/cloud/datastore/helpers.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ def _get_meaning(value_pb, is_list=False):
5858
sub_meanings = [sub_value_pb.meaning or None for sub_value_pb in values]
5959
if not any(meaning is not None for meaning in sub_meanings):
6060
sub_meanings = None
61-
return root_meaning, sub_meanings
61+
if root_meaning is None and sub_meanings is None:
62+
# no meanings to save
63+
return None
64+
else:
65+
return root_meaning, sub_meanings
6266
else:
6367
return value_pb.meaning or None
6468

@@ -173,6 +177,10 @@ def _set_pb_meaning_from_entity(entity, name, value, value_pb, is_list=False):
173177
if orig_value is not value:
174178
return
175179

180+
# break early if no meaning data to set
181+
if meaning is None:
182+
return
183+
176184
# For lists, we set meaning on each sub-element.
177185
if is_list:
178186
root_meaning, sub_meaning_list = meaning
@@ -184,7 +192,7 @@ def _set_pb_meaning_from_entity(entity, name, value, value_pb, is_list=False):
184192
):
185193
if sub_meaning is not None:
186194
sub_value_pb.meaning = sub_meaning
187-
elif meaning is not None:
195+
else:
188196
value_pb.meaning = meaning
189197

190198

tests/unit/test_helpers.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,7 @@ def test__get_meaning_w_empty_array_value():
11641164
value_pb._pb.array_value.values.pop()
11651165

11661166
result = _get_meaning(value_pb, is_list=True)
1167-
assert result == (None, None)
1167+
assert result is None
11681168

11691169

11701170
def test__get_meaning_w_array_value():
@@ -1271,11 +1271,12 @@ def test__get_meaning_w_array_value_meaning_fully_unset():
12711271
sub_value_pb2.string_value = "bye"
12721272

12731273
result = _get_meaning(value_pb, is_list=True)
1274-
assert result == (None, None)
1274+
assert result is None
12751275

12761276

1277-
@pytest.mark.parametrize("orig_meaning_data", [0, 1])
1278-
def test__set_pb_meaning_w_array_value_fully_unset(orig_meaning_data):
1277+
@pytest.mark.parametrize("orig_root_meaning", [0,1])
1278+
@pytest.mark.parametrize("orig_sub_meaning", [0,1])
1279+
def test__set_pb_meaning_w_array_value_fully_unset(orig_root_meaning, orig_sub_meaning):
12791280
"""
12801281
call _set_pb_meaning_from_entity with meaning=None data.
12811282
Should not touch proto's meaning field
@@ -1286,15 +1287,35 @@ def test__set_pb_meaning_w_array_value_fully_unset(orig_meaning_data):
12861287

12871288
orig_pb = entity_pb2.Entity()
12881289
value_pb = orig_pb._pb.properties.get_or_create("value")
1289-
value_pb.meaning = orig_meaning_data
1290+
value_pb.meaning = orig_root_meaning
12901291
sub_value_pb1 = value_pb.array_value.values.add()
1291-
sub_value_pb1.meaning = orig_meaning_data
1292+
sub_value_pb1.meaning = orig_sub_meaning
12921293

12931294
entity = Entity(key="key")
12941295
entity._meanings = {"value": ((None, None), None)}
12951296
_set_pb_meaning_from_entity(entity, "value", None, value_pb, is_list=True)
1296-
assert value_pb.meaning == orig_meaning_data
1297-
assert value_pb.array_value.values[0].meaning == orig_meaning_data
1297+
assert value_pb.meaning == orig_root_meaning
1298+
assert value_pb.array_value.values[0].meaning == orig_sub_meaning
1299+
1300+
1301+
@pytest.mark.parametrize("orig_meaning", [0, 1])
1302+
def test__set_pb_meaning_w_value_unset(orig_meaning):
1303+
"""
1304+
call _set_pb_meaning_from_entity with meaning=None data.
1305+
Should not touch proto's meaning field
1306+
"""
1307+
from google.cloud.datastore_v1.types import entity as entity_pb2
1308+
from google.cloud.datastore.helpers import _set_pb_meaning_from_entity
1309+
from google.cloud.datastore.entity import Entity
1310+
1311+
orig_pb = entity_pb2.Entity()
1312+
value_pb = orig_pb._pb.properties.get_or_create("value")
1313+
value_pb.meaning = orig_meaning
1314+
1315+
entity = Entity(key="key")
1316+
entity._meanings = {"value": (None, None)}
1317+
_set_pb_meaning_from_entity(entity, "value", None, value_pb, is_list=False)
1318+
assert value_pb.meaning == orig_meaning
12981319

12991320

13001321
def test__array_w_meaning_end_to_end():

0 commit comments

Comments
 (0)