Skip to content

Commit 444cd41

Browse files
authored
Expose writerIdentity returned in sink resource. (googleapis#4704)
Closes googleapis#4703.
1 parent 5ffcc9d commit 444cd41

2 files changed

Lines changed: 24 additions & 8 deletions

File tree

logging/google/cloud/logging/sink.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __init__(self, name, filter_=None, destination=None, client=None,
5151
self.destination = destination
5252
self._client = client
5353
self._unique_writer_identity = unique_writer_identity
54+
self._writer_identity = None
5455

5556
@property
5657
def client(self):
@@ -72,6 +73,11 @@ def path(self):
7273
"""URL path for the sink's APIs"""
7374
return '/%s' % (self.full_name)
7475

76+
@property
77+
def writer_identity(self):
78+
"""Identity used for exports via the sink"""
79+
return self._writer_identity
80+
7581
@classmethod
7682
def from_api_repr(cls, resource, client):
7783
"""Factory: construct a sink given its API representation
@@ -92,7 +98,9 @@ def from_api_repr(cls, resource, client):
9298
sink_name = resource['name']
9399
destination = resource['destination']
94100
filter_ = resource.get('filter')
95-
return cls(sink_name, filter_, destination, client=client)
101+
instance = cls(sink_name, filter_, destination, client=client)
102+
instance._writer_identity = resource.get('writerIdentity')
103+
return instance
96104

97105
def _require_client(self, client):
98106
"""Check client or verify over-ride.
@@ -161,9 +169,10 @@ def reload(self, client=None):
161169
``client`` stored on the current sink.
162170
"""
163171
client = self._require_client(client)
164-
data = client.sinks_api.sink_get(self.project, self.name)
165-
self.destination = data['destination']
166-
self.filter_ = data.get('filter')
172+
resource = client.sinks_api.sink_get(self.project, self.name)
173+
self.destination = resource['destination']
174+
self.filter_ = resource.get('filter')
175+
self._writer_identity = resource.get('writerIdentity')
167176

168177
def update(self, client=None):
169178
"""API call: update sink configuration via a PUT request

logging/tests/unit/test_sink.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class TestSink(unittest.TestCase):
2121
SINK_NAME = 'sink-name'
2222
FILTER = 'logName:syslog AND severity>=INFO'
2323
DESTINATION_URI = 'faux.googleapis.com/destination'
24+
WRITER_IDENTITY = 'serviceAccount:project-123@example.com'
2425

2526
@staticmethod
2627
def _get_target_class():
@@ -67,25 +68,28 @@ def test_from_api_repr_minimal(self):
6768
klass = self._get_target_class()
6869
sink = klass.from_api_repr(RESOURCE, client=client)
6970
self.assertEqual(sink.name, self.SINK_NAME)
70-
self.assertIsNone(sink.filter_)
7171
self.assertEqual(sink.destination, self.DESTINATION_URI)
72+
self.assertIsNone(sink.filter_)
73+
self.assertIsNone(sink.writer_identity)
7274
self.assertIs(sink._client, client)
7375
self.assertEqual(sink.project, self.PROJECT)
7476
self.assertEqual(sink.full_name, FULL)
7577

76-
def test_from_api_repr_w_description(self):
78+
def test_from_api_repr_full(self):
7779
client = _Client(project=self.PROJECT)
7880
FULL = 'projects/%s/sinks/%s' % (self.PROJECT, self.SINK_NAME)
7981
RESOURCE = {
8082
'name': self.SINK_NAME,
81-
'filter': self.FILTER,
8283
'destination': self.DESTINATION_URI,
84+
'filter': self.FILTER,
85+
'writerIdentity': self.WRITER_IDENTITY,
8386
}
8487
klass = self._get_target_class()
8588
sink = klass.from_api_repr(RESOURCE, client=client)
8689
self.assertEqual(sink.name, self.SINK_NAME)
8790
self.assertEqual(sink.filter_, self.FILTER)
8891
self.assertEqual(sink.destination, self.DESTINATION_URI)
92+
self.assertEqual(sink.writer_identity, self.WRITER_IDENTITY)
8993
self.assertIs(sink._client, client)
9094
self.assertEqual(sink.project, self.PROJECT)
9195
self.assertEqual(sink.full_name, FULL)
@@ -177,6 +181,7 @@ def test_reload_w_bound_client(self):
177181

178182
self.assertEqual(sink.destination, NEW_DESTINATION_URI)
179183
self.assertIsNone(sink.filter_)
184+
self.assertIsNone(sink.writer_identity)
180185
self.assertEqual(api._sink_get_called_with,
181186
(self.PROJECT, self.SINK_NAME))
182187

@@ -187,6 +192,7 @@ def test_reload_w_alternate_client(self):
187192
'name': self.SINK_NAME,
188193
'filter': NEW_FILTER,
189194
'destination': NEW_DESTINATION_URI,
195+
'writerIdentity': self.WRITER_IDENTITY,
190196
}
191197
client1 = _Client(project=self.PROJECT)
192198
client2 = _Client(project=self.PROJECT)
@@ -196,8 +202,9 @@ def test_reload_w_alternate_client(self):
196202

197203
sink.reload(client=client2)
198204

199-
self.assertEqual(sink.filter_, NEW_FILTER)
200205
self.assertEqual(sink.destination, NEW_DESTINATION_URI)
206+
self.assertEqual(sink.filter_, NEW_FILTER)
207+
self.assertEqual(sink.writer_identity, self.WRITER_IDENTITY)
201208
self.assertEqual(api._sink_get_called_with,
202209
(self.PROJECT, self.SINK_NAME))
203210

0 commit comments

Comments
 (0)