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
fname = func.__name__
if hasattr(func, "__qualname__"):
fname = func.__qualname__
logger.debug(f"TIME {fname!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