Skip to content
33 changes: 29 additions & 4 deletions gcloud/pubsub/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@

from gcloud.client import JSONClient
from gcloud.pubsub.connection import Connection
from gcloud.pubsub.connection import _PublisherAPI
from gcloud.pubsub.connection import _SubscriberAPI
from gcloud.pubsub.connection import _IAMPolicyAPI
from gcloud.pubsub.subscription import Subscription
from gcloud.pubsub.topic import Topic

Expand All @@ -43,6 +46,28 @@ class Client(JSONClient):
"""

_connection_class = Connection
_publisher_api = _subscriber_api = _iam_policy_api = None

@property
def publisher_api(self):
"""Helper for publisher-related API calls."""
if self._publisher_api is None:
self._publisher_api = _PublisherAPI(self.connection)

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

return self._publisher_api

@property
def subscriber_api(self):
"""Helper for subscriber-related API calls."""
if self._subscriber_api is None:
self._subscriber_api = _SubscriberAPI(self.connection)
return self._subscriber_api

@property
def iam_policy_api(self):
"""Helper for IAM policy-related API calls."""
if self._iam_policy_api is None:
self._iam_policy_api = _IAMPolicyAPI(self.connection)
return self._iam_policy_api

def list_topics(self, page_size=None, page_token=None):
"""List topics for the project associated with this client.
Expand All @@ -65,8 +90,8 @@ def list_topics(self, page_size=None, page_token=None):
more topics can be retrieved with another call (pass that
value as ``page_token``).
"""
conn = self.connection
resources, next_token = conn.list_topics(
api = self.publisher_api
resources, next_token = api.list_topics(
self.project, page_size, page_token)
topics = [Topic.from_api_repr(resource, self)
for resource in resources]
Expand Down Expand Up @@ -96,8 +121,8 @@ def list_subscriptions(self, page_size=None, page_token=None):
more topics can be retrieved with another call (pass that
value as ``page_token``).
"""
conn = self.connection
resources, next_token = conn.list_subscriptions(
api = self.subscriber_api
resources, next_token = api.list_subscriptions(
self.project, page_size, page_token)
topics = {}
subscriptions = [Subscription.from_api_repr(resource, self,
Expand Down
Loading