You want to really understand decorators? Watch this video!
boilerplate:
import functools
def decorator(func):
    @functools.wraps(func)
    def wrapper_decorator(*args, **kwargs):
        # Do something before
        value = func(*args, **kwargs)
        # Do something after
        return value
    return wrapper_decorator -
                
                https://youtu.be/MjHpMCIvwsY
  
 -
                
                https://youtu.be/MjHpMCIvwsY