from metaflow import FlowSpec, step

from functools import wraps

def log_to_sentry(x):
    print('sentry', x)

def sentry_logger(f):
    @wraps(f)
    def func(self):
        try:
            f(self)
        except Exception as x:
            log_to_sentry(x)
            raise
    return func

class SentryFlow(FlowSpec):

    @sentry_logger
    @step
    def start(self):
        raise KeyError('foobar')
        self.next(self.end)

    @step
    def end(self):
        pass

if __name__ == '__main__':
    SentryFlow()
