File: //snap/google-cloud-cli/396/lib/googlecloudsdk/command_lib/run/pretty_print.py
# -*- coding: utf-8 -*- #
# Copyright 2018 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.
"""Pretty-print utilities.
Usage:
pretty_print.Success('Woo')
pretty_print.Info('doing {thing}', thing='something') # works like .format()
✓ Woo (the checkbox will be green)
doing something
Bold and italic standard formatters are available (in conjunction with
reset), e.g:
pretty_print.Success('Let me {bold}stress{reset} the {italic}importance{reset}')
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.core import log
from googlecloudsdk.core.console import console_attr
READY_COLUMN_COLOR = (
'color(red="[xX]",'
'green="[\N{CHECK MARK}\N{HEAVY CHECK MARK}]",'
'yellow="[-!\N{HORIZONTAL ELLIPSIS}]"):label=""'
)
READY_COLUMN = f'ready_symbol.{READY_COLUMN_COLOR}'
def _Print(prefix, color, msg, **formatters):
"""Helper function to avoid import-time races."""
con = console_attr.GetConsoleAttr()
con.Colorize(prefix, color)
formatters = formatters.copy()
formatters.update({
'bold': con.GetFontCode(bold=True),
'italic': con.GetFontCode(italic=True),
'reset': con.GetFontCode(),
})
log.status.Print(msg.format(**formatters))
def Success(msg, **formatters):
"""Print a nice little green checkbox, and a message.
Args:
msg: str, message accepting standard formatters.
**formatters: extra args acting like .format()
"""
_Print('✓ ', 'green', msg, **formatters)
def Info(msg, **formatters):
"""Simple print, with added left margin for alignment.
Args:
msg: str, message accepting standard formatters.
**formatters: extra args acting like .format()
"""
_Print(' ', None, msg, **formatters)