Module minder_utils.util.util
Expand source code
from pathlib import Path
import sys
import time
import os
import shutil
import pickle
import posixpath
import ntpath
import platform
def save_file(obj, file_path, file_name):
save_mkdir(file_path)
with open(os.path.join(file_path, file_name + '.pickle'), 'wb') as handle:
pickle.dump(obj, handle, protocol=pickle.HIGHEST_PROTOCOL)
def load_file(file_path, file_name):
with open(os.path.join(file_path, file_name + '.pickle'), 'rb') as handle:
data = pickle.load(handle)
return data
def reformat_path(path):
if isinstance(path, list):
path = os.path.join(*path)
if 'mac' in platform.platform().lower():
return path
elif 'windows' in platform.platform().lower():
return str(path).replace(os.sep, ntpath.sep)
elif 'unix' in platform.platform().lower():
return str(path).replace(os.sep, posixpath.sep)
else:
return path
def save_mkdir(path):
Path(reformat_path(path)).mkdir(parents=True, exist_ok=True)
def delete_dir(dirpath):
if os.path.exists(dirpath) and os.path.isdir(dirpath):
print('Deleting existing directory: ', dirpath)
shutil.rmtree(dirpath)
rocket_base_string = '[---------]'
rocket_progress_indicator_list1 = [rocket_base_string[:n] + '>=>' + rocket_base_string[n:] for n in range(1, 11)]
rocket_progress_indicator_list2 = [rocket_base_string[:n] + '<=<' + rocket_base_string[n:] for n in range(1, 11)]
rocket_progress_indicator_list = rocket_progress_indicator_list1 + rocket_progress_indicator_list2[::-1]
progress_indicator_dict = {'spinning_wheel': ['\\', '|', '/', '-', '\\', '|', '/', '-'],
'rocket': rocket_progress_indicator_list}
def progress_spinner(total_time, statement, new_line_after=True, progress_indicator='rocket', time_period=1):
'''
This function prints a spinning wheel for the length of time given in ```total_time```.
This is useful when it is required to wait for some amount of time but the user wants
to print something. For example, when waiting for a server to complete its job.
Arguments
---------
- total_time: int:
This is the total number of seconds this function will animate for.
- statement: string:
This is the statement to print before the spinning wheel
- new_line_after: bool:
This dictates whether to print a new line when the progress bar is finished.
- progress_indicator: string or list:
If string, make sure it is either ```'spinning_wheel'``` or ```'rocket'```. If it is a
list, the values in the list will be the frames of the animation.
- time_period: float:
This is the time period for the animation.
'''
if type(progress_indicator) == str:
progress_indicator_list = progress_indicator_dict[progress_indicator]
else:
progress_indicator_list = progress_indicator
sleep_value = time_period / len(progress_indicator_list)
progress_position = 0
time_run = 0
start = time.time()
while time_run < total_time:
progress_position = progress_position % len(progress_indicator_list)
sys.stdout.write('\r')
sys.stdout.write("{} {}".format(statement, progress_indicator_list[progress_position]))
sys.stdout.flush()
time.sleep(sleep_value)
progress_position += 1
time_run = time.time() - start
if new_line_after: sys.stdout.write('\n')
return
class PBar:
'''
This is a class for a simple progress bar.
'''
def __init__(self, show_length, n_iterations, done_symbol='#', todo_symbol='-'):
'''
Arguments
---------
show_length: integer
This is the length of the progress bar to show.
n_iterations: integer
This is the number of iterations the progress bar should expect.
done_symbol: string
This is the symbol shown for the finished section of the progress bar.
By default this is a '#'.
todo_symbol = string
This is the symbol shown for the unfinished section of the progress bar.
By default this is '-'
'''
self.show_length = show_length
self.n_iterations = n_iterations
self.done_symbol = done_symbol
self.todo_symbol = todo_symbol
self.progress = 0
return
def update(self, n=1):
'''
This is the update function for the progress bar
Arguments
---------
n: integer
This is extra progress made
'''
self.progress += n
return
def give(self):
'''
Returns
---------
out: string
This returns a string of the progress bar.
'''
total_bar_length = self.show_length
current_progress = self.progress if self.progress <= self.n_iterations else self.n_iterations
n_iterations = self.n_iterations
hashes_length = int((current_progress) / n_iterations * total_bar_length)
hashes = self.done_symbol * hashes_length
dashes = self.todo_symbol * (total_bar_length - hashes_length)
out = '[{}{}]'.format(hashes, dashes)
return out
def show(self):
'''
This prints the progress bar.
'''
p_bar_to_print = self.give()
print(p_bar_to_print)
return
Functions
def delete_dir(dirpath)
-
Expand source code
def delete_dir(dirpath): if os.path.exists(dirpath) and os.path.isdir(dirpath): print('Deleting existing directory: ', dirpath) shutil.rmtree(dirpath)
def load_file(file_path, file_name)
-
Expand source code
def load_file(file_path, file_name): with open(os.path.join(file_path, file_name + '.pickle'), 'rb') as handle: data = pickle.load(handle) return data
def progress_spinner(total_time, statement, new_line_after=True, progress_indicator='rocket', time_period=1)
-
This function prints a spinning wheel for the length of time given in
total_time
. This is useful when it is required to wait for some amount of time but the user wants to print something. For example, when waiting for a server to complete its job.Arguments
-
total_time: int: This is the total number of seconds this function will animate for.
-
statement: string: This is the statement to print before the spinning wheel
-
new_line_after: bool: This dictates whether to print a new line when the progress bar is finished.
-
progress_indicator: string or list: If string, make sure it is either
'spinning_wheel'
or'rocket'
. If it is a list, the values in the list will be the frames of the animation. -
time_period: float: This is the time period for the animation.
Expand source code
def progress_spinner(total_time, statement, new_line_after=True, progress_indicator='rocket', time_period=1): ''' This function prints a spinning wheel for the length of time given in ```total_time```. This is useful when it is required to wait for some amount of time but the user wants to print something. For example, when waiting for a server to complete its job. Arguments --------- - total_time: int: This is the total number of seconds this function will animate for. - statement: string: This is the statement to print before the spinning wheel - new_line_after: bool: This dictates whether to print a new line when the progress bar is finished. - progress_indicator: string or list: If string, make sure it is either ```'spinning_wheel'``` or ```'rocket'```. If it is a list, the values in the list will be the frames of the animation. - time_period: float: This is the time period for the animation. ''' if type(progress_indicator) == str: progress_indicator_list = progress_indicator_dict[progress_indicator] else: progress_indicator_list = progress_indicator sleep_value = time_period / len(progress_indicator_list) progress_position = 0 time_run = 0 start = time.time() while time_run < total_time: progress_position = progress_position % len(progress_indicator_list) sys.stdout.write('\r') sys.stdout.write("{} {}".format(statement, progress_indicator_list[progress_position])) sys.stdout.flush() time.sleep(sleep_value) progress_position += 1 time_run = time.time() - start if new_line_after: sys.stdout.write('\n') return
-
def reformat_path(path)
-
Expand source code
def reformat_path(path): if isinstance(path, list): path = os.path.join(*path) if 'mac' in platform.platform().lower(): return path elif 'windows' in platform.platform().lower(): return str(path).replace(os.sep, ntpath.sep) elif 'unix' in platform.platform().lower(): return str(path).replace(os.sep, posixpath.sep) else: return path
def save_file(obj, file_path, file_name)
-
Expand source code
def save_file(obj, file_path, file_name): save_mkdir(file_path) with open(os.path.join(file_path, file_name + '.pickle'), 'wb') as handle: pickle.dump(obj, handle, protocol=pickle.HIGHEST_PROTOCOL)
def save_mkdir(path)
-
Expand source code
def save_mkdir(path): Path(reformat_path(path)).mkdir(parents=True, exist_ok=True)
Classes
class PBar (show_length, n_iterations, done_symbol='#', todo_symbol='-')
-
This is a class for a simple progress bar.
Arguments
show_length: integer This is the length of the progress bar to show. n_iterations: integer This is the number of iterations the progress bar should expect. done_symbol: string This is the symbol shown for the finished section of the progress bar. By default this is a '#'. todo_symbol = string This is the symbol shown for the unfinished section of the progress bar. By default this is '-'
Expand source code
class PBar: ''' This is a class for a simple progress bar. ''' def __init__(self, show_length, n_iterations, done_symbol='#', todo_symbol='-'): ''' Arguments --------- show_length: integer This is the length of the progress bar to show. n_iterations: integer This is the number of iterations the progress bar should expect. done_symbol: string This is the symbol shown for the finished section of the progress bar. By default this is a '#'. todo_symbol = string This is the symbol shown for the unfinished section of the progress bar. By default this is '-' ''' self.show_length = show_length self.n_iterations = n_iterations self.done_symbol = done_symbol self.todo_symbol = todo_symbol self.progress = 0 return def update(self, n=1): ''' This is the update function for the progress bar Arguments --------- n: integer This is extra progress made ''' self.progress += n return def give(self): ''' Returns --------- out: string This returns a string of the progress bar. ''' total_bar_length = self.show_length current_progress = self.progress if self.progress <= self.n_iterations else self.n_iterations n_iterations = self.n_iterations hashes_length = int((current_progress) / n_iterations * total_bar_length) hashes = self.done_symbol * hashes_length dashes = self.todo_symbol * (total_bar_length - hashes_length) out = '[{}{}]'.format(hashes, dashes) return out def show(self): ''' This prints the progress bar. ''' p_bar_to_print = self.give() print(p_bar_to_print) return
Methods
def give(self)
-
Returns
out: string This returns a string of the progress bar.
Expand source code
def give(self): ''' Returns --------- out: string This returns a string of the progress bar. ''' total_bar_length = self.show_length current_progress = self.progress if self.progress <= self.n_iterations else self.n_iterations n_iterations = self.n_iterations hashes_length = int((current_progress) / n_iterations * total_bar_length) hashes = self.done_symbol * hashes_length dashes = self.todo_symbol * (total_bar_length - hashes_length) out = '[{}{}]'.format(hashes, dashes) return out
def show(self)
-
This prints the progress bar.
Expand source code
def show(self): ''' This prints the progress bar. ''' p_bar_to_print = self.give() print(p_bar_to_print) return
def update(self, n=1)
-
This is the update function for the progress bar
Arguments
n: integer This is extra progress made
Expand source code
def update(self, n=1): ''' This is the update function for the progress bar Arguments --------- n: integer This is extra progress made ''' self.progress += n return