https://medium.com/coinmonks/the-art-of-python-decorators-junior-senior-and-expert-insights-b27284e6f487