HE-to-IHC / asp /util /general_utils.py
antoinedelplace
First commit
207ef6f
import sys
sys.path.append(".")
import time, os
from functools import wraps
import argparse
import inspect
import traceback
def time_it(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
elapsed_time = end_time - start_time
print(f"Function '{func.__name__}' executed in {elapsed_time:.6f} seconds.")
return result
return wrapper
def try_wrapper(function, filename, log_path):
try:
return function()
except Exception as e:
error_trace = traceback.format_exc()
with open(log_path, 'a') as log_file:
log_file.write(f"{filename}: {error_trace}\n")
print(f"Error in {filename}:\n{error_trace}")
def parse_args(main_function):
parser = argparse.ArgumentParser()
used_short_versions = set("h")
signature = inspect.signature(main_function)
for param_name, param in signature.parameters.items():
short_version = param_name[0]
if short_version in used_short_versions or not short_version.isalpha():
for char in param_name[1:]:
short_version = char
if char.isalpha() and short_version not in used_short_versions:
break
else:
short_version = None
if short_version:
used_short_versions.add(short_version)
param_call = (f'-{short_version}', f'--{param_name}')
else:
param_call = (f'--{param_name}',)
if param.default is not inspect.Parameter.empty:
if param.default is not None:
param_type = type(param.default)
else:
param_type = str
parser.add_argument(*param_call, type=param_type, default=param.default,
help=f"Automatically detected argument: {param_name}, default: {param.default}")
else:
parser.add_argument(*param_call, required=True,
help=f"Required argument: {param_name}")
args = parser.parse_args()
return args
def assert_file_exist(*args):
path = os.path.join(*args)
if not os.path.exists(path):
raise Exception(f"File {path} does not exist")
return path