diff --git a/gcloud/logging/sink.py b/gcloud/logging/sink.py index 16a44929404e..c817bc52ff7e 100644 --- a/gcloud/logging/sink.py +++ b/gcloud/logging/sink.py @@ -111,3 +111,18 @@ def exists(self, client=None): return False else: return True + + def reload(self, client=None): + """API call: sync local sink configuration via a GET request + + See + https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/projects.sinks/get + + :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 sink. + """ + client = self._require_client(client) + data = client.connection.api_request(method='GET', path=self.path) + self.filter_ = data['filter'] + self.destination = data['destination'] diff --git a/gcloud/logging/test_sink.py b/gcloud/logging/test_sink.py index 9e530396f178..0869789a543a 100644 --- a/gcloud/logging/test_sink.py +++ b/gcloud/logging/test_sink.py @@ -68,7 +68,7 @@ def test_create_w_alternate_client(self): 'filter': self.FILTER, 'destination': self.DESTINATION_URI, } - conn1 = _Connection({'name': FULL}) + conn1 = _Connection() client1 = _Client(project=self.PROJECT, connection=conn1) conn2 = _Connection({'name': FULL}) client2 = _Client(project=self.PROJECT, connection=conn2) @@ -96,7 +96,7 @@ def test_exists_miss_w_bound_client(self): def test_exists_hit_w_alternate_client(self): FULL = 'projects/%s/sinks/%s' % (self.PROJECT, self.SINK_NAME) - conn1 = _Connection({'name': FULL}) + conn1 = _Connection() CLIENT1 = _Client(project=self.PROJECT, connection=conn1) conn2 = _Connection({'name': FULL}) CLIENT2 = _Client(project=self.PROJECT, connection=conn2) @@ -109,6 +109,51 @@ def test_exists_hit_w_alternate_client(self): self.assertEqual(req['method'], 'GET') self.assertEqual(req['path'], '/%s' % FULL) + def test_reload_w_bound_client(self): + FULL = 'projects/%s/sinks/%s' % (self.PROJECT, self.SINK_NAME) + NEW_FILTER = 'logName:syslog AND severity>=INFO' + NEW_DESTINATION_URI = 'faux.googleapis.com/other' + RESOURCE = { + 'name': self.SINK_NAME, + 'filter': NEW_FILTER, + 'destination': NEW_DESTINATION_URI, + } + conn = _Connection(RESOURCE) + CLIENT = _Client(project=self.PROJECT, connection=conn) + sink = self._makeOne(self.SINK_NAME, self.FILTER, self.DESTINATION_URI, + client=CLIENT) + sink.reload() + self.assertEqual(sink.filter_, NEW_FILTER) + self.assertEqual(sink.destination, NEW_DESTINATION_URI) + self.assertEqual(len(conn._requested), 1) + req = conn._requested[0] + self.assertEqual(req['method'], 'GET') + self.assertEqual(req['path'], '/%s' % FULL) + + def test_reload_w_alternate_client(self): + FULL = 'projects/%s/sinks/%s' % (self.PROJECT, self.SINK_NAME) + NEW_FILTER = 'logName:syslog AND severity>=INFO' + NEW_DESTINATION_URI = 'faux.googleapis.com/other' + RESOURCE = { + 'name': self.SINK_NAME, + 'filter': NEW_FILTER, + 'destination': NEW_DESTINATION_URI, + } + conn1 = _Connection() + CLIENT1 = _Client(project=self.PROJECT, connection=conn1) + conn2 = _Connection(RESOURCE) + CLIENT2 = _Client(project=self.PROJECT, connection=conn2) + sink = self._makeOne(self.SINK_NAME, self.FILTER, self.DESTINATION_URI, + client=CLIENT1) + sink.reload(client=CLIENT2) + self.assertEqual(sink.filter_, NEW_FILTER) + self.assertEqual(sink.destination, NEW_DESTINATION_URI) + self.assertEqual(len(conn1._requested), 0) + self.assertEqual(len(conn2._requested), 1) + req = conn2._requested[0] + self.assertEqual(req['method'], 'GET') + self.assertEqual(req['path'], '/%s' % FULL) + class _Connection(object):