# -*- 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)