Source code for supervisely.decorators.profile
import functools
import time
from supervisely.sly_logger import logger
[docs]def timeit(func):
"""Print the runtime of the decorated function"""
@functools.wraps(func)
def wrapper_timer(*args, **kwargs):
start_time = time.perf_counter() # 1
value = func(*args, **kwargs)
end_time = time.perf_counter() # 2
run_time = end_time - start_time # 3
logger.debug(f"TIME {func.__name__!r} in {run_time:.4f} secs")
return value
return wrapper_timer
[docs]def update_fields(func):
"""Update state field after executing function"""
@functools.wraps(func)
def wrapper_updater(*args, **kwargs):
kwargs['fields_to_update'] = {}
exception = None
try:
value = func(*args, **kwargs)
except Exception as ex:
value = None
exception = ex
user_api = kwargs.get('api', None)
app_task_id = kwargs.get('task_id', None)
if user_api and app_task_id and len(kwargs['fields_to_update']) > 0:
user_api.task.set_fields_from_dict(app_task_id, kwargs['fields_to_update'])
if exception:
raise exception
return value
return wrapper_updater