Skip to content

src.log

log(callable)

Decorates the function with autmatic logging on start and end. With log-level INFO start and end times are logged. With log-level DEBUG arguments and return values are logged additionally.

Parameters:

Name Type Description Default
callable Callable

Function

required

Returns:

Name Type Description
Callable Callable

Decorated function

Source code in reproML/src/log.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
def log(callable: Callable) -> Callable:
    """Decorates the function with autmatic logging on start and end.
    With log-level `INFO` start and end times are logged.
    With log-level `DEBUG` arguments and return values are logged additionally.


    Args:
        callable (Callable): Function

    Returns:
        Callable: Decorated function
    """
    if isinstance(callable, FunctionType):
        name = f"{callable.__module__}.{callable.__name__}"
    else:
        name = f"{callable.__module__}.{{callable}}"

    arguments = ", ".join(
        [f"{arg}={{{arg}!r}}" for arg, _ in signature(callable).parameters.items()]
    )
    log_start = log_on_start(
        log_level=logging.INFO,
        message=f"{name} START",
    )
    log_inputs = log_on_start(
        log_level=logging.DEBUG,
        message=f"{name} INPUTS: {arguments}",
    )
    log_end = log_on_end(
        log_level=logging.INFO,
        message=f"{name} END",
    )
    log_ouput = log_on_end(
        log_level=logging.DEBUG,
        message=f"{name} OUTPUT: {{result!r}}",
    )
    callable = log_inputs(callable)
    callable = log_start(callable)
    callable = log_end(callable)
    callable = log_ouput(callable)
    return callable