Skip to content

Commit 4835bc5

Browse files
committed
Making Subscription.reload() update the topic if unset.
Also: removing Subscription._project and Snapshot._project since they are never used (and they shadow data that they shouldn't).
1 parent a849060 commit 4835bc5

File tree

6 files changed

+40
-16
lines changed

6 files changed

+40
-16
lines changed

pubsub/google/cloud/pubsub/snapshot.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ def __init__(self, name, subscription=None, topic=None, client=None):
3535
self._subscription = subscription
3636
self._client = client or getattr(
3737
subscription, '_client', None) or topic._client
38-
self._project = self._client.project
3938

4039
@classmethod
4140
def from_api_repr(cls, resource, client, topics=None):

pubsub/google/cloud/pubsub/subscription.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ def __init__(self, name, topic=None, ack_deadline=None, push_endpoint=None,
8686
self.name = name
8787
self.topic = topic
8888
self._client = client or topic._client
89-
self._project = self._client.project
9089
self.ack_deadline = ack_deadline
9190
self.push_endpoint = push_endpoint
9291
self.retain_acked_messages = retain_acked_messages
@@ -274,6 +273,9 @@ def reload(self, client=None):
274273
self.ack_deadline = data.get('ackDeadlineSeconds')
275274
push_config = data.get('pushConfig', {})
276275
self.push_endpoint = push_config.get('pushEndpoint')
276+
if self.topic is None and 'topic' in data:
277+
topic_name = topic_name_from_path(data['topic'], client.project)
278+
self.topic = client.topic(topic_name)
277279

278280
def delete(self, client=None):
279281
"""API call: delete the subscription via a DELETE request.

pubsub/tests/unit/test__gax.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ def test_list_subscriptions_no_paging(self):
475475
self.assertIsInstance(subscription.topic, Topic)
476476
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
477477
self.assertIs(subscription._client, client)
478-
self.assertEqual(subscription._project, self.PROJECT)
478+
self.assertEqual(subscription.project, self.PROJECT)
479479
self.assertIsNone(subscription.ack_deadline)
480480
self.assertEqual(subscription.push_endpoint, self.PUSH_ENDPOINT)
481481

@@ -523,7 +523,7 @@ def test_list_subscriptions_with_paging(self):
523523
self.assertIsInstance(subscription.topic, Topic)
524524
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
525525
self.assertIs(subscription._client, client)
526-
self.assertEqual(subscription._project, self.PROJECT)
526+
self.assertEqual(subscription.project, self.PROJECT)
527527
self.assertIsNone(subscription.ack_deadline)
528528
self.assertEqual(subscription.push_endpoint, self.PUSH_ENDPOINT)
529529

@@ -560,7 +560,7 @@ def test_subscription_create(self):
560560

561561
def test_subscription_create_optional_params(self):
562562
import datetime
563-
563+
564564
from google.cloud.proto.pubsub.v1.pubsub_pb2 import Subscription
565565

566566
sub_pb = Subscription(name=self.SUB_PATH, topic=self.TOPIC_PATH)
@@ -1009,7 +1009,7 @@ def test_list_snapshots_no_paging(self):
10091009
self.assertIsInstance(snapshot.topic, Topic)
10101010
self.assertEqual(snapshot.topic.name, self.TOPIC_NAME)
10111011
self.assertIs(snapshot._client, client)
1012-
self.assertEqual(snapshot._project, self.PROJECT)
1012+
self.assertEqual(snapshot.project, self.PROJECT)
10131013

10141014
def test_list_snapshots_with_paging(self):
10151015
from google.cloud.proto.pubsub.v1.pubsub_pb2 import (
@@ -1047,7 +1047,7 @@ def test_list_snapshots_with_paging(self):
10471047
self.assertIsInstance(snapshot.topic, Topic)
10481048
self.assertEqual(snapshot.topic.name, self.TOPIC_NAME)
10491049
self.assertIs(snapshot._client, client)
1050-
self.assertEqual(snapshot._project, self.PROJECT)
1050+
self.assertEqual(snapshot.project, self.PROJECT)
10511051

10521052
def test_subscription_seek_hit(self):
10531053
gax_api = _GAXSubscriberAPI(_seek_ok=True)
@@ -1548,7 +1548,7 @@ def delete_snapshot(self, snapshot, options=None):
15481548
raise GaxError('error')
15491549
if not self._delete_snapshot_ok:
15501550
raise GaxError('miss', self._make_grpc_not_found())
1551-
1551+
15521552
def seek(self, subscription, time=None, snapshot=None, options=None):
15531553
from google.gax.errors import GaxError
15541554

pubsub/tests/unit/test__http.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ def test_list_subscriptions_no_paging(self):
521521
self.assertIsInstance(subscription.topic, Topic)
522522
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
523523
self.assertIs(subscription._client, client)
524-
self.assertEqual(subscription._project, self.PROJECT)
524+
self.assertEqual(subscription.project, self.PROJECT)
525525
self.assertIsNone(subscription.ack_deadline)
526526
self.assertIsNone(subscription.push_endpoint)
527527

@@ -566,7 +566,7 @@ def test_list_subscriptions_with_paging(self):
566566
self.assertIsInstance(subscription.topic, Topic)
567567
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
568568
self.assertIs(subscription._client, client)
569-
self.assertEqual(subscription._project, self.PROJECT)
569+
self.assertEqual(subscription.project, self.PROJECT)
570570
self.assertIsNone(subscription.ack_deadline)
571571
self.assertIsNone(subscription.push_endpoint)
572572

@@ -612,7 +612,7 @@ def test_subscription_create_defaults(self):
612612

613613
def test_subscription_create_retain_messages(self):
614614
import datetime
615-
615+
616616
RESOURCE = {'topic': self.TOPIC_PATH,
617617
'retainAckedMessages': True,
618618
'messageRetentionDuration': {
@@ -637,7 +637,7 @@ def test_subscription_create_retain_messages(self):
637637
path = '/%s' % (self.SUB_PATH,)
638638
self.assertEqual(connection._called_with['path'], path)
639639
self.assertEqual(connection._called_with['data'], RESOURCE)
640-
640+
641641
def test_subscription_create_explicit(self):
642642
ACK_DEADLINE = 90
643643
PUSH_ENDPOINT = 'https://api.example.com/push'

pubsub/tests/unit/test_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def test_list_subscriptions_no_paging(self):
280280
self.assertIsInstance(subscription.topic, Topic)
281281
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
282282
self.assertIs(subscription._client, client)
283-
self.assertEqual(subscription._project, self.PROJECT)
283+
self.assertEqual(subscription.project, self.PROJECT)
284284
self.assertIsNone(subscription.ack_deadline)
285285
self.assertIsNone(subscription.push_endpoint)
286286

@@ -334,7 +334,7 @@ def test_list_subscriptions_with_paging(self):
334334
self.assertIsInstance(subscription.topic, Topic)
335335
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
336336
self.assertIs(subscription._client, client)
337-
self.assertEqual(subscription._project, self.PROJECT)
337+
self.assertEqual(subscription.project, self.PROJECT)
338338
self.assertEqual(subscription.ack_deadline, ACK_DEADLINE)
339339
self.assertEqual(subscription.push_endpoint, PUSH_ENDPOINT)
340340

@@ -408,7 +408,7 @@ def test_subscription_factory(self):
408408
self.assertEqual(new_subscription.name, sub_name)
409409
self.assertIsNone(new_subscription.topic)
410410
self.assertIs(new_subscription._client, client_obj)
411-
self.assertEqual(new_subscription._project, project)
411+
self.assertEqual(new_subscription.project, project)
412412
self.assertEqual(new_subscription.ack_deadline, ack_deadline)
413413
self.assertEqual(new_subscription.push_endpoint, push_endpoint)
414414
self.assertTrue(new_subscription.retain_acked_messages)

pubsub/tests/unit/test_subscription.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,29 @@ def test_reload_w_bound_client(self):
259259
self.assertEqual(subscription.push_endpoint, self.ENDPOINT)
260260
self.assertEqual(api._subscription_got, self.SUB_PATH)
261261

262+
def test_reload_sets_topic(self):
263+
from google.cloud.pubsub.topic import Topic
264+
265+
response = {
266+
'name': self.SUB_PATH,
267+
'topic': self.TOPIC_PATH,
268+
'ackDeadlineSeconds': self.DEADLINE,
269+
'pushConfig': {'pushEndpoint': self.ENDPOINT},
270+
}
271+
client = _Client(project=self.PROJECT)
272+
api = client.subscriber_api = _FauxSubscribererAPI()
273+
api._subscription_get_response = response
274+
subscription = self._make_one(self.SUB_NAME, client=client)
275+
276+
self.assertIsNone(subscription.topic)
277+
subscription.reload()
278+
279+
self.assertEqual(subscription.ack_deadline, self.DEADLINE)
280+
self.assertEqual(subscription.push_endpoint, self.ENDPOINT)
281+
self.assertEqual(api._subscription_got, self.SUB_PATH)
282+
self.assertIsInstance(subscription.topic, Topic)
283+
self.assertEqual(subscription.topic.name, self.TOPIC_NAME)
284+
262285
def test_reload_w_alternate_client(self):
263286
RESPONSE = {
264287
'name': self.SUB_PATH,
@@ -506,7 +529,7 @@ def test_seek_snapshot_w_alternate_client(self):
506529

507530
def test_seek_time_w_bound_client(self):
508531
import datetime
509-
532+
510533
from google.cloud import _helpers
511534

512535
time = datetime.time()

0 commit comments

Comments
 (0)