You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
2.9 KiB
Python
153 lines
2.9 KiB
Python
3 years ago
|
# -*- coding: utf-8 -*-
|
||
|
"""Utilities for Halo library.
|
||
|
"""
|
||
|
import codecs
|
||
|
import platform
|
||
|
import six
|
||
|
try:
|
||
|
from shutil import get_terminal_size
|
||
|
except ImportError:
|
||
|
from backports.shutil_get_terminal_size import get_terminal_size
|
||
|
|
||
|
from colorama import init
|
||
|
from termcolor import colored
|
||
|
|
||
|
init(autoreset=True)
|
||
|
|
||
|
|
||
|
def is_supported():
|
||
|
"""Check whether operating system supports main symbols or not.
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
boolean
|
||
|
Whether operating system supports main symbols or not
|
||
|
"""
|
||
|
|
||
|
os_arch = platform.system()
|
||
|
|
||
|
if os_arch != 'Windows':
|
||
|
return True
|
||
|
|
||
|
return False
|
||
|
|
||
|
|
||
|
def get_environment():
|
||
|
"""Get the environment in which halo is running
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
str
|
||
|
Environment name
|
||
|
"""
|
||
|
try:
|
||
|
from IPython import get_ipython
|
||
|
except ImportError:
|
||
|
return 'terminal'
|
||
|
|
||
|
try:
|
||
|
shell = get_ipython().__class__.__name__
|
||
|
|
||
|
if shell == 'ZMQInteractiveShell': # Jupyter notebook or qtconsole
|
||
|
return 'jupyter'
|
||
|
elif shell == 'TerminalInteractiveShell': # Terminal running IPython
|
||
|
return 'ipython'
|
||
|
else:
|
||
|
return 'terminal' # Other type (?)
|
||
|
|
||
|
except NameError:
|
||
|
return 'terminal'
|
||
|
|
||
|
|
||
|
def colored_frame(frame, color):
|
||
|
"""Color the frame with given color and returns.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
frame : str
|
||
|
Frame to be colored
|
||
|
color : str
|
||
|
Color to be applied
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
str
|
||
|
Colored frame
|
||
|
"""
|
||
|
return colored(frame, color, attrs=['bold'])
|
||
|
|
||
|
|
||
|
def is_text_type(text):
|
||
|
"""Check if given parameter is a string or not
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
text : *
|
||
|
Parameter to be checked for text type
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
bool
|
||
|
Whether parameter is a string or not
|
||
|
"""
|
||
|
if isinstance(text, six.text_type) or isinstance(text, six.string_types):
|
||
|
return True
|
||
|
|
||
|
return False
|
||
|
|
||
|
|
||
|
def decode_utf_8_text(text):
|
||
|
"""Decode the text from utf-8 format
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
text : str
|
||
|
String to be decoded
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
str
|
||
|
Decoded string
|
||
|
"""
|
||
|
try:
|
||
|
return codecs.decode(text, 'utf-8')
|
||
|
except (TypeError, ValueError):
|
||
|
return text
|
||
|
|
||
|
|
||
|
def encode_utf_8_text(text):
|
||
|
"""Encodes the text to utf-8 format
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
text : str
|
||
|
String to be encoded
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
str
|
||
|
Encoded string
|
||
|
"""
|
||
|
try:
|
||
|
return codecs.encode(text, 'utf-8', 'ignore')
|
||
|
except (TypeError, ValueError):
|
||
|
return text
|
||
|
|
||
|
|
||
|
def get_terminal_columns():
|
||
|
"""Determine the amount of available columns in the terminal
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
int
|
||
|
Terminal width
|
||
|
"""
|
||
|
terminal_size = get_terminal_size()
|
||
|
|
||
|
# If column size is 0 either we are not connected
|
||
|
# to a terminal or something else went wrong. Fallback to 80.
|
||
|
if terminal_size.columns == 0:
|
||
|
return 80
|
||
|
else:
|
||
|
return terminal_size.columns
|