示例#1
0
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)
示例#2
0
    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"")
示例#3
0
    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)