-
-
Notifications
You must be signed in to change notification settings - Fork 119
/
decorators.py
41 lines (29 loc) · 991 Bytes
/
decorators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import logging
import time
from decorator import decorator
from django.conf import settings
@decorator
def timed(func, *args, **kwargs):
"""
Decorator that prints out the timing of a function.
Slightly altered version of https://gist.github.com/bradmontgomery/bd6288f09a24c06746bbe54afe4b8a82.
"""
if not settings.DEBUG:
return func(*args, **kwargs)
logger = logging.getLogger("profile")
start = time.time()
result = func(*args, **kwargs)
end = time.time()
function_name = func.__name__
arguments = ""
if args:
arguments = f"{args}, "
for kwarg_key, kwarg_val in kwargs.items():
if isinstance(kwarg_val, str):
kwarg_val = f"'{kwarg_val}'" # noqa: PLW2901
arguments = f"{arguments}{kwarg_key}={kwarg_val}, "
if arguments.endswith(", "):
arguments = arguments[:-2]
ms = round(end - start, 4)
logger.debug(f"{function_name}({arguments}): {ms}ms")
return result