Created
November 26, 2024 03:33
-
-
Save farhangamary/b2e32e00af613bc01e406453e5d60682 to your computer and use it in GitHub Desktop.
The simplicity of AOP in python!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Aspect: | |
| def before(self, func, *args, **kwargs): | |
| pass | |
| def after(self, result, func, *args, **kwargs): | |
| return result | |
| def except_raised(self, func, excpt, *args, **kwargs): | |
| pass | |
| def logger(aspect): | |
| def wrapper(func): | |
| def do_and_log(*args, **kwargs): | |
| aspect.before(func, *args, **kwargs) | |
| try: | |
| result = func(*args, **kwargs) | |
| aspect.after(func, result, *args, **kwargs) | |
| return result | |
| except Exception as excpt: | |
| aspect.except_raised(func, excpt, *args, **kwargs) | |
| return None | |
| return do_and_log | |
| return wrapper | |
| class Logging(Aspect): | |
| def before(self, func, *args, **kwargs): | |
| print(f"[Starting] {func.__name__}(args={args}, kwargs={kwargs})") | |
| def after(self, func, result, *args, **kwargs): | |
| print(f"[Finished] {func.__name__}(args={args}, kwargs={kwargs})") | |
| return result | |
| def except_raised(self, func, ex, *args, **kwargs): | |
| print(f"[Exception] in {func.__name__}(args={args}, kwargs={kwargs}): {ex}") | |
| loggingAspect = Logging() | |
| @logger(loggingAspect) | |
| def devide(a, b): | |
| return a / b | |
| devide(19, 0) | |
| devide(109, 17) | |
| ############# Output #################### | |
| # [Starting] devide(args=(19, 0), kwargs={}) | |
| # [Exception] in devide(args=(19, 0), kwargs={}): division by zero | |
| # [Starting] devide(args=(109, 17), kwargs={}) | |
| # [Finished] devide(args=(109, 17), kwargs={}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment