109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2021 Google LLC. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""Pub/Sub lite-topics publish command."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope import base
|
|
from googlecloudsdk.command_lib.pubsub import lite_util
|
|
from googlecloudsdk.command_lib.util.args import resource_args
|
|
|
|
_DESCRIPTION = """\
|
|
Publishes a message to the specified Pub/Sub Lite topic. This command requires
|
|
Python 3.6 or greater, and requires the grpcio Python package to be installed.
|
|
|
|
For MacOS, Linux, and Cloud Shell users, to install the gRPC client libraries,
|
|
run:
|
|
|
|
$ sudo pip3 install grpcio
|
|
$ export CLOUDSDK_PYTHON_SITEPACKAGES=1
|
|
"""
|
|
|
|
_EXAMPLES = """\
|
|
To publish a message to a Pub/Sub Lite topic, run:
|
|
|
|
$ {command} mytopic --location=us-central1-a --message="Hello World!"
|
|
|
|
To publish a message to a Pub/Sub Lite topic with an ordering key and
|
|
attributes, run:
|
|
|
|
$ {command} mytopic --location=us-central1-a --message="Hello World!" --ordering-key="key" --attributes=KEY1=VAL1,KEY2=VAL2
|
|
|
|
To publish a message to a Pub/Sub Lite topic with an event time, run:
|
|
|
|
$ {command} mytopic --location=us-central1-a --message="Hello World!" --event-time="2021-01-01T12:00:00Z"
|
|
"""
|
|
|
|
|
|
def _AddPublishFlags(parser):
|
|
"""Adds publish arguments to the parser."""
|
|
resource_args.AddResourceArgToParser(
|
|
parser,
|
|
resource_path='pubsub.lite_topic',
|
|
help_text='The pubsub lite topic to publish to.',
|
|
required=True)
|
|
parser.add_argument(
|
|
'--message',
|
|
help="""The body of the message to publish to the given topic name.""")
|
|
parser.add_argument(
|
|
'--attributes',
|
|
metavar='KEY=VALUE',
|
|
type=arg_parsers.ArgDict(key_type=str, value_type=str, max_length=100),
|
|
help="""Comma-separated list of attributes. Each ATTRIBUTE has the form
|
|
name="value". You can specify up to 100 attributes.""")
|
|
parser.add_argument(
|
|
'--ordering-key',
|
|
help="""A string key, used for ordering delivery to subscribers. All
|
|
messages with the same ordering key will be assigned to the same
|
|
partition for ordered delivery.""")
|
|
parser.add_argument(
|
|
'--event-time',
|
|
type=arg_parsers.Datetime.Parse,
|
|
metavar='DATETIME',
|
|
help="""A user-specified event time. Run `gcloud topic datetimes` for
|
|
information on time formats.""")
|
|
|
|
|
|
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA,
|
|
base.ReleaseTrack.ALPHA)
|
|
class Publish(base.Command):
|
|
"""Publish Pub/Sub Lite messages."""
|
|
|
|
detailed_help = {'DESCRIPTION': _DESCRIPTION, 'EXAMPLES': _EXAMPLES}
|
|
|
|
@staticmethod
|
|
def Args(parser):
|
|
_AddPublishFlags(parser)
|
|
|
|
def Run(self, args):
|
|
lite_util.RequirePython36('gcloud pubsub lite-topics publish')
|
|
try:
|
|
# pylint: disable=g-import-not-at-top
|
|
from googlecloudsdk.api_lib.pubsub import lite_topics
|
|
# pylint: enable=g-import-not-at-top
|
|
except ImportError:
|
|
raise lite_util.NoGrpcInstalled()
|
|
|
|
with lite_topics.PublisherClient() as publisher_client:
|
|
return publisher_client.Publish(
|
|
topic_resource=args.CONCEPTS.topic.Parse(),
|
|
message=args.message,
|
|
ordering_key=args.ordering_key,
|
|
attributes=args.attributes,
|
|
event_time=args.event_time if hasattr(args, 'event_time') else None)
|