Exemplo n.º 1
0
    def run(self, shell):
        self.old_completer = readline.get_completer()
        readline.set_completer(self.complete)
        print(
            title_str("Entering " + self.name + " Wizard", width=shell.width, box=True, align='center'),
            '\n',
            self.description, '\n\n',
            word_wrap(
                "To exit, enter either Ctrl+C, Ctrl+D, or 'quit'. For help "
                "about the current step, enter 'help' or '?'.", shell.width
            ),
            sep=''
        )

        running = True
        for step in self.steps:
            self.active_step = step
            valid = False
            while not valid:
                raw = None
                prompt = step.name
                if step.default is not None:
                    d = step.default
                    if callable(d):
                        d = d(self.values)
                    prompt += ' [{}]'.format(d)
                prompt += ': '
                try:
                    raw = input(prompt)
                except (KeyboardInterrupt, EOFError):
                    print()
                    print(AnsiStdout.red, "Wizard canceled", AnsiStdout.reset, sep='')
                    readline.set_completer(self.old_completer)
                    return None

                if raw.lower() == 'quit':
                    print(AnsiStdout.red, "Exiting wizard", AnsiStdout.reset, sep='')
                    readline.set_completer(self.old_completer)
                    return None
                elif raw.lower() in ('?', 'help'):
                    print(word_wrap(step.help, shell.width))
                else:
                    if not raw and step.default is not None:
                        raw = step.default

                    try:
                        value = step.validate(self.values, raw)
                    except ValueError as e:
                        print(AnsiStdout.red, "Error: ", str(e), AnsiStdout.reset, sep='')
                        print(AnsiStdout.yellow, step.name, ": ", step.help, sep='')
                    else:
                        self.values[step.id] = value
                        valid = True

        readline.set_completer(self.old_completer)
        return self.values
Exemplo n.º 2
0
    def print_motd(self, shell):
        if not self.motd:
            self.error(shell, "no motd available")
            return -1

        try:
            cnt = self.motd.format(**self.vars)
        except:
            cnt = self.motd

        print(
            AnsiCodes.green,
            "Message of the Day".center(shell.width),
            "\n",
            ">" * shell.width,
            "\n",
            AnsiCodes.reset,
            word_wrap(cnt, shell.width),
            "\n",
            AnsiCodes.green,
            "<" * shell.width,
            "\n",
            AnsiCodes.reset,
            sep="",
        )
Exemplo n.º 3
0
 def error(self, msg):
     print(
         word_wrap(
             "{}{}: {}{}".format(
                 AnsiCodes.red, self.shell_name, msg, AnsiCodes.reset
             ), self.width
         ), file=sys.stderr
     )
Exemplo n.º 4
0
    def error(self, shell, *args):
        '''
        Display an error message to the user.

        :param pypsi.shell.Shell shell: the active shell
        :param args: the error message to display
        '''
        msg = "{}: {}".format(self.name, ''.join([ str(a) for a in args]))
        print(AnsiCodes.red, word_wrap(msg, shell.width), AnsiCodes.reset, file=sys.stderr, sep='')
Exemplo n.º 5
0
    def print_random_tip(self, shell, header=True):
        i = int(self.rand.random() * 10) % len(self.tips)
        
        if header:
            title = "Tip #{}".format(i+1)
            title += '\n' + ('-'*len(title))
            print(AnsiStdout.green, title, AnsiStdout.reset, sep='')

        print(word_wrap(self.tips[i], shell.width))
Exemplo n.º 6
0
 def print_motd(self, shell):
     print(
         AnsiStdout.green,
         "Message of the Day".center(shell.width), '\n',
         '>' * shell.width, "\n",
         AnsiStdout.reset,
         word_wrap(self.motd, shell.width), '\n',
         AnsiStdout.green,
         "<" * shell.width, "\n",
         AnsiStdout.reset,
         sep=''
     )
Exemplo n.º 7
0
    def print_random_tip(self, shell, header=True):
        if not self.tips:
            self.error(shell, "no tips available")
            return -1

        i = self.rand.randrange(len(self.tips)) #int(self.rand.random() * len(self.tips)
        
        if header:
            title = "Tip #{}".format(i+1)
            title += '\n' + ('-'*len(title))
            print(AnsiCodes.green, title, AnsiCodes.reset, sep='')

        try:
            cnt = self.tips[i].format(**self.vars)
        except:
            cnt = self.tips[i]

        print(word_wrap(cnt, shell.width))
Exemplo n.º 8
0
    def print_random_tip(self, shell, header=True):
        if not self.tips:
            self.error(shell, "no tips available")
            return -1

        i = self.rand.randrange(len(self.tips))  # int(self.rand.random() * len(self.tips)

        if header:
            title = "Tip #{}".format(i + 1)
            title += "\n" + ("-" * len(title))
            print(AnsiCodes.green, title, AnsiCodes.reset, sep="")

        try:
            cnt = self.tips[i].format(**self.vars)
        except:
            cnt = self.tips[i]

        print(word_wrap(cnt, shell.width))
Exemplo n.º 9
0
    def print_topic(self, shell, id):
        if id not in self.lookup:
            if id in shell.commands:
                cmd = shell.commands[id]
                print(AnsiStderr.yellow, cmd.usage, AnsiStderr.reset, sep='')
                return 0

            self.error(shell, "unknown topic: ", id)
            return -1

        topic = self.lookup[id]
        if topic.content:
            print(title_str(topic.name or topic.id, shell.width))
            print(word_wrap(topic.content, shell.width))
            print()

        if topic.commands:
            self.print_topic_commands(shell, topic, "Commands")
        return 0
Exemplo n.º 10
0
    def print_topic(self, shell, id):
        if id not in self.lookup:
            if id in shell.commands:
                cmd = shell.commands[id]
                print(AnsiStderr.yellow, cmd.usage, AnsiStderr.reset, sep='')
                return 0

            self.error(shell, "unknown topic: ", id)
            return -1

        topic = self.lookup[id]
        if topic.content:
            print(title_str(topic.name or topic.id, shell.width))
            print(word_wrap(topic.content, shell.width))
            print()

        if topic.commands:
            self.print_topic_commands(shell, topic, "Commands")
        return 0
Exemplo n.º 11
0
    def print_motd(self, shell):
        if not self.motd:
            self.error(shell, "no motd available")
            return -1

        try:
            cnt = self.motd.format(**self.vars)
        except:
            cnt = self.motd

        print(
            AnsiCodes.green,
            "Message of the Day".center(shell.width), '\n',
            '>' * shell.width, "\n",
            AnsiCodes.reset,
            word_wrap(cnt, shell.width), '\n',
            AnsiCodes.green,
            "<" * shell.width, "\n",
            AnsiCodes.reset,
            sep=''
        )