Example #1
0
class Cmd(BaseCmd):
    """Реализация прокси-консоли"""

    reg = re.compile("^\s*")

    def __init__(self, host, port):
        BaseCmd.__init__(self)
        self.s = ServerProxy("http://%s:%d" % (host, int(port)))  # Клиент нашего сервиса
        self.prompt = ">>> "  # Приглашение к вводу
        self.leading_ws = ""  # Переменная для ведущих пробелов
        self.is_empty = False  # Переменная определяющая пустую команду

    def precmd(self, line):
        """Тестируем различные условия с сырой строкой,
        которая затем фильтруется"""
        self.leading_ws = self.reg.match(line).group(
            0
        )  # Сохраняем ведущие пробелы, т.к. они фильтруется при передаче в default
        self.is_empty = line == ""  # Пустая ли команда, т.к. пустая команда далее преобразуется в повторение предыдущей
        return line  # Выполняем контракт описанный в документации

    def default(self, line):
        if self.is_empty:  # Восстанавливаем пустую строкy
            line = ""
        line = self.leading_ws + line  # Восстанавливаем ведущие пробелы
        (result, output) = self.s.push(line)  # Выполняем строку в удалённой консоли
        self.prompt = (
            "... " if result else ">>> "
        )  # В случае если требуется новый ввод устанавливаем соответствующее приглашение
        sys.stdout.write(output)  # Пишем аутпут в аутпут :)
Example #2
0
class Cmd(BaseCmd):
    reg = re.compile('^\s*')
    def __init__(self, host, port):
        BaseCmd.__init__(self)
        self.s = ServerProxy('http://%s:%d' % (host, int(port)))
        self.prompt = '>>> '
        self.leading_ws = ''
        self.is_empty = False

    def precmd(self, line):
        self.leading_ws = self.reg.match(line).group(0)
        self.is_empty = (line == '')
        return line
        
    def default(self, line):
        if(self.is_empty):
            line = ''        
        line = self.leading_ws + line
        (result, output) = self.s.push(line)
        self.prompt = ('... ' if result else '>>> ')
        sys.stdout.write(output)

    def complete(self, text, state):
        """Return the next possible completion for 'text'.

        If a command has not been entered, then complete against command list.
        Otherwise try to call complete_<command> to get list of completions.
        """
        if state == 0:
            import readline
            origline = readline.get_line_buffer()
            line = origline.lstrip()
            stripped = len(origline) - len(line)
            begidx = readline.get_begidx() - stripped
            endidx = readline.get_endidx() - stripped
            if begidx>=0:
                cmd, args, foo = self.parseline(line)
                if cmd == '':
                    compfunc = self.completedefault
                else:
                    try:
                        compfunc = getattr(self, 'complete_' + cmd)
                    except AttributeError:
                        compfunc = self.completedefault
            else:
                compfunc = self.completenames
            self.completion_matches = compfunc(text, line, begidx, endidx)
        try:
            return self.completion_matches[state]
        except IndexError:
            return None

    def completedefault(self, text, *ignored):
        return self.s.complete(text)