1
0
Fork 0
sstvdec/sstv/common.py

57 lines
1.5 KiB
Python
Raw Permalink Normal View History

2019-07-15 11:18:24 -06:00
"""Shared methods"""
2019-07-15 10:46:41 -06:00
2019-07-15 10:28:23 -06:00
from os import get_terminal_size
from sys import stderr, stdout, platform
2019-07-15 10:28:23 -06:00
2019-07-15 10:46:41 -06:00
2019-07-15 10:28:23 -06:00
def log_message(message="", show=True, err=False, recur=False, prefix=True):
"""Simple print wrapper"""
2019-07-15 10:28:23 -06:00
if not show:
return
out = stdout
if err:
out = stderr
end = '\n'
if recur:
end = '\r'
2019-07-19 15:21:32 -06:00
if platform == "win32":
message = ''.join(['\r', message])
2019-07-15 10:28:23 -06:00
cols = get_terminal_size().columns
if cols < len(message):
message = message[:cols]
if prefix:
2019-07-19 15:21:32 -06:00
message = ' '.join(["[sstv]", message])
2019-07-15 10:28:23 -06:00
print(message, file=out, end=end)
2019-07-15 10:46:41 -06:00
2019-07-15 10:28:23 -06:00
def progress_bar(progress, complete, message="", show=True):
"""Simple loading bar"""
2019-07-15 10:28:23 -06:00
if not show:
return
2019-07-19 15:21:32 -06:00
message_size = len(message) + 7 # prefix size
2019-07-15 10:28:23 -06:00
cols = get_terminal_size().columns
percent_on = True
level = progress / complete
2019-07-19 15:21:32 -06:00
bar_size = min(cols - message_size - 10, 100)
2019-07-15 10:28:23 -06:00
bar = ""
2019-07-15 10:28:23 -06:00
if bar_size > 5:
fill_size = round(bar_size * level)
bar = "[{}]".format(''.join(['#' * fill_size,
'.' * (bar_size - fill_size)]))
elif bar_size < -3:
percent_on = False
percent = ""
if percent_on:
percent = "{:4d}%".format(int(level * 100))
2019-07-15 10:46:41 -06:00
2019-07-19 15:21:32 -06:00
align = cols - message_size - len(percent)
2019-07-15 10:28:23 -06:00
not_end = not progress == complete
2019-07-15 10:46:41 -06:00
log_message("{}{:>{width}}{}".format(message, bar, percent, width=align),
2019-07-19 15:21:32 -06:00
recur=not_end)