def _make_commit_response(*keys): from google.cloud.datastore_v1.types import datastore as datastore_pb2 mutation_results = [ datastore_pb2.MutationResult(key=key)._pb for key in keys ] return datastore_pb2.CommitResponse(mutation_results=mutation_results)
def _commit_helper(self, transaction=None, retry=None, timeout=None): from google.cloud.datastore_v1.types import datastore as datastore_pb2 from google.cloud.datastore.helpers import _new_value_pb project = "PROJECT" key_pb = _make_key_pb(project) rsp_pb = datastore_pb2.CommitResponse() req_pb = datastore_pb2.CommitRequest() mutation = req_pb._pb.mutations.add() insert = mutation.upsert insert.key.CopyFrom(key_pb._pb) value_pb = _new_value_pb(insert, "foo") value_pb.string_value = u"Foo" http = _make_requests_session( [_make_response(content=rsp_pb._pb.SerializeToString())]) client_info = _make_client_info() client = mock.Mock( _http=http, _base_url="test.invalid", _client_info=client_info, spec=["_http", "_base_url", "_client_info"], ) rq_class = datastore_pb2.CommitRequest ds_api = self._make_one(client) request = {"project_id": project, "mutations": [mutation]} if transaction is not None: request["transaction"] = transaction mode = request["mode"] = rq_class.Mode.TRANSACTIONAL else: mode = request["mode"] = rq_class.Mode.NON_TRANSACTIONAL kwargs = _make_retry_timeout_kwargs(retry, timeout, http) result = ds_api.commit(request=request, **kwargs) self.assertEqual(result, rsp_pb._pb) uri = _build_expected_url(client._base_url, project, "commit") request = _verify_protobuf_call( http, uri, rq_class(), retry=retry, timeout=timeout, ) self.assertEqual(list(request.mutations), [mutation]) self.assertEqual(request.mode, mode) if transaction is not None: self.assertEqual(request.transaction, transaction) else: self.assertEqual(request.transaction, b"")
def test_it(self): from google.cloud.datastore_v1.types import datastore as datastore_pb2 from google.cloud.datastore_v1.types import entity as entity_pb2 index_updates = 1337 keys = [ entity_pb2.Key(path=[entity_pb2.Key.PathElement(kind="Foo", id=1234)]), entity_pb2.Key(path=[entity_pb2.Key.PathElement(kind="Bar", name="baz")]), ] response = datastore_pb2.CommitResponse( mutation_results=[datastore_pb2.MutationResult(key=key) for key in keys], index_updates=index_updates, ) result = self._call_fut(response) self.assertEqual(result, (index_updates, [i._pb for i in keys]))
def test_commit_w_transaction(self): from google.cloud.datastore_v1.types import datastore as datastore_pb2 from google.cloud.datastore.helpers import _new_value_pb project = "PROJECT" key_pb = _make_key_pb(project) rsp_pb = datastore_pb2.CommitResponse() req_pb = datastore_pb2.CommitRequest() mutation = req_pb._pb.mutations.add() insert = mutation.upsert insert.key.CopyFrom(key_pb._pb) value_pb = _new_value_pb(insert, "foo") value_pb.string_value = u"Foo" # Create mock HTTP and client with response. http = _make_requests_session( [_make_response(content=rsp_pb._pb.SerializeToString())]) client_info = _make_client_info() client = mock.Mock( _http=http, _base_url="test.invalid", _client_info=client_info, spec=["_http", "_base_url", "_client_info"], ) # Make request. rq_class = datastore_pb2.CommitRequest ds_api = self._make_one(client) mode = rq_class.Mode.TRANSACTIONAL result = ds_api.commit(project, mode, [mutation], transaction=b"xact") # Check the result and verify the callers. self.assertEqual(result, rsp_pb._pb) uri = _build_expected_url(client._base_url, project, "commit") request = _verify_protobuf_call(http, uri, rq_class()) self.assertEqual(request.transaction, b"xact") self.assertEqual(list(request.mutations), [mutation]) self.assertEqual(request.mode, rq_class.Mode.TRANSACTIONAL)
def _make_commit_response(*new_key_ids): from google.cloud.datastore_v1.types import datastore as datastore_pb2 mutation_results = [_make_mutation(key_id) for key_id in new_key_ids] return datastore_pb2.CommitResponse(mutation_results=mutation_results)