Skip to content

Commit 714cd5d

Browse files
committed
Merge pull request #257 from tseaver/168_169-connection_delete_entities
Fix #168 and #169: Rationalize 'Connection.delete_entities'
2 parents 20ac9ef + e8dda0f commit 714cd5d

File tree

4 files changed

+12
-101
lines changed

4 files changed

+12
-101
lines changed

gcloud/datastore/connection.py

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -405,38 +405,15 @@ def delete_entities(self, dataset_id, key_pbs):
405405
406406
:rtype: boolean (if in a transaction) or else
407407
:class:`gcloud.datastore.datastore_v1_pb2.MutationResult`.
408-
:returns: True (if in a transaction) or else a mutation result
409-
protobuf.
408+
:returns: True
410409
"""
411410
mutation = self.mutation()
412411

413412
for key_pb in key_pbs:
414413
delete = mutation.delete.add()
415414
delete.CopyFrom(key_pb)
416415

417-
if self.transaction():
418-
return True
419-
else:
420-
return self.commit(dataset_id, mutation)
421-
422-
def delete_entity(self, dataset_id, key_pb):
423-
"""Delete a single key from a dataset in the Cloud Datastore.
424-
425-
This method deals only with
426-
:class:`gcloud.datastore.datastore_v1_pb2.Key` protobufs
427-
and not with any of the other abstractions.
428-
For example, it's used under the hood in the
429-
:func:`gcloud.datastore.entity.Entity.delete` method.
430-
431-
:type dataset_id: string
432-
:param dataset_id: The dataset from which to delete the key.
433-
434-
:type key_pb: :class:`gcloud.datastore.datastore_v1_pb2.Key`
435-
:param key_pb: The key to delete from the datastore.
416+
if not self.transaction():
417+
self.commit(dataset_id, mutation)
436418

437-
:rtype: boolean (if in a transaction) or else
438-
:class:`gcloud.datastore.datastore_v1_pb2.MutationResult`.
439-
:returns: True (if in a transaction) or else a mutation result
440-
protobuf.
441-
"""
442-
return self.delete_entities(dataset_id, [key_pb])
419+
return True

gcloud/datastore/entity.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,10 @@ def delete(self):
242242
"""
243243
key = self._must_key
244244
dataset = key.dataset()
245-
dataset.connection().delete_entity(
246-
dataset_id=dataset.id(), key_pb=key.to_protobuf())
245+
dataset.connection().delete_entities(
246+
dataset_id=dataset.id(),
247+
key_pbs=[key.to_protobuf()],
248+
)
247249

248250
def __repr__(self):
249251
if self._key:

gcloud/datastore/test_connection.py

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,7 @@ def test_delete_entities_wo_transaction(self):
778778
])
779779
http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString())
780780
result = conn.delete_entities(DATASET_ID, [key_pb])
781-
self.assertEqual(result.index_updates, 0)
782-
self.assertEqual(list(result.insert_auto_id_key), [])
781+
self.assertEqual(result, True)
783782
cw = http._called_with
784783
self.assertEqual(cw['uri'], URI)
785784
self.assertEqual(cw['method'], 'POST')
@@ -825,73 +824,6 @@ def mutation(self):
825824
mutation = conn.mutation()
826825
self.assertEqual(len(mutation.delete), 1)
827826

828-
def test_delete_entity_wo_transaction(self):
829-
from gcloud.datastore.connection import datastore_pb
830-
from gcloud.datastore.dataset import Dataset
831-
from gcloud.datastore.key import Key
832-
833-
DATASET_ID = 'DATASET'
834-
key_pb = Key(dataset=Dataset(DATASET_ID),
835-
path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf()
836-
rsp_pb = datastore_pb.CommitResponse()
837-
conn = self._makeOne()
838-
URI = '/'.join([
839-
conn.API_BASE_URL,
840-
'datastore',
841-
conn.API_VERSION,
842-
'datasets',
843-
DATASET_ID,
844-
'commit',
845-
])
846-
http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString())
847-
result = conn.delete_entity(DATASET_ID, key_pb)
848-
self.assertEqual(result.index_updates, 0)
849-
self.assertEqual(list(result.insert_auto_id_key), [])
850-
cw = http._called_with
851-
self.assertEqual(cw['uri'], URI)
852-
self.assertEqual(cw['method'], 'POST')
853-
expected_headers = {
854-
'Content-Type': 'application/x-protobuf',
855-
'Content-Length': '30',
856-
'User-Agent': conn.USER_AGENT,
857-
}
858-
self.assertEqual(cw['headers'], expected_headers)
859-
rq_class = datastore_pb.CommitRequest
860-
request = rq_class()
861-
request.ParseFromString(cw['body'])
862-
self.assertEqual(request.transaction, '')
863-
mutation = request.mutation
864-
self.assertEqual(len(mutation.insert_auto_id), 0)
865-
self.assertEqual(len(mutation.upsert), 0)
866-
deletes = list(mutation.delete)
867-
self.assertEqual(len(deletes), 1)
868-
delete = deletes[0]
869-
self.assertEqual(delete, key_pb)
870-
self.assertEqual(request.mode, rq_class.NON_TRANSACTIONAL)
871-
872-
def test_delete_entity_w_transaction(self):
873-
from gcloud.datastore.connection import datastore_pb
874-
from gcloud.datastore.dataset import Dataset
875-
from gcloud.datastore.key import Key
876-
877-
mutation = datastore_pb.Mutation()
878-
879-
class Xact(object):
880-
def mutation(self):
881-
return mutation
882-
DATASET_ID = 'DATASET'
883-
key_pb = Key(dataset=Dataset(DATASET_ID),
884-
path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf()
885-
rsp_pb = datastore_pb.CommitResponse()
886-
conn = self._makeOne()
887-
conn.transaction(Xact())
888-
http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString())
889-
result = conn.delete_entity(DATASET_ID, key_pb)
890-
self.assertEqual(result, True)
891-
self.assertEqual(http._called_with, None)
892-
mutation = conn.mutation()
893-
self.assertEqual(len(mutation.delete), 1)
894-
895827

896828
class Http(object):
897829

gcloud/datastore/test_entity.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def test_delete(self):
196196
entity.key(key)
197197
entity['foo'] = 'Foo'
198198
self.assertTrue(entity.delete() is None)
199-
self.assertEqual(connection._deleted, (_DATASET_ID, 'KEY'))
199+
self.assertEqual(connection._deleted, (_DATASET_ID, ['KEY']))
200200

201201
def test___repr___no_key_empty(self):
202202
entity = self._makeOne(None, None)
@@ -264,8 +264,8 @@ def save_entity(self, dataset_id, key_pb, properties):
264264
self._saved = (dataset_id, key_pb, properties)
265265
return self._save_result
266266

267-
def delete_entity(self, dataset_id, key_pb):
268-
self._deleted = (dataset_id, key_pb)
267+
def delete_entities(self, dataset_id, key_pbs):
268+
self._deleted = (dataset_id, key_pbs)
269269

270270

271271
class _Transaction(object):

0 commit comments

Comments
 (0)