155 lines
4.7 KiB
Python
155 lines
4.7 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2025 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.
|
|
"""Utilities for flags for `gcloud cloudlocationfinder` commands."""
|
|
|
|
import sys
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope import base
|
|
from googlecloudsdk.calliope.concepts import concepts
|
|
from googlecloudsdk.calliope.concepts import deps
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
def LocationAttributeConfig():
|
|
"""Returns the attribute config for a Cloud location.
|
|
|
|
Returns:
|
|
concepts.ResourceParameterAttributeConfig: Attribute config for a Cloud
|
|
location.
|
|
"""
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='location',
|
|
help_text='The Cloud location for the {resource}.',
|
|
fallthroughs=[
|
|
deps.Fallthrough(lambda: 'global', 'location is always global')
|
|
],
|
|
)
|
|
|
|
|
|
def GetLocationResourceSpec():
|
|
"""Returns the resource spec for a Cloud location.
|
|
|
|
Returns:
|
|
concepts.ResourceSpec: Resource spec for a Cloud location.
|
|
"""
|
|
return concepts.ResourceSpec(
|
|
resource_collection='cloudlocationfinder.projects.locations',
|
|
resource_name='location',
|
|
locationsId=LocationAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
)
|
|
|
|
|
|
def SourceCloudLocationAttributeConfig():
|
|
"""Returns the attribute config for a source Cloud location.
|
|
|
|
Returns:
|
|
concepts.ResourceParameterAttributeConfig: Attribute config for a source
|
|
Cloud location.
|
|
"""
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='cloud_location', help_text='The source Cloud location.'
|
|
)
|
|
|
|
|
|
def GetSourceCloudLocationResourceSpec():
|
|
"""Returns the resource spec for a source Cloud location.
|
|
|
|
Returns:
|
|
concepts.ResourceSpec: Resource spec for a source Cloud location.
|
|
"""
|
|
return concepts.ResourceSpec(
|
|
resource_collection=(
|
|
'cloudlocationfinder.projects.locations.cloudLocations'
|
|
),
|
|
resource_name='source_cloud_location',
|
|
locationsId=LocationAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
cloudLocationsId=SourceCloudLocationAttributeConfig(),
|
|
)
|
|
|
|
|
|
def AddLocationFlag(parser):
|
|
"""Adds a flag for specifying a location.
|
|
|
|
Args:
|
|
parser: The parser to add the flag to.
|
|
"""
|
|
concept_parsers.ConceptParser.ForResource(
|
|
name='--location',
|
|
resource_spec=GetLocationResourceSpec(),
|
|
group_help='The resource location.',
|
|
required=False,
|
|
).AddToParser(parser)
|
|
|
|
|
|
def AddSourceCloudLocationFlag(parser, flag_name_overrides=None):
|
|
"""Adds a flag for specifying a source Cloud location.
|
|
|
|
Args:
|
|
parser: The parser to add the flag to.
|
|
flag_name_overrides: A dictionary of flag name overrides.
|
|
"""
|
|
concept_parsers.ConceptParser(
|
|
[
|
|
presentation_specs.ResourcePresentationSpec(
|
|
name='--source-cloud-location',
|
|
concept_spec=GetSourceCloudLocationResourceSpec(),
|
|
group_help='The source Cloud location.',
|
|
required=True,
|
|
flag_name_overrides=flag_name_overrides,
|
|
)
|
|
],
|
|
command_level_fallthroughs={
|
|
'--source-cloud-location.location': ['--location']
|
|
},
|
|
).AddToParser(parser)
|
|
|
|
|
|
def AddListFlags(parser):
|
|
"""Adds flags for listing Cloudlocations to the given parser.
|
|
|
|
Args:
|
|
parser: The parser to add the flags to.
|
|
"""
|
|
base.SORT_BY_FLAG.RemoveFromParser(parser)
|
|
AddLocationFlag(parser)
|
|
|
|
|
|
def AddSearchFlags(parser):
|
|
"""Adds flags for searching Cloudlocations to the given parser.
|
|
|
|
Args:
|
|
parser: The parser to add the flags to.
|
|
"""
|
|
AddLocationFlag(parser)
|
|
AddSourceCloudLocationFlag(parser, flag_name_overrides={'location': ''})
|
|
parser.add_argument(
|
|
'--query',
|
|
help='Query to use for searching Cloudlocations.',
|
|
)
|
|
parser.add_argument(
|
|
'--limit',
|
|
type=arg_parsers.BoundedInt(1, sys.maxsize, unlimited=True),
|
|
help='Maximum number of resources to return.',
|
|
)
|
|
parser.add_argument(
|
|
'--page-size',
|
|
type=arg_parsers.BoundedInt(1, sys.maxsize, unlimited=True),
|
|
help='Maximum number of resources per page.',
|
|
)
|