Skip to content

Commit 0b408b2

Browse files
committed
Add 'Subscription.auto_ack' factory.
Addresses (on the other PR): #1637 (comment)
1 parent a9b3b5d commit 0b408b2

2 files changed

Lines changed: 45 additions & 3 deletions

File tree

gcloud/pubsub/subscription.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,24 @@ def path(self):
123123
"""URL path for the subscription's APIs"""
124124
return '/%s' % (self.full_name,)
125125

126+
def auto_ack(self, return_immediately=False, max_messages=1, client=None):
127+
""":class:`AutoAck` factory
128+
129+
:type return_immediately: boolean
130+
:param return_immediately: passed through to :meth:`Subscription.pull`
131+
132+
:type max_messages: int
133+
:param max_messages: passed through to :meth:`Subscription.pull`
134+
135+
:type client: :class:`gcloud.pubsub.client.Client` or ``NoneType``
136+
:param client: passed through to :meth:`Subscription.pull` and
137+
:meth:`Subscription.acknowledge`.
138+
139+
:rtype: :class:`AutoAck`
140+
:returns: the instance created for the given ``ack_id`` and ``message``
141+
"""
142+
return AutoAck(self, return_immediately, max_messages, client)
143+
126144
def _require_client(self, client):
127145
"""Check client or verify over-ride.
128146

gcloud/pubsub/test_subscription.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,40 @@ def test_from_api_repr_w_topics_w_topic_match(self):
134134

135135
def test_full_name_and_path(self):
136136
PROJECT = 'PROJECT'
137-
SUB_NAME = 'sub_name'
138-
SUB_FULL = 'projects/%s/subscriptions/%s' % (PROJECT, SUB_NAME)
137+
SUB_FULL = 'projects/%s/subscriptions/%s' % (PROJECT, self.SUB_NAME)
139138
SUB_PATH = '/%s' % (SUB_FULL,)
140139
TOPIC_NAME = 'topic_name'
141140
CLIENT = _Client(project=PROJECT)
142141
topic = _Topic(TOPIC_NAME, client=CLIENT)
143-
subscription = self._makeOne(SUB_NAME, topic)
142+
subscription = self._makeOne(self.SUB_NAME, topic)
144143
self.assertEqual(subscription.full_name, SUB_FULL)
145144
self.assertEqual(subscription.path, SUB_PATH)
146145

146+
def test_autoack_defaults(self):
147+
from gcloud.pubsub.subscription import AutoAck
148+
client = _Client(project=self.PROJECT)
149+
topic = _Topic(self.TOPIC_NAME, client=client)
150+
subscription = self._makeOne(self.SUB_NAME, topic)
151+
auto_ack = subscription.auto_ack()
152+
self.assertTrue(isinstance(auto_ack, AutoAck))
153+
self.assertTrue(auto_ack._subscription is subscription)
154+
self.assertEqual(auto_ack._return_immediately, False)
155+
self.assertEqual(auto_ack._max_messages, 1)
156+
self.assertTrue(auto_ack._client is None)
157+
158+
def test_autoack_explicit(self):
159+
from gcloud.pubsub.subscription import AutoAck
160+
client1 = _Client(project=self.PROJECT)
161+
client2 = _Client(project=self.PROJECT)
162+
topic = _Topic(self.TOPIC_NAME, client=client1)
163+
subscription = self._makeOne(self.SUB_NAME, topic)
164+
auto_ack = subscription.auto_ack(True, 10, client2)
165+
self.assertTrue(isinstance(auto_ack, AutoAck))
166+
self.assertTrue(auto_ack._subscription is subscription)
167+
self.assertEqual(auto_ack._return_immediately, True)
168+
self.assertEqual(auto_ack._max_messages, 10)
169+
self.assertTrue(auto_ack._client is client2)
170+
147171
def test_create_pull_wo_ack_deadline_w_bound_client(self):
148172
RESPONSE = {
149173
'topic': self.TOPIC_PATH,

0 commit comments

Comments
 (0)