import os import shutil from functools import wraps from settings.api import settings __all__ = ["WorkPostRunCleaner", "cleanup_post_run"] class WorkPostRunCleaner: @property def clean_dir(self): raise NotImplemented def clean_post_run(self): if settings.DEBUG_DEV: return if self.clean_dir and os.path.exists(self.clean_dir): shutil.rmtree(self.clean_dir) def cleanup_post_run(func): def get_instance(*args): if not len(args) > 0: return return args[0] @wraps(func) def wrapper(*args, **kwargs): instance = get_instance(*args) if not instance or not issubclass(type(instance), WorkPostRunCleaner): raise NotImplementedError("you should extend 'WorkPostRunCleaner'") try: return func(*args, **kwargs) finally: instance.clean_post_run() return wrapper