forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
92
leenkx/blender/lnx/log.py
Normal file
92
leenkx/blender/lnx/log.py
Normal file
@ -0,0 +1,92 @@
|
||||
"""
|
||||
CLI output.
|
||||
"""
|
||||
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
import bpy
|
||||
|
||||
DEBUG = 36
|
||||
INFO = 37
|
||||
WARN = 35
|
||||
ERROR = 31
|
||||
|
||||
if platform.system() == "Windows":
|
||||
HAS_COLOR_SUPPORT = platform.release() == "10"
|
||||
|
||||
if HAS_COLOR_SUPPORT:
|
||||
# Enable ANSI codes. Otherwise, the ANSI sequences might not be
|
||||
# evaluated correctly for the first colored print statement.
|
||||
import ctypes
|
||||
kernel32 = ctypes.windll.kernel32
|
||||
|
||||
# -11: stdout
|
||||
handle_out = kernel32.GetStdHandle(-11)
|
||||
|
||||
console_mode = ctypes.c_long()
|
||||
kernel32.GetConsoleMode(handle_out, ctypes.byref(console_mode))
|
||||
|
||||
# 0b100: ENABLE_VIRTUAL_TERMINAL_PROCESSING, enables ANSI codes
|
||||
# see https://docs.microsoft.com/en-us/windows/console/setconsolemode
|
||||
console_mode.value |= 0b100
|
||||
kernel32.SetConsoleMode(handle_out, console_mode)
|
||||
else:
|
||||
HAS_COLOR_SUPPORT = True
|
||||
|
||||
info_text = ''
|
||||
num_warnings = 0
|
||||
num_errors = 0
|
||||
|
||||
def clear(clear_warnings=False, clear_errors=False):
|
||||
global info_text, num_warnings, num_errors
|
||||
info_text = ''
|
||||
if clear_warnings:
|
||||
num_warnings = 0
|
||||
if clear_errors:
|
||||
num_errors = 0
|
||||
|
||||
def format_text(text):
|
||||
return (text[:80] + '..') if len(text) > 80 else text # Limit str size
|
||||
|
||||
def log(text, color=None):
|
||||
print(colorize(text, color))
|
||||
|
||||
def debug(text):
|
||||
print(colorize(text, DEBUG))
|
||||
|
||||
def info(text):
|
||||
global info_text
|
||||
print(colorize(text, INFO))
|
||||
info_text = format_text(text)
|
||||
|
||||
def print_warn(text):
|
||||
print(colorize('WARNING: ' + text, WARN))
|
||||
|
||||
def warn(text):
|
||||
global num_warnings
|
||||
num_warnings += 1
|
||||
print_warn(text)
|
||||
|
||||
def error(text):
|
||||
global num_errors
|
||||
num_errors += 1
|
||||
print(colorize('ERROR: ' + text, ERROR), file=sys.stderr)
|
||||
|
||||
def colorize(text:str, color=None):
|
||||
if bpy.context.area is not None and bpy.context.area.type == 'CONSOLE':
|
||||
return text
|
||||
if HAS_COLOR_SUPPORT and color is not None:
|
||||
csi = '\033['
|
||||
text = csi + str(color) + 'm' + text + csi + '0m'
|
||||
return text
|
||||
|
||||
def warn_called_process_error(proc: subprocess.CalledProcessError):
|
||||
out = f'Command {proc.cmd} exited with code {proc.returncode}.'
|
||||
if proc.output is not None:
|
||||
out += (
|
||||
f'Command output:\n'
|
||||
f'---------------\n'
|
||||
f'{proc.output.decode(encoding="utf-8")}' # Output is encoded as bytes by default
|
||||
)
|
||||
warn(out)
|
Reference in New Issue
Block a user