diff --git a/gcloud/datastore/query.py b/gcloud/datastore/query.py index 46b2dedb780f..bc829ccfa69f 100644 --- a/gcloud/datastore/query.py +++ b/gcloud/datastore/query.py @@ -1,7 +1,6 @@ """Create / interact with gcloud datastore queries.""" import base64 -import copy from gcloud.datastore import datastore_v1_pb2 as datastore_pb from gcloud.datastore import _helpers @@ -67,8 +66,9 @@ def _clone(self): :rtype: :class:`gcloud.datastore.query.Query` :returns: a copy of 'self'. """ - clone = copy.deepcopy(self) - clone._dataset = self._dataset # Shallow copy the dataset. + clone = self.__class__(dataset=self._dataset) + clone._pb.CopyFrom(self._pb) + clone._cursor = self._cursor return clone def to_protobuf(self): diff --git a/gcloud/datastore/test_query.py b/gcloud/datastore/test_query.py index 219b63c1e28c..6d0e42aab236 100644 --- a/gcloud/datastore/test_query.py +++ b/gcloud/datastore/test_query.py @@ -33,14 +33,17 @@ def test__clone(self): _DATASET = 'DATASET' _KIND = 'KIND' + _CURSOR = 'DEADBEEF' dataset = Dataset(_DATASET) query = self._makeOne(_KIND, dataset) + query._cursor = _CURSOR clone = query._clone() self.assertFalse(clone is query) self.assertTrue(isinstance(clone, self._getTargetClass())) self.assertTrue(clone.dataset() is dataset) kq_pb, = list(clone.kind()) self.assertEqual(kq_pb.name, _KIND) + self.assertEqual(clone._cursor, _CURSOR) def test_to_protobuf_empty(self): query = self._makeOne()