In this code:
def online_only(func, self): def f(*args, **kwargs): if self.running: return func(*args, **kwargs) else:
self is passed as the first parameter to the wrapping function, so just treat the first parameter specially in f:
self
f
def online_only(func): def f(self, *args, **kwargs): if self.running: return func(self, *args, **kwargs) else: return False return f