'Run a node by name
Args:
nodename (str or callable): Name of node or a callable
to be called as `function(caller, raw_string)` or `function(caller)`
to return the actual goto string.
raw_string (str): The raw default string entered on the
previous node (only used if the node accepts it as an
argument)'

def goto(self, nodename, raw_string):

    if callable(nodename):
        try:
            if (len(getargspec(nodename).args) > 1):
                nodename = nodename(self.caller, raw_string)
            else:
                nodename = nodename(self.caller)
        except Exception:
            self.caller.msg(_ERR_GENERAL.format(nodename=nodename), self._session)
            raise
    try:
        (nodetext, options) = self._execute_node(nodename, raw_string)
    except EvMenuError:
        return
    if self._persistent:
        self.caller.attributes.add('_menutree_saved_startnode', (nodename, raw_string))
    helptext = ''
    if hasattr(nodetext, '__iter__'):
        if (len(nodetext) > 1):
            (nodetext, helptext) = nodetext[:2]
        else:
            nodetext = nodetext[0]
    nodetext = ('' if (nodetext is None) else str(nodetext))
    options = ([options] if isinstance(options, dict) else options)
    display_options = []
    self.options = {}
    self.default = None
    if options:
        for (inum, dic) in enumerate(options):
            keys = make_iter(dic.get('key'))
            if ('_default' in keys):
                keys = [key for key in keys if (key != '_default')]
                desc = dic.get('desc', dic.get('text', _ERR_NO_OPTION_DESC).strip())
                (goto, execute) = (dic.get('goto', None), dic.get('exec', None))
                self.default = (goto, execute)
            else:
                keys = list(make_iter(dic.get('key', str((inum + 1)).strip())))
                desc = dic.get('desc', dic.get('text', _ERR_NO_OPTION_DESC).strip())
                (goto, execute) = (dic.get('goto', None), dic.get('exec', None))
            if keys:
                display_options.append((keys[0], desc))
                for key in keys:
                    if (goto or execute):
                        self.options[strip_ansi(key).strip().lower()] = (goto, execute)
    self.nodetext = self._format_node(nodetext, display_options)
    if helptext:
        self.helptext = helptext
    elif options:
        self.helptext = (_HELP_FULL if self.auto_quit else _HELP_NO_QUIT)
    else:
        self.helptext = (_HELP_NO_OPTIONS if self.auto_quit else _HELP_NO_OPTIONS_NO_QUIT)
    self.display_nodetext()
    if (not options):
        self.close_menu()
