Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sketch 'gcloud.pubsub' API. #691

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
'sphinx.ext.doctest',
'sphinx.ext.todo',
'sphinx.ext.viewcode',
]
Expand Down
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
storage-blobs
storage-buckets
storage-acl
pubsub-api


Getting started
Expand Down
251 changes: 251 additions & 0 deletions docs/pubsub-api.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
``gcloud.pubsub`` API
=====================

Connection / Authorization
--------------------------

- Inferred defaults used to create connection if none configured explicitly:

This comment was marked as spam.

This comment was marked as spam.


- credentials (derived from GAE / GCE environ if present).

- ``project_id`` (derived from GAE / GCE environ if present).

- ``scopes``


Manage topics for a project
---------------------------

Create a new topic for the default project:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> topic.create() # API request

Create a new topic for an explicit project:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name', project_id='my.project')
>>> topic.create() # API request

Check for the existance of a topic:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> topic.exists() # API request
True

List topics for the default project:

.. doctest::

>>> from gcloud import pubsub
>>> [topic.name for topic in pubsub.list_topics()] # API request
['topic_name']

List topics for an explicit project:

.. doctest::

>>> from gcloud import pubsub
>>> topics = pubsub.list_topics(project_id='my.project') # API request
>>> [topic.name for topic in topics]
['topic_name']

Delete a topic:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> topic.delete() # API request


Publish messages to a topic
---------------------------

Publish a single message to a topic, without attributes:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> topic.publish('this is the message_payload') # API request
<message_id>

This comment was marked as spam.

This comment was marked as spam.


Publish a single message to a topic, with attributes:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> topic.publish('this is another message_payload',
... attr1='value1', attr2='value2') # API request
<message_id>

Publish a set of messages to a topic (as a single request):

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> with topic as batch:
... topic.publish('this is the first message_payload')
... topic.publish('this is the second message_payload',
... attr1='value1', attr2='value2')
>>> batch
[<message_id1>, <message_id2>]

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


.. note::

The only API request happens during the ``__exit__()`` of the topic
used as a context manager.


Manage subscriptions to topics
------------------------------

Create a new pull subscription for a topic:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> subscription.create() # API request

Create a new pull subscription for a topic with a non-default ACK deadline:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', ack_deadline=90)
>>> subscription.create() # API request

Create a new push subscription for a topic:

.. doctest::

>>> ENDPOINT = 'https://example.com/hook'
>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', push_endpoint=ENDPOINT)
>>> subscription.create() # API request

Check for the existence of a subscription:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> subscription.exists() # API request
True

Convert a pull subscription to push:

.. doctest::

>>> ENDPOINT = 'https://example.com/hook'
>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> subscription.modify_push_configuration(push_endpoint=ENDPOINT) # API request

Convert a push subscription to pull:

.. doctest::

>>> ENDPOINT = 'https://example.com/hook'
>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic,
... push_endpoint=ENDPOINT)
>>> subscription.modify_push_configuration(push_endpoint=None) # API request

List subscriptions for a topic:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> topic = Topic('topic_name')
>>> subscriptions = topic.list_subscriptions() # API request
>>> [subscription.name for subscription in subscriptions]
['subscription_name']

Delete a subscription:

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> subscription.delete() # API request


Pull messages from a subscription
---------------------------------

Fetch pending messages for a pull subscription

.. note::

The messages will have been ACKed already.

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> with topic:
... topic.publish('this is the first message_payload')
... topic.publish('this is the second message_payload',
... attr1='value1', attr2='value2')
>>> messages = subscription.pull() # API request
>>> [message.id for message in messages]
[<message_id1>, <message_id2>]
>>> [message.data for message in messages]
['this is the first message_payload', 'this is the second message_payload']
>>> [message.attrs for message in messages]
[{}, {'attr1': 'value1', 'attr2': 'value2'}]

Fetch a limited number of pending messages for a pull subscription:

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> with topic:
... topic.publish('this is the first message_payload')
... topic.publish('this is the second message_payload',
... attr1='value1', attr2='value2')
>>> [message.id for message in subscription.pull(max_messages=1)]
[<message_id1>]

Fetch messages for a pull subscription without blocking (none pending):

.. doctest::

>>> from gcloud.pubsub.topic import Topic
>>> from gcloud.pubsub.subscription import Subscription
>>> topic = Topic('topic_name')
>>> subscription = Subscription('subscription_name', topic)
>>> [message.id for message in subscription.pull(return_immediately=True)]

This comment was marked as spam.

This comment was marked as spam.

[]