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
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="", )
def error(self, msg): print( word_wrap( "{}{}: {}{}".format( AnsiCodes.red, self.shell_name, msg, AnsiCodes.reset ), self.width ), file=sys.stderr )
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='')
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))
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='' )
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))
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))
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
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
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='' )