diff --git a/gcloud/datastore/key.py b/gcloud/datastore/key.py index 471d6dadacda..adbb93b9aeed 100644 --- a/gcloud/datastore/key.py +++ b/gcloud/datastore/key.py @@ -68,8 +68,11 @@ def from_protobuf(cls, pb, dataset=None): if not dataset: dataset = Dataset(id=pb.partition_id.dataset_id) + namespace = pb.partition_id.namespace + else: + namespace = None - return cls(path=path, dataset=dataset) + return cls(dataset, namespace, path) def to_protobuf(self): """Return a protobuf corresponding to the key. diff --git a/gcloud/datastore/test_key.py b/gcloud/datastore/test_key.py index 5da0f8af19cf..8f16f0a6573d 100644 --- a/gcloud/datastore/test_key.py +++ b/gcloud/datastore/test_key.py @@ -80,12 +80,20 @@ def test_from_protobuf_w_dataset_in_pb(self): key = self._getTargetClass().from_protobuf(pb) self.assertEqual(key.dataset().id(), _DATASET) - def test_from_protobuf_w_namespace_in_pb(self): + def test_from_protobuf_w_namespace_in_pb_wo_dataset_passed(self): _NAMESPACE = 'NAMESPACE' pb = self._makePB(namespace=_NAMESPACE) key = self._getTargetClass().from_protobuf(pb) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/133 - # self.assertEqual(key.namespace(), _NAMESPACE) XXX + self.assertEqual(key.namespace(), _NAMESPACE) + + def test_from_protobuf_w_namespace_in_pb_w_dataset_passed(self): + from gcloud.datastore.dataset import Dataset + _DATASET = 'DATASET' + _NAMESPACE = 'NAMESPACE' + dataset = Dataset(_DATASET) + pb = self._makePB(namespace=_NAMESPACE) + key = self._getTargetClass().from_protobuf(pb, dataset) + self.assertEqual(key.namespace(), None) def test_from_protobuf_w_path_in_pb(self): _DATASET = 'DATASET'