| import time |
| import functools |
| import logging |
| import logging.config |
| import sys |
| from typing import Callable, Any, TypeVar, cast |
|
|
| |
| F = TypeVar('F', bound=Callable[..., Any]) |
|
|
|
|
| def timeit(func: F) -> F: |
| """ |
| Decorator that logs the execution time of the decorated function. |
| |
| Args: |
| func: The function to be timed |
| |
| Returns: |
| The wrapped function with timing functionality |
| """ |
|
|
| @functools.wraps(func) |
| def wrapper(*args, **kwargs): |
| start_time = time.time() |
| result = func(*args, **kwargs) |
| end_time = time.time() |
| execution_time = end_time - start_time |
|
|
| logger = logging.getLogger(func.__module__) |
| logger.info(f"Function '{func.__name__}' executed in {execution_time:.4f} seconds") |
|
|
| return result |
|
|
| return cast(F, wrapper) |
|
|