def test_commit_wo_transaction(self): from gcloud.datastore.connection import datastore_pb from gcloud.datastore.key import Key DATASET_ID = 'DATASET' key_pb = Key(path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf() rsp_pb = datastore_pb.CommitResponse() mutation = datastore_pb.Mutation() insert = mutation.upsert.add() insert.key.CopyFrom(key_pb) prop = insert.property.add() prop.name = 'foo' prop.value.string_value = u'Foo' conn = self._makeOne() URI = '/'.join([ conn.API_BASE_URL, 'datastore', conn.API_VERSION, 'datasets', DATASET_ID, 'commit', ]) http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString()) result = conn.commit(DATASET_ID, mutation) self.assertEqual(result.index_updates, 0) self.assertEqual(list(result.insert_auto_id_key), []) cw = http._called_with self._verifyProtobufCall(cw, URI, conn) rq_class = datastore_pb.CommitRequest request = rq_class() request.ParseFromString(cw['body']) self.assertEqual(request.transaction, '') self.assertEqual(request.mutation, mutation) self.assertEqual(request.mode, rq_class.NON_TRANSACTIONAL)
def test_commit_w_transaction(self): from gcloud.datastore import _datastore_v1_pb2 as datastore_pb DATASET_ID = 'DATASET' key_pb = self._make_key_pb(DATASET_ID) rsp_pb = datastore_pb.CommitResponse() mutation = datastore_pb.Mutation() insert = mutation.upsert.add() insert.key.CopyFrom(key_pb) prop = insert.property.add() prop.name = 'foo' prop.value.string_value = u'Foo' conn = self._makeOne() URI = '/'.join([ conn.api_base_url, 'datastore', conn.API_VERSION, 'datasets', DATASET_ID, 'commit', ]) http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString()) result = conn.commit(DATASET_ID, mutation, b'xact') self.assertEqual(result.index_updates, 0) self.assertEqual(list(result.insert_auto_id_key), []) cw = http._called_with self._verifyProtobufCall(cw, URI, conn) rq_class = datastore_pb.CommitRequest request = rq_class() request.ParseFromString(cw['body']) self.assertEqual(request.transaction, b'xact') self.assertEqual(request.mutation, mutation) self.assertEqual(request.mode, rq_class.TRANSACTIONAL)
def test_commit_w_transaction(self): from gcloud.datastore.connection import datastore_pb from gcloud.datastore.key import Key class Xact(object): def id(self): return 'xact' DATASET_ID = 'DATASET' key_pb = Key(path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf() rsp_pb = datastore_pb.CommitResponse() mutation = datastore_pb.Mutation() insert = mutation.upsert.add() insert.key.CopyFrom(key_pb) prop = insert.property.add() prop.name = 'foo' prop.value.string_value = u'Foo' conn = self._makeOne() conn.transaction(Xact()) URI = '/'.join([ conn.API_BASE_URL, 'datastore', conn.API_VERSION, 'datasets', DATASET_ID, 'commit', ]) http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString()) result = conn.commit(DATASET_ID, mutation) self.assertEqual(result.index_updates, 0) self.assertEqual(list(result.insert_auto_id_key), []) cw = http._called_with self.assertEqual(cw['uri'], URI) self.assertEqual(cw['method'], 'POST') self.assertEqual(cw['headers']['Content-Type'], 'application/x-protobuf') self.assertEqual(cw['headers']['User-Agent'], conn.USER_AGENT) rq_class = datastore_pb.CommitRequest request = rq_class() request.ParseFromString(cw['body']) self.assertEqual(request.transaction, 'xact') self.assertEqual(request.mutation, mutation) self.assertEqual(request.mode, rq_class.TRANSACTIONAL)
def test_delete_entities_w_transaction(self): from gcloud.datastore.connection import datastore_pb from gcloud.datastore.key import Key mutation = datastore_pb.Mutation() class Xact(object): def mutation(self): return mutation DATASET_ID = 'DATASET' key_pb = Key(path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf() rsp_pb = datastore_pb.CommitResponse() conn = self._makeOne() conn.transaction(Xact()) http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString()) result = conn.delete_entities(DATASET_ID, [key_pb]) self.assertEqual(result, True) self.assertEqual(http._called_with, None) mutation = conn.mutation() self.assertEqual(len(mutation.delete), 1)
def test_save_entity_w_transaction_nested_entity(self): from gcloud.datastore.connection import datastore_pb from gcloud.datastore.entity import Entity from gcloud.datastore.key import Key mutation = datastore_pb.Mutation() class Xact(object): def mutation(self): return mutation DATASET_ID = 'DATASET' nested = Entity() nested['bar'] = u'Bar' key_pb = Key(path=[{'kind': 'Kind', 'id': 1234}]).to_protobuf() rsp_pb = datastore_pb.CommitResponse() conn = self._makeOne() conn.transaction(Xact()) http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString()) result = conn.save_entity(DATASET_ID, key_pb, {'foo': nested}) self.assertEqual(result, True) self.assertEqual(http._called_with, None) mutation = conn.mutation() self.assertEqual(len(mutation.upsert), 1)