File: //snap/google-cloud-cli/396/lib/surface/topic/projections.py
# -*- coding: utf-8 -*- #
# Copyright 2013 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.
"""Resource projections supplementary help."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
from googlecloudsdk.core.resource import resource_topics
# pylint: disable=line-too-long
class Projections(base.TopicCommand):
"""Resource projections supplementary help.
{projection_description}
### Projections
A projection is a list of keys that selects resource data values.
Projections are used in *--format* flag expressions. For example, the
*table* format requires a projection that describes the table columns:
table(name, network.ip.internal, network.ip.external, uri())
### Transforms
A *transform* formats resource data values. Each projection key may
have zero or more transform calls:
_key_._transform_([arg...])...
This example applies the *foo*() and then the *bar*() transform to the
*status.time* resource value:
(name, status.time.foo().bar())
{transform_registry}
### Key Attributes
Key attributes control formatted output. Each projection key may have
zero or more attributes:
_key_:_attribute_=_value_...
where =_value_ is omitted for Boolean attributes and no-_attribute_
sets the attribute to false. Attribute values may appear in any order,
but must be specified after any transform calls. The attributes are:
*alias*=_ALIAS-NAME_::
Sets _ALIAS-NAME_ as an alias for the projection key.
*align*=_ALIGNMENT_::
Specifies the output column data alignment. Used by the *table*
format. The alignment values are:
*left*:::
Left (default).
*center*:::
Center.
*right*:::
Right.
*label*=_LABEL_::
A string value used to label output. Use :label="" or :label=''
for no label. The *table* format uses _LABEL_ values as column
headings. Also sets _LABEL_ as an alias for the projection key.
The default label is the disambiguated right hand parts of the
column key name in ANGRY_SNAKE_CASE.
[no-]*reverse*::
Sets the key sort order to descending. *no-reverse* resets to the
default ascending order.
*sort*=_SORT-ORDER_::
An integer counting from 1. Keys with lower sort-order are sorted
first. Keys with same sort order are sorted left to right. Columns are
sorted based on displayed value alone, irrespective of the type of
value(date, time, etc.).
*wrap*[=_MIN-WIDTH_]::
Enables the column text to be wrapped if the table would otherwise
be too wide for the display. The column will be wrapped in the available space
with a minimum width of either the default or of _MIN-WIDTH_ if specified. The
default is 10 characters.
*width*=_COLUMN-WIDTH_::
An integer denoting the width for the column. The default fits the table to
the terminal width or 80 if the output is not a terminal.
## EXAMPLES
List a table of instance *zone* (sorted in descending order) and
*name* (sorted by *name* and centered with column heading *INSTANCE*)
and *creationTimestamp* (listed using the *strftime*(3) year-month-day
format with column heading *START*):
$ gcloud compute instances list --format="table(name:sort=2:align=center:label=INSTANCE, zone:sort=1:reverse, creationTimestamp.date("%Y-%m-%d"):label=START)"
List only the *name*, *status* and *zone* instance resource keys in
YAML format:
$ gcloud compute instances list --format="yaml(name, status, zone)"
List only the *config.account* key value(s) in the *info* resource:
$ gcloud info --format="value(config.account)"
List the *name*, *id*, and *description* of an imaginary *foo* resource,
fixing the *name* column width to 16 characters, wrapping the *id* column with
the default minimum width and the *description* column with a minimum width of
20 characters:
$ gcloud example foo list --format="table(name:width=16, id:wrap, description:wrap=20)"
"""
detailed_help = {
'projection_description':
lambda: resource_topics.ResourceDescription('projection'),
'transform_registry':
resource_topics.TransformRegistryDescriptions,
}