Coverage for C:\src\imod-python\imod\logging\logging_decorators.py: 100%

35 statements  

« prev     ^ index     » next       coverage.py v7.5.1, created at 2024-05-16 11:25 +0200

1from functools import wraps 

2from time import time 

3 

4from imod.logging.loglevel import LogLevel 

5 

6 

7def standard_log_decorator( 

8 start_level: LogLevel = LogLevel.INFO, end_level: LogLevel = LogLevel.DEBUG 

9): 

10 """ 

11 Decorator to print log messages announcing the beginning and end of the decorated method 

12 """ 

13 

14 def decorator(fun): 

15 @wraps(fun) 

16 def wrapper(*args, **kwargs): 

17 from imod.logging import logger 

18 

19 # anounce start of function 

20 object_name = str(type(args[0]).__name__) 

21 start_message = f"Beginning execution of {fun.__module__}.{fun.__name__} for object {object_name}..." 

22 

23 # anounce start of function 

24 start_time = time() 

25 logger.log(loglevel=start_level, message=start_message, additional_depth=2) 

26 

27 # run function 

28 return_value = fun(*args, **kwargs) 

29 end_time = time() 

30 

31 # anounce end of function 

32 end_message = f"Finished execution of {fun.__module__}.{fun.__name__} for object {object_name} in {end_time - start_time} seconds..." 

33 logger.log(loglevel=end_level, message=end_message, additional_depth=2) 

34 return return_value 

35 

36 return wrapper 

37 

38 return decorator 

39 

40 

41def init_log_decorator( 

42 start_level: LogLevel = LogLevel.INFO, end_level: LogLevel = LogLevel.DEBUG 

43): 

44 """ 

45 Decorator to print log messages announcing the beginning and end of initialization methods 

46 """ 

47 

48 def decorator(fun): 

49 @wraps(fun) 

50 def wrapper(*args, **kwargs): 

51 from imod.logging import logger 

52 

53 # anounce start of function 

54 object_name = str(type(args[0]).__name__) 

55 start_message = f"Initializing the {object_name} package..." 

56 start_time = time() 

57 logger.log(loglevel=start_level, message=start_message, additional_depth=2) 

58 

59 # run function 

60 return_value = fun(*args, **kwargs) 

61 end_time = time() 

62 

63 # anounce end of function 

64 end_message = f"Successfully initialized the {object_name} in {end_time - start_time} seconds..." 

65 logger.log(loglevel=end_level, message=end_message, additional_depth=2) 

66 return return_value 

67 

68 return wrapper 

69 

70 return decorator