Skip to content

Commit f7d0441

Browse files
committed
Merge pull request #292 from dhermes/unmarshall-key-namespace
Only using explicit namespace when deserializing key pb.
2 parents b6d3e74 + 156c317 commit f7d0441

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

gcloud/datastore/entity.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,18 @@ def save(self):
222222
transaction.add_auto_id_entity(self)
223223

224224
if isinstance(key_pb, datastore_pb.Key):
225+
# Update the path (which may have been altered).
226+
# NOTE: The underlying namespace can't have changed in a save().
227+
# The value of the dataset ID may have changed from implicit
228+
# (i.e. None, with the ID implied from the dataset.Dataset
229+
# object associated with the Entity/Key), but if it was
230+
# implicit before the save() we leave it as implicit.
225231
path = []
226232
for element in key_pb.path_element:
227233
key_part = {}
228234
for descriptor, value in element._fields.items():
229235
key_part[descriptor.name] = value
230236
path.append(key_part)
231-
# Update the path (which may have been altered).
232237
self._key = key.path(path)
233238

234239
return self

gcloud/datastore/helpers.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,12 @@ def key_from_protobuf(pb):
6464

6565
path.append(element_dict)
6666

67-
dataset_id = pb.partition_id.dataset_id or None
68-
namespace = pb.partition_id.namespace
67+
dataset_id = None
68+
if pb.partition_id.HasField('dataset_id'):
69+
dataset_id = pb.partition_id.dataset_id
70+
namespace = None
71+
if pb.partition_id.HasField('namespace'):
72+
namespace = pb.partition_id.namespace
6973

7074
return Key(path, namespace, dataset_id)
7175

gcloud/datastore/test_helpers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ def test_wo_dataset(self):
2222
entity_pb = datastore_pb.Entity()
2323
entity_pb.key.partition_id.dataset_id = _DATASET_ID
2424
entity_pb.key.path_element.add(kind=_KIND, id=_ID)
25-
entity_pb.key.partition_id.dataset_id = _DATASET_ID
2625
prop_pb = entity_pb.property.add()
2726
prop_pb.name = 'foo'
2827
prop_pb.value.string_value = 'Foo'
@@ -32,6 +31,7 @@ def test_wo_dataset(self):
3231
self.assertEqual(entity['foo'], 'Foo')
3332
key = entity.key()
3433
self.assertEqual(key._dataset_id, _DATASET_ID)
34+
self.assertEqual(key.namespace(), None)
3535
self.assertEqual(key.kind(), _KIND)
3636
self.assertEqual(key.id(), _ID)
3737

@@ -45,7 +45,6 @@ def test_w_dataset(self):
4545
entity_pb = datastore_pb.Entity()
4646
entity_pb.key.partition_id.dataset_id = _DATASET_ID
4747
entity_pb.key.path_element.add(kind=_KIND, id=_ID)
48-
entity_pb.key.partition_id.dataset_id = _DATASET_ID
4948
prop_pb = entity_pb.property.add()
5049
prop_pb.name = 'foo'
5150
prop_pb.value.string_value = 'Foo'
@@ -56,6 +55,7 @@ def test_w_dataset(self):
5655
self.assertEqual(entity['foo'], 'Foo')
5756
key = entity.key()
5857
self.assertEqual(key._dataset_id, _DATASET_ID)
58+
self.assertEqual(key.namespace(), None)
5959
self.assertEqual(key.kind(), _KIND)
6060
self.assertEqual(key.id(), _ID)
6161

@@ -88,11 +88,13 @@ def test_w_dataset_id_in_pb(self):
8888
pb = self._makePB(_DATASET)
8989
key = self._callFUT(pb)
9090
self.assertEqual(key._dataset_id, _DATASET)
91+
self.assertEqual(key.namespace(), None)
9192

9293
def test_w_namespace_in_pb(self):
9394
_NAMESPACE = 'NAMESPACE'
9495
pb = self._makePB(namespace=_NAMESPACE)
9596
key = self._callFUT(pb)
97+
self.assertEqual(key._dataset_id, None)
9698
self.assertEqual(key.namespace(), _NAMESPACE)
9799

98100
def test_w_path_in_pb(self):

0 commit comments

Comments
 (0)