result = func(*args, **kwargs) if self.catch_returns or self.log_returns: if isinstance(result, dict): self.returned(result) elif inspect.isgenerator(result) or 'itertools' in str(result.__class__): for x in result: self.returned(x) time.sleep(0.1) else: self.returned(result)