code: def add_from_file(self, filename, handler_decorator=None):
          
          args = {}
          execfile(filename, args)
          commands = args.get('commands')
          if commands is None:
              raise Exception(filename + ' has no variable named "commands"')
          elif not hasattr(commands, '__iter__'):
              raise Exception(filename + ': "commands" is not iterable')
          for key, handler in commands:
              if handler_decorator:
                  handler = handler_decorator(handler)
              self.add(key, handler)
docs: Wrapper around add() that reads the handlers from the
          file with the given name. The file is a Python script containing
          a list named 'commands' of tuples that map command names to
          handlers.
  
          :type  filename: str
          :param filename: The name of the file containing the tuples.
          :type  handler_decorator: function
          :param handler_decorator: A function that is used to decorate
                 each of the handlers in the file.