From 9ec6addc16f81d5eb35db311bfb61aceabf22675 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Thu, 3 Mar 2016 15:37:06 -0500 Subject: [PATCH] Add 'Logger.log_struct' method. --- gcloud/logging/logger.py | 27 +++++++++++++++++++++ gcloud/logging/test_logger.py | 45 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/gcloud/logging/logger.py b/gcloud/logging/logger.py index 7d5959347d7c..8f280f550b26 100644 --- a/gcloud/logging/logger.py +++ b/gcloud/logging/logger.py @@ -87,3 +87,30 @@ def log_text(self, text, client=None): } client.connection.api_request( method='POST', path='/entries:write', data=data) + + def log_struct(self, info, client=None): + """API call: log a text message via a POST request + + See: + https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/entries/write + + :type info: dict + :param info: the log entry information + + :type client: :class:`gcloud.logging.client.Client` or ``NoneType`` + :param client: the client to use. If not passed, falls back to the + ``client`` stored on the current logger. + """ + client = self._require_client(client) + + data = { + 'entries': [{ + 'logName': self.full_name, + 'jsonPayload': info, + 'resource': { + 'type': 'global', + }, + }], + } + client.connection.api_request( + method='POST', path='/entries:write', data=data) diff --git a/gcloud/logging/test_logger.py b/gcloud/logging/test_logger.py index fcac20719c87..317e48a8e70c 100644 --- a/gcloud/logging/test_logger.py +++ b/gcloud/logging/test_logger.py @@ -82,6 +82,51 @@ def test_log_text_w_unicode_explicit_client(self): self.assertEqual(req['path'], '/entries:write') self.assertEqual(req['data'], SENT) + def test_log_struct_w_implicit_client(self): + STRUCT = {'message': 'MESSAGE', 'weather': 'cloudy'} + conn = _Connection({}) + client = _Client(self.PROJECT, conn) + logger = self._makeOne(self.LOGGER_NAME, client=client) + logger.log_struct(STRUCT) + self.assertEqual(len(conn._requested), 1) + req = conn._requested[0] + SENT = { + 'entries': [{ + 'logName': 'projects/%s/logs/%s' % ( + self.PROJECT, self.LOGGER_NAME), + 'jsonPayload': STRUCT, + 'resource': { + 'type': 'global', + }, + }], + } + self.assertEqual(req['method'], 'POST') + self.assertEqual(req['path'], '/entries:write') + self.assertEqual(req['data'], SENT) + + def test_log_struct_w_explicit_client(self): + STRUCT = {'message': 'MESSAGE', 'weather': 'cloudy'} + conn = _Connection({}) + client1 = _Client(self.PROJECT, object()) + client2 = _Client(self.PROJECT, conn) + logger = self._makeOne(self.LOGGER_NAME, client=client1) + logger.log_struct(STRUCT, client=client2) + self.assertEqual(len(conn._requested), 1) + req = conn._requested[0] + SENT = { + 'entries': [{ + 'logName': 'projects/%s/logs/%s' % ( + self.PROJECT, self.LOGGER_NAME), + 'jsonPayload': STRUCT, + 'resource': { + 'type': 'global', + }, + }], + } + self.assertEqual(req['method'], 'POST') + self.assertEqual(req['path'], '/entries:write') + self.assertEqual(req['data'], SENT) + class _Connection(object):