def test_subscription_get_hit(self): from google.cloud.grpc.pubsub.v1.pubsub_pb2 import PushConfig from google.cloud.grpc.pubsub.v1.pubsub_pb2 import Subscription push_cfg_pb = PushConfig(push_endpoint=self.PUSH_ENDPOINT) sub_pb = Subscription(name=self.SUB_PATH, topic=self.TOPIC_PATH, push_config=push_cfg_pb) gax_api = _GAXSubscriberAPI(_get_subscription_response=sub_pb) client = _Client(self.PROJECT) api = self._make_one(gax_api, client) resource = api.subscription_get(self.SUB_PATH) expected = { 'name': self.SUB_PATH, 'topic': self.TOPIC_PATH, 'pushConfig': { 'pushEndpoint': self.PUSH_ENDPOINT, }, } self.assertEqual(resource, expected) sub_path, options = gax_api._get_subscription_called_with self.assertEqual(sub_path, self.SUB_PATH) self.assertIsNone(options)
def _item_to_sub_for_client(iterator, resource, topics): """Convert a subscription to the native object. .. note:: This method does not have the correct signature to be used as the ``item_to_value`` argument to :class:`~google.cloud.iterator.Iterator`. It is intended to be patched with a mutable topics argument that can be updated on subsequent calls. For an example, see how the method is used above in :meth:`_SubscriberAPI.list_subscriptions`. :type iterator: :class:`~google.cloud.iterator.Iterator` :param iterator: The iterator that is currently in use. :type resource: dict :param resource: A subscription returned from the API. :type topics: dict :param topics: A dictionary of topics to be used (and modified) as new subscriptions are created bound to topics. :rtype: :class:`~google.cloud.pubsub.subscription.Subscription` :returns: The next subscription in the page. """ return Subscription.from_api_repr(resource, iterator.client, topics=topics)
def _item_to_sub_for_client(iterator, sub_pb, topics): """Convert a subscription protobuf to the native object. .. note:: This method does not have the correct signature to be used as the ``item_to_value`` argument to :class:`~google.cloud.iterator.Iterator`. It is intended to be patched with a mutable topics argument that can be updated on subsequent calls. For an example, see how the method is used above in :meth:`_SubscriberAPI.list_subscriptions`. :type iterator: :class:`~google.cloud.iterator.Iterator` :param iterator: The iterator that is currently in use. :type sub_pb: :class:`.pubsub_pb2.Subscription` :param sub_pb: A subscription returned from the API. :type topics: dict :param topics: A dictionary of topics to be used (and modified) as new subscriptions are created bound to topics. :rtype: :class:`~google.cloud.pubsub.subscription.Subscription` :returns: The next subscription in the page. """ resource = MessageToDict(sub_pb) return Subscription.from_api_repr( resource, iterator.client, topics=topics)
def list_subscriptions(self, page_size=None, page_token=None): """List subscriptions for the project associated with this client. See: https://cloud.google.com/pubsub/reference/rest/v1/projects.topics/list Example: .. literalinclude:: pubsub_snippets.py :start-after: [START client_list_subscriptions] :end-before: [END client_list_subscriptions] :type page_size: int :param page_size: maximum number of topics to return, If not passed, defaults to a value set by the API. :type page_token: string :param page_token: opaque marker for the next "page" of topics. If not passed, the API will return the first page of topics. :rtype: tuple, (list, str) :returns: list of :class:`~.pubsub.subscription.Subscription`, plus a "next page token" string: if not None, indicates that more topics can be retrieved with another call (pass that value as ``page_token``). """ api = self.subscriber_api resources, next_token = api.list_subscriptions( self.project, page_size, page_token) topics = {} subscriptions = [Subscription.from_api_repr(resource, self, topics=topics) for resource in resources] return subscriptions, next_token
def subscription(self, name, ack_deadline=None, push_endpoint=None, retain_acked_messages=None, message_retention_duration=None): """Creates a subscription bound to the current topic. Example: pull-mode subcription, default parameter values .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_defaults] :end-before: [END topic_subscription_defaults] Example: pull-mode subcription, override ``ack_deadline`` default .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_ack90] :end-before: [END topic_subscription_ack90] Example: push-mode subcription .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_push] :end-before: [END topic_subscription_push] :type name: str :param name: the name of the subscription :type ack_deadline: int :param ack_deadline: the deadline (in seconds) by which messages pulled from the back-end must be acknowledged. :type push_endpoint: str :param push_endpoint: URL to which messages will be pushed by the back-end. If not set, the application must pull messages. :type retain_acked_messages: bool :param retain_acked_messages: (Optional) Whether to retain acked messages. If set, acked messages are retained in the subscription's backlog for a duration indicated by `message_retention_duration`. :type message_retention_duration: :class:`datetime.timedelta` :param message_retention_duration: (Optional) Whether to retain acked messages. If set, acked messages are retained in the subscription's backlog for a duration indicated by `message_retention_duration`. If unset, defaults to 7 days. :rtype: :class:`Subscription` :returns: The subscription created with the passed in arguments. """ return Subscription( name, self, ack_deadline=ack_deadline, push_endpoint=push_endpoint, retain_acked_messages=retain_acked_messages, message_retention_duration=message_retention_duration)
def subscription(self, name, ack_deadline=None, push_endpoint=None, retain_acked_messages=None, message_retention_duration=None): """Creates a subscription bound to the current client. Example: .. literalinclude:: snippets.py :start-after: [START client_subscription] :end-before: [END client_subscription] :dedent: 4 :type name: str :param name: the name of the subscription to be constructed. :type ack_deadline: int :param ack_deadline: (Optional) The deadline (in seconds) by which messages pulledfrom the back-end must be acknowledged. :type push_endpoint: str :param push_endpoint: (Optional) URL to which messages will be pushed by the back-end. If not set, the application must pull messages. :type retain_acked_messages: bool :param retain_acked_messages: (Optional) Whether to retain acked messages. If set, acked messages are retained in the subscription's backlog for a duration indicated by ``message_retention_duration``. :type message_retention_duration: :class:`datetime.timedelta` :param message_retention_duration: (Optional) Whether to retain acked messages. If set, acked messages are retained in the subscription's backlog for a duration indicated by ``message_retention_duration``. If unset, defaults to 7 days. :rtype: :class:`~google.cloud.pubsub.subscription.Subscription` :returns: Subscription created with the current client. """ return Subscription( name, ack_deadline=ack_deadline, push_endpoint=push_endpoint, retain_acked_messages=retain_acked_messages, message_retention_duration=message_retention_duration, client=self)
def _item_to_subscription_for_topic(iterator, subscription_path): """Convert a subscription name to the native object. :type iterator: :class:`~google.cloud.iterator.Iterator` :param iterator: The iterator that is currently in use. :type subscription_path: str :param subscription_path: Subscription path returned from the API. :rtype: :class:`~google.cloud.pubsub.subscription.Subscription` :returns: The next subscription in the page. """ subscription_name = subscription_name_from_path(subscription_path, iterator.client.project) return Subscription(subscription_name, iterator.topic)
def list_subscriptions(self, page_size=None, page_token=None, client=None): """List subscriptions for the project associated with this client. See: https://cloud.google.com/pubsub/reference/rest/v1/projects.topics.subscriptions/list Example: .. literalinclude:: pubsub_snippets.py :start-after: [START topic_list_subscriptions] :end-before: [END topic_list_subscriptions] :type page_size: int :param page_size: maximum number of topics to return, If not passed, defaults to a value set by the API. :type page_token: string :param page_token: opaque marker for the next "page" of topics. If not passed, the API will return the first page of topics. :type client: :class:`~google.cloud.pubsub.client.Client` or ``NoneType`` :param client: the client to use. If not passed, falls back to the ``client`` stored on the current topic. :rtype: tuple, (list, str) :returns: list of :class:`~.pubsub.subscription.Subscription`, plus a "next page token" string: if not None, indicates that more topics can be retrieved with another call (pass that value as ``page_token``). """ client = self._require_client(client) api = client.publisher_api sub_paths, next_token = api.topic_list_subscriptions( self.full_name, page_size, page_token) subscriptions = [] for sub_path in sub_paths: sub_name = subscription_name_from_path(sub_path, self.project) subscriptions.append(Subscription(sub_name, self)) return subscriptions, next_token
def subscription(self, name, ack_deadline=None, push_endpoint=None): """Creates a subscription bound to the current topic. Example: pull-mode subcription, default paramter values .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_defaults] :end-before: [END topic_subscription_defaults] Example: pull-mode subcription, override ``ack_deadline`` default .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_ack90] :end-before: [END topic_subscription_ack90] Example: push-mode subcription .. literalinclude:: pubsub_snippets.py :start-after: [START topic_subscription_push] :end-before: [END topic_subscription_push] :type name: string :param name: the name of the subscription :type ack_deadline: int :param ack_deadline: the deadline (in seconds) by which messages pulled from the back-end must be acknowledged. :type push_endpoint: string :param push_endpoint: URL to which messages will be pushed by the back-end. If not set, the application must pull messages. :rtype: :class:`Subscription` :returns: The subscription created with the passed in arguments. """ return Subscription(name, self, ack_deadline=ack_deadline, push_endpoint=push_endpoint)
def test_subscription_create(self): from google.cloud.grpc.pubsub.v1.pubsub_pb2 import Subscription sub_pb = Subscription(name=self.SUB_PATH, topic=self.TOPIC_PATH) gax_api = _GAXSubscriberAPI(_create_subscription_response=sub_pb) client = _Client(self.PROJECT) api = self._make_one(gax_api, client) resource = api.subscription_create(self.SUB_PATH, self.TOPIC_PATH) expected = { 'name': self.SUB_PATH, 'topic': self.TOPIC_PATH, } self.assertEqual(resource, expected) name, topic, push_config, ack_deadline, options = ( gax_api._create_subscription_called_with) self.assertEqual(name, self.SUB_PATH) self.assertEqual(topic, self.TOPIC_PATH) self.assertIsNone(push_config) self.assertEqual(ack_deadline, 0) self.assertIsNone(options)