1717
1818from gcloud .client import JSONClient
1919from gcloud .pubsub .connection import Connection
20+ from gcloud .pubsub .connection import _PublisherAPI
21+ from gcloud .pubsub .connection import _SubscriberAPI
22+ from gcloud .pubsub .connection import _IAMPolicyAPI
2023from gcloud .pubsub .subscription import Subscription
2124from gcloud .pubsub .topic import Topic
2225
@@ -43,6 +46,28 @@ class Client(JSONClient):
4346 """
4447
4548 _connection_class = Connection
49+ _publisher_api = _subscriber_api = _iam_policy_api = None
50+
51+ @property
52+ def publisher_api (self ):
53+ """Helper for publisher-related API calls."""
54+ if self ._publisher_api is None :
55+ self ._publisher_api = _PublisherAPI (self .connection )
56+ return self ._publisher_api
57+
58+ @property
59+ def subscriber_api (self ):
60+ """Helper for subscriber-related API calls."""
61+ if self ._subscriber_api is None :
62+ self ._subscriber_api = _SubscriberAPI (self .connection )
63+ return self ._subscriber_api
64+
65+ @property
66+ def iam_policy_api (self ):
67+ """Helper for IAM policy-related API calls."""
68+ if self ._iam_policy_api is None :
69+ self ._iam_policy_api = _IAMPolicyAPI (self .connection )
70+ return self ._iam_policy_api
4671
4772 def list_topics (self , page_size = None , page_token = None ):
4873 """List topics for the project associated with this client.
@@ -65,8 +90,8 @@ def list_topics(self, page_size=None, page_token=None):
6590 more topics can be retrieved with another call (pass that
6691 value as ``page_token``).
6792 """
68- conn = self .connection
69- resources , next_token = conn .list_topics (
93+ api = self .publisher_api
94+ resources , next_token = api .list_topics (
7095 self .project , page_size , page_token )
7196 topics = [Topic .from_api_repr (resource , self )
7297 for resource in resources ]
@@ -96,8 +121,8 @@ def list_subscriptions(self, page_size=None, page_token=None):
96121 more topics can be retrieved with another call (pass that
97122 value as ``page_token``).
98123 """
99- conn = self .connection
100- resources , next_token = conn .list_subscriptions (
124+ api = self .subscriber_api
125+ resources , next_token = api .list_subscriptions (
101126 self .project , page_size , page_token )
102127 topics = {}
103128 subscriptions = [Subscription .from_api_repr (resource , self ,
0 commit comments