code: def do(self, fn, message=None, *args, **kwargs):
          
          self.items.put(ChainItem(fn, self.do, message, *args, **kwargs))
          return self
docs: Add a 'do' action to the steps. This is a function to execute
  
          :param fn: A function
          :param message: Message indicating what this function does (used for debugging if assertions fail)