226 lines
7.6 KiB
Python
226 lines
7.6 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2017 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.
|
|
|
|
"""Shared resource flags for Cloud Pub/Sub commands."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from googlecloudsdk.calliope.concepts import concepts
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
def SubscriptionAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='subscription',
|
|
help_text='Name of the subscription.')
|
|
|
|
|
|
def TopicAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='topic',
|
|
help_text='Name of the topic.')
|
|
|
|
|
|
def SchemaAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='schema', help_text='Name of the schema.')
|
|
|
|
|
|
def GetSubscriptionResourceSpec():
|
|
return concepts.ResourceSpec(
|
|
'pubsub.projects.subscriptions',
|
|
resource_name='subscription',
|
|
subscriptionsId=SubscriptionAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG)
|
|
|
|
|
|
def GetTopicResourceSpec(name='topic'):
|
|
return concepts.ResourceSpec(
|
|
'pubsub.projects.topics',
|
|
resource_name=name,
|
|
topicsId=TopicAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG)
|
|
|
|
|
|
def GetSchemaResourceSpec(name='schema'):
|
|
return concepts.ResourceSpec(
|
|
'pubsub.projects.schemas',
|
|
resource_name=name,
|
|
schemasId=SchemaAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG)
|
|
|
|
|
|
def CreateSubscriptionResourceArg(
|
|
verb, plural=False, required=True, positional=True
|
|
):
|
|
"""Create a resource argument for a Cloud Pub/Sub Subscription.
|
|
|
|
Args:
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
required: bool, if True, create subscription resource arg will be required.
|
|
positional: bool, if True, means that the subscription ID is a positional
|
|
rather than a flag.
|
|
|
|
Returns:
|
|
the PresentationSpec for the resource argument.
|
|
"""
|
|
if positional:
|
|
name = 'subscription'
|
|
else:
|
|
name = '--subscription'
|
|
if plural:
|
|
help_stem = 'One or more subscriptions'
|
|
else:
|
|
help_stem = 'Name of the subscription'
|
|
return presentation_specs.ResourcePresentationSpec(
|
|
name,
|
|
GetSubscriptionResourceSpec(),
|
|
'{} {}'.format(help_stem, verb),
|
|
required=required,
|
|
plural=plural,
|
|
prefixes=True,
|
|
)
|
|
|
|
|
|
def AddSubscriptionResourceArg(parser, verb, plural=False):
|
|
"""Add a resource argument for a Cloud Pub/Sub Subscription.
|
|
|
|
Args:
|
|
parser: the parser for the command.
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
"""
|
|
concept_parsers.ConceptParser(
|
|
[CreateSubscriptionResourceArg(verb, plural=plural)]
|
|
).AddToParser(parser)
|
|
|
|
|
|
def AddSchemaResourceArg(parser, verb, plural=False):
|
|
"""Add a resource argument for a Cloud Pub/Sub Schema.
|
|
|
|
Args:
|
|
parser: the parser for the command.
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
"""
|
|
concept_parsers.ConceptParser([CreateSchemaResourceArg(verb, plural=plural)
|
|
]).AddToParser(parser)
|
|
|
|
|
|
def CreateTopicResourceArg(verb,
|
|
positional=True,
|
|
plural=False,
|
|
required=True,
|
|
flag_name='topic'):
|
|
"""Create a resource argument for a Cloud Pub/Sub Topic.
|
|
|
|
Args:
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
positional: bool, if True, means that the topic ID is a positional rather
|
|
than a flag. If not positional, this also creates a '--topic-project' flag
|
|
as subscriptions and topics do not need to be in the same project.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
required: bool, if True, create topic resource arg will be required.
|
|
flag_name: str, name of the topic resource arg (singular).
|
|
|
|
Returns:
|
|
the PresentationSpec for the resource argument.
|
|
"""
|
|
if positional:
|
|
name = flag_name
|
|
flag_name_overrides = {}
|
|
else:
|
|
name = '--' + flag_name if not plural else '--' + flag_name + 's'
|
|
flag_name_overrides = {'project': '--' + flag_name + '-project'}
|
|
help_stem = 'Name of the topic'
|
|
if plural:
|
|
help_stem = 'One or more topics'
|
|
return presentation_specs.ResourcePresentationSpec(
|
|
name,
|
|
GetTopicResourceSpec(flag_name),
|
|
'{} {}'.format(help_stem, verb),
|
|
required=required,
|
|
flag_name_overrides=flag_name_overrides,
|
|
plural=plural,
|
|
prefixes=True)
|
|
|
|
|
|
def AddTopicResourceArg(parser, verb, positional=True, plural=False):
|
|
"""Add a resource argument for a Cloud Pub/Sub Topic.
|
|
|
|
Args:
|
|
parser: the parser for the command.
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
positional: bool, if True, means that the topic ID is a positional rather
|
|
than a flag. If not positional, this also creates a '--topic-project' flag
|
|
as subscriptions and topics do not need to be in the same project.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
"""
|
|
concept_parsers.ConceptParser(
|
|
[CreateTopicResourceArg(verb, positional=positional, plural=plural)]
|
|
).AddToParser(parser)
|
|
|
|
|
|
def CreateSchemaResourceArg(verb,
|
|
positional=True,
|
|
plural=False,
|
|
required=True,
|
|
flag_name='schema'):
|
|
"""Create a resource argument for a Cloud Pub/Sub Schema.
|
|
|
|
Args:
|
|
verb: str, the verb to describe the resource, such as 'to update'.
|
|
positional: bool, if True, means that the schema ID is a positional rather
|
|
than a flag. If not positional, this also creates a '--schema-project'
|
|
flag as schemas and topics do not need to be in the same project.
|
|
plural: bool, if True, use a resource argument that returns a list.
|
|
required: bool, if True, schema resource arg will be required.
|
|
flag_name: str, name of the schema resource arg (singular).
|
|
|
|
Returns:
|
|
the PresentationSpec for the resource argument.
|
|
"""
|
|
if positional:
|
|
name = flag_name
|
|
flag_name_overrides = {}
|
|
else:
|
|
name = '--' + flag_name if not plural else '--' + flag_name + 's'
|
|
flag_name_overrides = {'project': '--' + flag_name + '-project'}
|
|
help_stem = 'Name of the schema'
|
|
if plural:
|
|
help_stem = 'One or more schemas'
|
|
return presentation_specs.ResourcePresentationSpec(
|
|
name,
|
|
GetSchemaResourceSpec(flag_name),
|
|
'{} {}'.format(help_stem, verb),
|
|
required=required,
|
|
flag_name_overrides=flag_name_overrides,
|
|
plural=plural,
|
|
prefixes=True)
|
|
|
|
|
|
def AddResourceArgs(parser, resources):
|
|
"""Add resource arguments for commands that have topic and subscriptions.
|
|
|
|
Args:
|
|
parser: the parser for the command.
|
|
resources: a list of resource args to add.
|
|
"""
|
|
concept_parsers.ConceptParser(resources).AddToParser(parser)
|