Skip to content

Commit b587a66

Browse files
committed
Snippets for Subscription IAM methods.
1 parent e228a53 commit b587a66

File tree

3 files changed

+85
-37
lines changed

3 files changed

+85
-37
lines changed

docs/pubsub-usage.rst

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -195,44 +195,18 @@ Update the acknowlegement deadline for pulled messages:
195195

196196
Fetch the IAM policy for a subscription
197197

198-
.. doctest::
199-
200-
>>> from gcloud import pubsub
201-
>>> client = pubsub.Client()
202-
>>> topic = client.topic('topic_name')
203-
>>> subscription = topic.subscription('subscription_name')
204-
>>> policy = subscription.get_iam_policy() # API request
205-
>>> policy.etag
206-
'DEADBEEF'
207-
>>> policy.owners
208-
['user:phred@example.com']
209-
>>> policy.writers
210-
['systemAccount:abc-1234@systemaccounts.example.com']
211-
>>> policy.readers
212-
['domain:example.com']
198+
.. literalinclude:: pubsub_snippets.py
199+
:start-after: [START subscription_get_iam_policy]
200+
:end-before: [END subscription_get_iam_policy]
213201

214202
Update the IAM policy for a subscription:
215203

216-
.. doctest::
217-
218-
>>> from gcloud import pubsub
219-
>>> client = pubsub.Client()
220-
>>> topic = client.topic('topic_name')
221-
>>> subscription = topic.subscription('subscription_name')
222-
>>> policy = subscription.get_iam_policy() # API request
223-
>>> policy.writers.add(policy.group('editors-list@example.com'))
224-
>>> subscription.set_iam_policy(policy) # API request
204+
.. literalinclude:: pubsub_snippets.py
205+
:start-after: [START subscription_set_iam_policy]
206+
:end-before: [END subscription_set_iam_policy]
225207

226208
Test permissions allowed by the current IAM policy on a subscription:
227209

228-
.. doctest::
229-
230-
>>> from gcloud import pubsub
231-
>>> from gcloud.pubsub.iam import OWNER_ROLE, EDITOR_ROLE, VIEWER_ROLE
232-
>>> client = pubsub.Client()
233-
>>> topic = client.topic('topic_name')
234-
>>> subscription = topic.subscription('subscription_name')
235-
>>> allowed = subscription.check_iam_permissions(
236-
... [VIEWER_ROLE, EDITOR_ROLE, OWNER_ROLE]) # API request
237-
>>> allowed == [VIEWER_ROLE, EDITOR_ROLE]
238-
True
210+
.. literalinclude:: pubsub_snippets.py
211+
:start-after: [START subscription_check_iam_permissions]
212+
:end-before: [END subscription_check_iam_permissions]

docs/pubsub_snippets.py

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,22 @@ def topic_iam_policy(client, to_delete):
131131

132132
# [START topic_get_iam_policy]
133133
policy = topic.get_iam_policy() # API request
134+
# [END topic_get_iam_policy]
135+
134136
assert len(policy.viewers) == 0
135137
assert len(policy.editors) == 0
136138
assert len(policy.owners) == 0
137-
# [END topic_get_iam_policy]
138139

139140
# [START topic_set_iam_policy]
140141
ALL_USERS = policy.all_users()
141142
policy.viewers.add(ALL_USERS)
142143
LOGS_GROUP = policy.group('cloud-logs@google.com')
143144
policy.editors.add(LOGS_GROUP)
144145
new_policy = topic.set_iam_policy(policy) # API request
146+
# [END topic_set_iam_policy]
147+
145148
assert ALL_USERS in new_policy.viewers
146149
assert LOGS_GROUP in new_policy.editors
147-
# [END topic_set_iam_policy]
148150

149151

150152
# @snippet # Disabled due to #1687
@@ -363,6 +365,60 @@ def log_exception(_):
363365
(extras,))
364366

365367

368+
@snippet
369+
def subscription_iam_policy(client, to_delete):
370+
"""Fetch / set a subscription's IAM policy."""
371+
TOPIC_NAME = 'subscription_iam_policy-%d' % (_millis(),)
372+
SUB_NAME = 'subscription_iam_policy-defaults-%d' % (_millis(),)
373+
topic = client.topic(TOPIC_NAME)
374+
topic.create()
375+
to_delete.append(topic)
376+
377+
subscription = topic.subscription(SUB_NAME)
378+
subscription.create()
379+
to_delete.append(subscription)
380+
381+
# [START subscription_get_iam_policy]
382+
policy = subscription.get_iam_policy() # API request
383+
# [END subscription_get_iam_policy]
384+
385+
assert len(policy.viewers) == 0
386+
assert len(policy.editors) == 0
387+
assert len(policy.owners) == 0
388+
389+
# [START subscription_set_iam_policy]
390+
ALL_USERS = policy.all_users()
391+
policy.viewers.add(ALL_USERS)
392+
LOGS_GROUP = policy.group('cloud-logs@google.com')
393+
policy.editors.add(LOGS_GROUP)
394+
new_policy = subscription.set_iam_policy(policy) # API request
395+
# [END subscription_set_iam_policy]
396+
397+
assert ALL_USERS in new_policy.viewers
398+
assert LOGS_GROUP in new_policy.editors
399+
400+
401+
# @snippet # Disabled due to #1687
402+
def subscription_check_iam_permissions(client, to_delete):
403+
"""Check subscription IAM permissions."""
404+
TOPIC_NAME = 'subscription_check_iam_permissions-%d' % (_millis(),)
405+
SUB_NAME = 'subscription_check_iam_permissions-defaults-%d' % (_millis(),)
406+
topic = client.topic(TOPIC_NAME)
407+
topic.create()
408+
to_delete.append(topic)
409+
410+
subscription = topic.subscription(SUB_NAME)
411+
subscription.create()
412+
to_delete.append(subscription)
413+
414+
# [START subscription_check_iam_permissions]
415+
from gcloud.pubsub.iam import OWNER_ROLE, EDITOR_ROLE, VIEWER_ROLE
416+
TO_CHECK = [OWNER_ROLE, EDITOR_ROLE, VIEWER_ROLE]
417+
ALLOWED = subscription.check_iam_permissions(TO_CHECK)
418+
assert set(ALLOWED) == set(TO_CHECK)
419+
# [END subscription_check_iam_permissions]
420+
421+
366422
def _find_examples():
367423
funcs = [obj for obj in globals().values()
368424
if getattr(obj, '_snippet', False)]

gcloud/pubsub/subscription.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,12 @@ def get_iam_policy(self, client=None):
338338
See:
339339
https://cloud.google.com/pubsub/reference/rest/v1/projects.subscriptions/getIamPolicy
340340
341+
Example:
342+
343+
.. literalinclude:: pubsub_snippets.py
344+
:start-after: [START subscription_get_iam_policy]
345+
:end-before: [END subscription_get_iam_policy]
346+
341347
:type client: :class:`gcloud.pubsub.client.Client` or ``NoneType``
342348
:param client: the client to use. If not passed, falls back to the
343349
``client`` stored on the current subscription's topic.
@@ -356,6 +362,12 @@ def set_iam_policy(self, policy, client=None):
356362
See:
357363
https://cloud.google.com/pubsub/reference/rest/v1/projects.subscriptions/setIamPolicy
358364
365+
Example:
366+
367+
.. literalinclude:: pubsub_snippets.py
368+
:start-after: [START subscription_set_iam_policy]
369+
:end-before: [END subscription_set_iam_policy]
370+
359371
:type policy: :class:`gcloud.pubsub.iam.Policy`
360372
:param policy: the new policy, typically fetched via
361373
:meth:`get_iam_policy` and updated in place.
@@ -379,6 +391,12 @@ def check_iam_permissions(self, permissions, client=None):
379391
See:
380392
https://cloud.google.com/pubsub/reference/rest/v1/projects.subscriptions/testIamPermissions
381393
394+
Example:
395+
396+
.. literalinclude:: pubsub_snippets.py
397+
:start-after: [START subscription_check_iam_permissions]
398+
:end-before: [END subscription_check_iam_permissions]
399+
382400
:type permissions: list of string
383401
:param permissions: list of permissions to be tested
384402

0 commit comments

Comments
 (0)