Skip to content

Commit a987a43

Browse files
committed
Merge pull request #399 from lucemia/bug-list-value-indexed
fix list_value indexed
2 parents 03fc101 + 22163ff commit a987a43

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

gcloud/datastore/connection.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,11 @@ def save_entity(self, dataset_id, key_pb, properties,
415415
helpers._set_protobuf_value(prop.value, value)
416416

417417
if name in exclude_from_indexes:
418-
prop.value.indexed = False
418+
if not isinstance(value, list):
419+
prop.value.indexed = False
420+
421+
for sub_value in prop.value.list_value:
422+
sub_value.indexed = False
419423

420424
# If this is in a transaction, we should just return True. The
421425
# transaction will handle assigning any keys as necessary.

gcloud/datastore/test_connection.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,7 @@ def test_save_entity_wo_transaction_w_upsert(self):
672672
def test_save_entity_w_exclude_from_indexes(self):
673673
from gcloud.datastore.connection import datastore_pb
674674
from gcloud.datastore.key import Key
675+
import operator
675676

676677
DATASET_ID = 'DATASET'
677678
key_pb = Key(path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf()
@@ -686,8 +687,9 @@ def test_save_entity_w_exclude_from_indexes(self):
686687
'commit',
687688
])
688689
http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString())
689-
result = conn.save_entity(DATASET_ID, key_pb, {'foo': u'Foo'},
690-
exclude_from_indexes=['foo'])
690+
result = conn.save_entity(DATASET_ID, key_pb,
691+
{'foo': u'Foo', 'bar': [u'bar1', u'bar2']},
692+
exclude_from_indexes=['foo', 'bar'])
691693
self.assertEqual(result, True)
692694
cw = http._called_with
693695
self.assertEqual(cw['uri'], URI)
@@ -705,11 +707,19 @@ def test_save_entity_w_exclude_from_indexes(self):
705707
self.assertEqual(len(upserts), 1)
706708
upsert = upserts[0]
707709
self.assertEqual(upsert.key, key_pb)
708-
props = list(upsert.property)
709-
self.assertEqual(len(props), 1)
710+
props = sorted(upsert.property,
711+
key=operator.attrgetter('name'),
712+
reverse=True)
713+
self.assertEqual(len(props), 2)
710714
self.assertEqual(props[0].name, 'foo')
711715
self.assertEqual(props[0].value.string_value, u'Foo')
712716
self.assertEqual(props[0].value.indexed, False)
717+
self.assertEqual(props[1].name, 'bar')
718+
self.assertEqual(props[1].value.list_value[0].string_value, 'bar1')
719+
self.assertEqual(props[1].value.list_value[1].string_value, 'bar2')
720+
self.assertEqual(props[1].value.HasField('indexed'), False)
721+
self.assertEqual(props[1].value.list_value[0].indexed, False)
722+
self.assertEqual(props[1].value.list_value[1].indexed, False)
713723
self.assertEqual(len(mutation.delete), 0)
714724
self.assertEqual(request.mode, rq_class.NON_TRANSACTIONAL)
715725

0 commit comments

Comments
 (0)