示例#1
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      A serialized object (dict) describing the results of the operation. This
      description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      An HttpException if there was a problem calling the
      API subscriptions.Patch command.
    """
        client = subscriptions.SubscriptionsClient()
        subscription_ref = args.CONCEPTS.subscription.Parse()

        try:
            result = client.Patch(
                subscription_ref,
                ack_deadline=args.ack_deadline,
                push_config=util.ParsePushConfig(args.push_endpoint),
                retain_acked_messages=args.retain_acked_messages,
                message_retention_duration=args.message_retention_duration)
        except subscriptions.NoFieldsSpecifiedError:
            raise
        else:
            log.UpdatedResource(subscription_ref.RelativeName(),
                                kind='subscription')
        return result
示例#2
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Yields:
      A serialized object (dict) describing the results of the operation.
      This description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      util.RequestFailedError: if any of the requests to the API failed.
    """
        client = subscriptions.SubscriptionsClient()

        topic_ref = util.ParseTopic(args.topic, args.topic_project)
        push_config = util.ParsePushConfig(args.push_endpoint)
        retain_acked_messages = getattr(args, 'retain_acked_messages', None)
        retention_duration = getattr(args, 'message_retention_duration', None)
        if retention_duration:
            retention_duration = util.FormatDuration(retention_duration)

        labels = labels_util.UpdateLabels(
            None,
            client.messages.Subscription.LabelsValue,
            update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))

        failed = []
        for subscription_name in args.subscription:
            subscription_ref = util.ParseSubscription(subscription_name)

            try:
                result = client.Create(subscription_ref,
                                       topic_ref,
                                       args.ack_deadline,
                                       push_config,
                                       retain_acked_messages,
                                       retention_duration,
                                       labels=labels)
            except api_ex.HttpError as error:
                exc = exceptions.HttpException(error)
                log.CreatedResource(subscription_ref.RelativeName(),
                                    kind='subscription',
                                    failed=exc.payload.status_message)
                failed.append(subscription_name)
                continue

            result = util.SubscriptionDisplayDict(result)
            log.CreatedResource(subscription_ref.RelativeName(),
                                kind='subscription')

            yield result

        if failed:
            raise util.RequestsFailedError(failed, 'create')
示例#3
0
  def Run(self, args):
    """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      A serialized object (dict) describing the results of the operation. This
      description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      An HttpException if there was a problem calling the
      API subscriptions.Patch command.
    """
    client = subscriptions.SubscriptionsClient()
    subscription_ref = args.CONCEPTS.subscription.Parse()
    dead_letter_topic = getattr(args, 'dead_letter_topic', None)
    max_delivery_attempts = getattr(args, 'max_delivery_attempts', None)
    clear_dead_letter_policy = getattr(args, 'clear_dead_letter_policy', None)

    labels_update = labels_util.ProcessUpdateArgsLazy(
        args, client.messages.Subscription.LabelsValue,
        orig_labels_thunk=lambda: client.Get(subscription_ref).labels)

    no_expiration = False
    expiration_period = getattr(args, 'expiration_period', None)
    if expiration_period:
      if expiration_period == subscriptions.NEVER_EXPIRATION_PERIOD_VALUE:
        no_expiration = True
        expiration_period = None

    try:
      result = client.Patch(
          subscription_ref,
          ack_deadline=args.ack_deadline,
          push_config=util.ParsePushConfig(args),
          retain_acked_messages=args.retain_acked_messages,
          labels=labels_update.GetOrNone(),
          message_retention_duration=args.message_retention_duration,
          no_expiration=no_expiration,
          expiration_period=expiration_period,
          dead_letter_topic=dead_letter_topic,
          max_delivery_attempts=max_delivery_attempts,
          clear_dead_letter_policy=clear_dead_letter_policy)
    except subscriptions.NoFieldsSpecifiedError:
      if not any(args.IsSpecified(arg) for arg in ('clear_labels',
                                                   'update_labels',
                                                   'remove_labels')):
        raise
      log.status.Print('No update to perform.')
      result = None
    else:
      log.UpdatedResource(subscription_ref.RelativeName(), kind='subscription')
    return result
 def testModifyPushConfig(self):
     sub_ref = util.ParseSubscription('sub1', self.Project())
     args = MockArgs()
     args.push_endpoint = 'endpoint'
     push_config = util.ParsePushConfig(args)
     self.subscriptions_service.ModifyPushConfig.Expect(
         self.msgs.PubsubProjectsSubscriptionsModifyPushConfigRequest(
             modifyPushConfigRequest=self.msgs.ModifyPushConfigRequest(
                 pushConfig=push_config),
             subscription=sub_ref.RelativeName()), self.msgs.Empty())
     self.subscriptions_client.ModifyPushConfig(sub_ref, push_config)
示例#5
0
def _Run(args, enable_labels=False, legacy_output=False):
    """Creates one or more subscriptions."""
    client = subscriptions.SubscriptionsClient()

    topic_ref = args.CONCEPTS.topic.Parse()
    push_config = util.ParsePushConfig(args)
    retain_acked_messages = getattr(args, 'retain_acked_messages', None)
    retention_duration = getattr(args, 'message_retention_duration', None)
    if retention_duration:
        retention_duration = util.FormatDuration(retention_duration)

    no_expiration = False
    expiration_period = getattr(args, 'expiration_period', None)
    if expiration_period:
        if expiration_period == subscriptions.NEVER_EXPIRATION_PERIOD_VALUE:
            no_expiration = True
            expiration_period = None

    labels = None
    if enable_labels:
        labels = labels_util.ParseCreateArgs(
            args, client.messages.Subscription.LabelsValue)

    failed = []
    for subscription_ref in args.CONCEPTS.subscription.Parse():

        try:
            result = client.Create(subscription_ref,
                                   topic_ref,
                                   args.ack_deadline,
                                   push_config,
                                   retain_acked_messages,
                                   retention_duration,
                                   labels=labels,
                                   no_expiration=no_expiration,
                                   expiration_period=expiration_period)
        except api_ex.HttpError as error:
            exc = exceptions.HttpException(error)
            log.CreatedResource(subscription_ref.RelativeName(),
                                kind='subscription',
                                failed=exc.payload.status_message)
            failed.append(subscription_ref.subscriptionsId)
            continue

        if legacy_output:
            result = util.SubscriptionDisplayDict(result)

        log.CreatedResource(subscription_ref.RelativeName(),
                            kind='subscription')
        yield result

    if failed:
        raise util.RequestsFailedError(failed, 'create')
示例#6
0
def _Run(args, legacy_output=False):
    """Modifies the push config for a subscription."""
    client = subscriptions.SubscriptionsClient()

    subscription_ref = args.CONCEPTS.subscription.Parse()
    push_config = util.ParsePushConfig(args)
    result = client.ModifyPushConfig(subscription_ref, push_config)

    log.UpdatedResource(subscription_ref.RelativeName(), kind='subscription')
    if legacy_output:
        return {
            'subscriptionId': subscription_ref.RelativeName(),
            'pushEndpoint': args.push_endpoint
        }
    else:
        return result
示例#7
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      A serialized object (dict) describing the results of the operation.
      This description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      An HttpException if there was a problem calling the
      API subscriptions.Patch command.
    """
        client = subscriptions.SubscriptionsClient()
        subscription_ref = args.CONCEPTS.subscription.Parse()

        labels_update = labels_util.ProcessUpdateArgsLazy(
            args,
            client.messages.Subscription.LabelsValue,
            orig_labels_thunk=lambda: client.Get(subscription_ref).labels)
        try:
            result = client.Patch(
                subscription_ref,
                ack_deadline=args.ack_deadline,
                push_config=util.ParsePushConfig(args.push_endpoint),
                retain_acked_messages=args.retain_acked_messages,
                labels=labels_update.GetOrNone(),
                message_retention_duration=args.message_retention_duration)
        except subscriptions.NoFieldsSpecifiedError:
            if not any(
                    args.IsSpecified(arg)
                    for arg in ('clear_labels', 'update_labels',
                                'remove_labels')):
                raise
            log.status.Print('No update to perform.')
            result = None
        else:
            log.UpdatedResource(subscription_ref.RelativeName(),
                                kind='subscription')
        return result
示例#8
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      A serialized object (dict) describing the results of the operation.
      This description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      An HttpException if there was a problem calling the
      API subscriptions.Patch command.
    """
        client = subscriptions.SubscriptionsClient()
        subscription_ref = util.ParseSubscription(args.subscription)

        update_labels = labels_util.GetUpdateLabelsDictFromArgs(args)
        remove_labels = labels_util.GetRemoveLabelsListFromArgs(args)
        if update_labels or remove_labels:
            original_subscription = client.Get(subscription_ref)
            labels = labels_util.UpdateLabels(
                original_subscription.labels,
                client.messages.Subscription.LabelsValue,
                update_labels=update_labels,
                remove_labels=remove_labels)
        else:
            labels = None
        result = client.Patch(
            subscription_ref,
            ack_deadline=args.ack_deadline,
            push_config=util.ParsePushConfig(args.push_endpoint),
            retain_acked_messages=args.retain_acked_messages,
            labels=labels,
            message_retention_duration=args.message_retention_duration)

        result = util.SubscriptionDisplayDict(result)
        log.UpdatedResource(subscription_ref.RelativeName(),
                            kind='subscription')
        return result
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      None
    """
        client = subscriptions.SubscriptionsClient()

        subscription_ref = util.ParseSubscription(args.subscription)
        push_config = util.ParsePushConfig(args.push_endpoint)
        client.ModifyPushConfig(subscription_ref, push_config)

        return {
            'subscriptionId': subscription_ref.RelativeName(),
            'pushEndpoint': args.push_endpoint
        }
 def testPatch_AllOptions(self):
     sub_ref = util.ParseSubscription('sub1', self.Project())
     args = MockArgs()
     args.push_endpoint = 'endpoint'
     push_config = util.ParsePushConfig(args)
     labels = self.msgs.Subscription.LabelsValue(additionalProperties=[
         self.msgs.Subscription.LabelsValue.AdditionalProperty(
             key='label1', value='label1')
     ])
     subscription = self.msgs.Subscription(
         name=sub_ref.RelativeName(),
         ackDeadlineSeconds=20,
         pushConfig=push_config,
         retainAckedMessages=True,
         labels=labels,
         messageRetentionDuration='30s',
         deadLetterPolicy=self.msgs.DeadLetterPolicy(
             deadLetterTopic='topic3', maxDeliveryAttempts=100))
     self.subscriptions_service.Patch.Expect(
         self.msgs.PubsubProjectsSubscriptionsPatchRequest(
             updateSubscriptionRequest=self.msgs.UpdateSubscriptionRequest(
                 subscription=subscription,
                 updateMask=('ackDeadlineSeconds,pushConfig,'
                             'retainAckedMessages,messageRetentionDuration,'
                             'labels,'
                             'deadLetterPolicy')),
             name=sub_ref.RelativeName()), subscription)
     result = self.subscriptions_client.Patch(
         sub_ref,
         ack_deadline=20,
         push_config=push_config,
         retain_acked_messages=True,
         message_retention_duration='30s',
         dead_letter_topic='topic3',
         max_delivery_attempts=100,
         labels=labels)
     self.assertEqual(result, subscription)
示例#11
0
def _Run(args, enable_labels=False, legacy_output=False):
  """Creates one or more subscriptions."""
  flags.ValidateDeadLetterPolicy(args)

  client = subscriptions.SubscriptionsClient()

  topic_ref = args.CONCEPTS.topic.Parse()
  push_config = util.ParsePushConfig(args)
  enable_message_ordering = getattr(args, 'enable_message_ordering', None)
  filter_string = getattr(args, 'message_filter', None)
  dead_letter_topic = getattr(args, 'dead_letter_topic', None)
  max_delivery_attempts = getattr(args, 'max_delivery_attempts', None)
  retain_acked_messages = getattr(args, 'retain_acked_messages', None)
  retention_duration = getattr(args, 'message_retention_duration', None)
  if retention_duration:
    retention_duration = util.FormatDuration(retention_duration)
  min_retry_delay = getattr(args, 'min_retry_delay', None)
  if min_retry_delay:
    min_retry_delay = util.FormatDuration(min_retry_delay)
  max_retry_delay = getattr(args, 'max_retry_delay', None)
  if max_retry_delay:
    max_retry_delay = util.FormatDuration(max_retry_delay)

  no_expiration = False
  expiration_period = getattr(args, 'expiration_period', None)
  if expiration_period:
    if expiration_period == subscriptions.NEVER_EXPIRATION_PERIOD_VALUE:
      no_expiration = True
      expiration_period = None

  if dead_letter_topic:
    dead_letter_topic = args.CONCEPTS.dead_letter_topic.Parse().RelativeName()

  labels = None
  if enable_labels:
    labels = labels_util.ParseCreateArgs(
        args, client.messages.Subscription.LabelsValue)

  failed = []
  for subscription_ref in args.CONCEPTS.subscription.Parse():

    try:
      result = client.Create(
          subscription_ref,
          topic_ref,
          args.ack_deadline,
          push_config,
          retain_acked_messages,
          retention_duration,
          labels=labels,
          no_expiration=no_expiration,
          expiration_period=expiration_period,
          enable_message_ordering=enable_message_ordering,
          filter_string=filter_string,
          dead_letter_topic=dead_letter_topic,
          max_delivery_attempts=max_delivery_attempts,
          min_retry_delay=min_retry_delay,
          max_retry_delay=max_retry_delay)
    except api_ex.HttpError as error:
      exc = exceptions.HttpException(error)
      log.CreatedResource(subscription_ref.RelativeName(),
                          kind='subscription',
                          failed=exc.payload.status_message)
      failed.append(subscription_ref.subscriptionsId)
      continue

    if legacy_output:
      result = util.SubscriptionDisplayDict(result)

    log.CreatedResource(subscription_ref.RelativeName(), kind='subscription')
    yield result

  if failed:
    raise util.RequestsFailedError(failed, 'create')