Ejemplo n.º 1
0
class PromptTest(unittest.TestCase):
    def setUp(self):
        self.line = Line()
        self.line.insert_text('some text')

        self.code = Code(self.line.document)
        self.prompt = Prompt(self.line, self.code)

    def _test_token_text_list(self, data):
        # Test whether data is list of (Token, text) tuples.
        for token, text in data:
            self.assertIsInstance(token, pygments.token._TokenType)
            self.assertIsInstance(text, six.text_type)

    def test_get_prompt(self):
        result = list(self.prompt.get_prompt())
        self._test_token_text_list(result)

    def test_second_line_prefix(self):
        result = list(self.prompt.get_second_line_prefix())
        self._test_token_text_list(result)

    def test_get_help_tokens(self):
        result = list(self.prompt.get_second_line_prefix())
        self._test_token_text_list(result)
Ejemplo n.º 2
0
def main():
    layout = Layout(left_margin=LeftMarginWithLineNumbers(),
                    before_input=DefaultPrompt(text='Before input >> '),
                    after_input=Prompt(' << after input'),
                    top_toolbars=[
                        TextToolbar('This is a top toolbar',
                                    token=Token.TopToolbar1),
                        TextToolbar('This is another top toolbar',
                                    token=Token.TopToolbar2),
                    ],
                    bottom_toolbars=[
                        ArgToolbar(),
                        SearchToolbar(),
                        CompletionsToolbar(),
                        TextToolbar('This is a bottom toolbar',
                                    token=Token.BottomToolbar1),
                        TextToolbar('This is another bottom toolbar',
                                    token=Token.BottomToolbar2),
                    ],
                    show_tildes=True,
                    menus=[CompletionsMenu()])

    cli = CommandLineInterface(layout=layout,
                               style=TestStyle,
                               line=Line(is_multiline=True,
                                         completer=TestCompleter()))

    code_obj = cli.read_input(initial_value=lipsum)
    print('You said: ' + code_obj.text)
Ejemplo n.º 3
0
def main():
    cli = CommandLineInterface(layout=layout,
                               style=TestStyle,
                               line=Line(validator=EmailValidator()))

    document = cli.read_input()
    print('You said: ' + document.text)
Ejemplo n.º 4
0
def loop(cmd, history_file):
    from prompt_toolkit import CommandLineInterface, AbortAction
    from prompt_toolkit import Exit
    from prompt_toolkit.layout import Layout
    from prompt_toolkit.line import Line
    from prompt_toolkit.renderer import Output

    cli_line = Line(completer=SQLCompleter(cmd.connection, cmd.lines),
                    history=TruncatedFileHistory(
                        history_file, max_length=MAX_HISTORY_LENGTH))
    layout = Layout(
        before_input=CrashPrompt(cmd.lines),
        menus=[],
        lexer=SqlLexer,
        bottom_toolbars=[],
        show_tildes=False,
    )
    key_binding_factories = _detect_key_bindings()
    cli = CommandLineInterface(style=MonokaiStyle,
                               layout=layout,
                               line=cli_line,
                               key_binding_factories=key_binding_factories)
    output = Output(cli.renderer.stdout)
    global get_num_columns

    def get_num_columns():
        return output.get_size().columns

    try:
        while True:
            doc = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
            cmd.process(doc.text)
    except Exit:  # Quit on Ctrl-D keypress
        cmd.logger.warn(u'Bye!')
        return
def main():
    cli = CommandLineInterface(line=Line(
        history=FileHistory('.example-history-file')))

    try:
        while True:
            document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
            print('You said: ' + document.text)
    except Exit:
        pass
Ejemplo n.º 6
0
def main():
    cli = CommandLineInterface(
        style=AnimalStyle,
        layout=Layout(before_input=DefaultPrompt('Give some animals: '),
                      menus=[CompletionsMenu()]),
        line=Line(completer=AnimalCompleter()),
        create_async_autocompleters=True,
    )

    print('Press tab to complete')
    code_obj = cli.read_input()
    print('You said: ' + code_obj.text)
Ejemplo n.º 7
0
def main(database):
    connection = sqlite3.connect(database)
    layout = Layout(before_input=DefaultPrompt('> '),
                    lexer=SqlLexer,
                    menus=[CompletionsMenu()])
    line = Line(completer=SqlCompleter())
    cli = CommandLineInterface(style=DocumentStyle, layout=layout, line=line)
    try:
        while True:
            document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
            with connection:
                messages = connection.execute(document.text)
                for message in messages:
                    print message
    except Exit:
        print 'GoodBye!'
Ejemplo n.º 8
0
def main():
    layout = Layout(before_input=DefaultPrompt('> '), menus=[CompletionMenu()])
    line = Line(RESTCompleter())
    cli = CommandLineInterface(style=DocumentStyle, layout=layout, line=line)
    try:
        while True:
            document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)

            input_args = document.text.split(' ')

            if len(input_args) < 2:
                raise AssertionError(
                    "Must provide at least a method and a url")

            response = process_request(input_args)

            print 'Response:', response.json()

    except Exit:
        print 'GoodBye!'
Ejemplo n.º 9
0
def cli(database, user, password, host, port):

    from pgcli import __file__ as package_root
    package_root = os.path.dirname(package_root)

    default_config = os.path.join(package_root, 'pgclirc')
    # Write default config.
    write_default_config(default_config, '~/.pgclirc')

    # Load config.
    config = load_config('~/.pgclirc')

    # Connect to the database.
    try:
        pgexecute = PGExecute(database, user, password, host, port)
    except Exception as e:
        click.secho(e.message, err=True, fg='red')
        exit(1)
    layout = Layout(before_input=DefaultPrompt('%s> ' % database),
            menus=[CompletionsMenu()],
            lexer=SqlLexer)
    completer = PGCompleter(config.getboolean('main', 'smart_completion'))
    completer.extend_special_commands(pgexecute.special_commands.keys())
    completer.extend_table_names(pgexecute.tables())
    completer.extend_column_names(pgexecute.all_columns())
    line = Line(completer=completer,
            history=FileHistory(os.path.expanduser('~/.pgcli-history')))
    cli = CommandLineInterface(style=PGStyle, layout=layout, line=line)

    try:
        while True:
            document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
            try:
                rows, headers, status = pgexecute.run(document.text)
                if rows:
                    print(tabulate(rows, headers, tablefmt='psql'))
                print(status)
            except Exception as e:
                click.secho(e.message, err=True, fg='red')
    except Exit:
        print ('GoodBye!')
Ejemplo n.º 10
0
    def setUp(self):
        self.line = Line()
        self.line.insert_text('some text')

        self.code = Code(self.line.document)
        self.prompt = Prompt(self.line, self.code)
Ejemplo n.º 11
0
 def setUp(self):
     self.cli = Line()
Ejemplo n.º 12
0
class LineTest(unittest.TestCase):
    def setUp(self):
        self.cli = Line()

    def test_setup(self):
        self.assertEqual(self.cli.text, '')
        self.assertEqual(self.cli.cursor_position, 0)

    def test_insert_text(self):
        self.cli.insert_text('some_text')
        self.assertEqual(self.cli.text, 'some_text')
        self.assertEqual(self.cli.cursor_position, len('some_text'))

    def test_cursor_movement(self):
        self.cli.insert_text('some_text')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.cursor_right()
        self.cli.insert_text('A')

        self.assertEqual(self.cli.text, 'some_teAxt')
        self.assertEqual(self.cli.cursor_position, len('some_teA'))

    def test_home_end(self):
        self.cli.insert_text('some_text')
        self.cli.home()
        self.cli.insert_text('A')
        self.cli.end()
        self.cli.insert_text('B')
        self.assertEqual(self.cli.text, 'Asome_textB')
        self.assertEqual(self.cli.cursor_position, len('Asome_textB'))

    def test_backspace(self):
        self.cli.insert_text('some_text')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.delete_character_before_cursor()

        self.assertEqual(self.cli.text, 'some_txt')
        self.assertEqual(self.cli.cursor_position, len('some_t'))

    def test_cursor_word_back(self):
        self.cli.insert_text('hello world word3')
        self.cli.cursor_word_back()

        self.assertEqual(self.cli.text, 'hello world word3')
        self.assertEqual(self.cli.cursor_position, len('hello world '))

    def test_cursor_to_start_of_line(self):
        self.cli.insert_text('hello world\n  line2\nline3')
        self.assertEqual(self.cli.cursor_position, len('hello world\n  line2\nline3'))
        self.cli.cursor_position = len('hello world\n  li') # Somewhere on the second line.

        self.cli.cursor_to_start_of_line()
        self.assertEqual(self.cli.cursor_position, len('hello world\n'))

        self.cli.cursor_to_start_of_line(after_whitespace=True)
        self.assertEqual(self.cli.cursor_position, len('hello world\n  '))

    def test_cursor_to_end_of_line(self):
        self.cli.insert_text('hello world\n  line2\nline3')
        self.cli.cursor_position = 0

        self.cli.cursor_to_end_of_line()
        self.assertEqual(self.cli.cursor_position, len('hello world'))

    def test_cursor_word_forward(self):
        self.cli.insert_text('hello world word3')
        self.cli.home()
        self.cli.cursor_word_forward()

        self.assertEqual(self.cli.text, 'hello world word3')
        self.assertEqual(self.cli.cursor_position, len('hello '))

    def test_cursor_to_end_of_word(self):
        self.cli.insert_text('hello world')
        self.cli.home()

        self.cli.cursor_to_end_of_word()
        self.assertEqual(self.cli.cursor_position, len('hello') - 1)

        self.cli.cursor_to_end_of_word()
        self.assertEqual(self.cli.cursor_position, len('hello world') - 1)

    def test_delete_word(self):
        self.cli.insert_text('hello world word3')
        self.cli.home()
        self.cli.cursor_word_forward()
        self.cli.delete_word()

        self.assertEqual(self.cli.text, 'hello word3')
        self.assertEqual(self.cli.cursor_position, len('hello '))

    def test_delete_until_end(self):
        self.cli.insert_text('this is a sentence.')
        self.cli.home()
        self.cli.cursor_word_forward()
        self.cli.delete_until_end()

        self.assertEqual(self.cli.text, 'this ')
        self.assertEqual(self.cli.cursor_position, len('this '))

    def test_delete_until_end_of_line(self):
        self.cli.insert_text('line1\nline2\nline3')
        self.cli.cursor_position = len('line1\nli')

        deleted_text = self.cli.delete_until_end_of_line()

        self.assertEqual(self.cli.text, 'line1\nli\nline3')
        self.assertEqual(deleted_text, 'ne2')

        # If we only have one line.
        self.cli.reset()
        self.cli.insert_text('line1')
        self.cli.cursor_position = 2

        deleted_text = self.cli.delete_until_end_of_line()

        self.assertEqual(self.cli.text, 'li')
        self.assertEqual(deleted_text, 'ne1')

    def test_cursor_up(self):
        # Cursor up to a line thats longer.
        self.cli.insert_text('long line1\nline2')
        self.cli.cursor_up()

        self.assertEqual(self.cli.document.cursor_position, 5)

        # Going up when already at the top.
        self.cli.cursor_up()
        self.assertEqual(self.cli.document.cursor_position, 5)

        # Going up to a line that's shorter.
        self.cli.reset()
        self.cli.insert_text('line1\nlong line2')

        self.cli.cursor_up()
        self.assertEqual(self.cli.document.cursor_position, 5)

    def test_cursor_down(self):
        self.cli.insert_text('line1\nline2')
        self.cli.cursor_position = 3

        # Normally going down
        self.cli.cursor_down()
        self.assertEqual(self.cli.document.cursor_position, len('line1\nlin'))

        # Going down to a line that's storter.
        self.cli.reset()
        self.cli.insert_text('long line1\na\nb')
        self.cli.cursor_position = 3

        self.cli.cursor_down()
        self.assertEqual(self.cli.document.cursor_position, len('long line1\na'))

    def test_auto_up_and_down(self):
        self.cli.insert_text('line1\nline2')
        with self.assertRaises(ReturnInput):
            self.cli.return_input()
        self.cli.insert_text('long line3\nlong line4')

        # Test current
        self.assertEqual(self.cli.text, 'long line3\nlong line4')
        self.assertEqual(self.cli.cursor_position, len('long line3\nlong line4'))

        # Go up.
        self.cli.auto_up()
        self.assertEqual(self.cli.text, 'long line3\nlong line4')
        self.assertEqual(self.cli.cursor_position, len('long line3'))

        # Go up again (goes to first item.)
        self.cli.auto_up()
        self.assertEqual(self.cli.text, 'line1\nline2')
        self.assertEqual(self.cli.cursor_position, len('line1\nline2'))

        # Go up again (goes to first line of first item.)
        self.cli.auto_up()
        self.assertEqual(self.cli.text, 'line1\nline2')
        self.assertEqual(self.cli.cursor_position, len('line1'))

        # Go up again (while we're at the first item in history.)
        # (Nothing changes.)
        self.cli.auto_up()
        self.assertEqual(self.cli.text, 'line1\nline2')
        self.assertEqual(self.cli.cursor_position, len('line1'))

        # Go down (to second line of first item.)
        self.cli.auto_down()
        self.assertEqual(self.cli.text, 'line1\nline2')
        self.assertEqual(self.cli.cursor_position, len('line1\nline2'))

        # Go down again (to first line of second item.)
        # (Going down goes to the first character of a line.)
        self.cli.auto_down()
        self.assertEqual(self.cli.text, 'long line3\nlong line4')
        self.assertEqual(self.cli.cursor_position, len(''))

        # Go down again (to second line of second item.)
        self.cli.auto_down()
        self.assertEqual(self.cli.text, 'long line3\nlong line4')
        self.assertEqual(self.cli.cursor_position, len('long line3\n'))

        # Go down again after the last line. (nothing should happen.)
        self.cli.auto_down()
        self.assertEqual(self.cli.text, 'long line3\nlong line4')
        self.assertEqual(self.cli.cursor_position, len('long line3\n'))

    def test_delete_current_line(self):
        self.cli.insert_text('line1\nline2\nline3')
        self.cli.cursor_up()

        deleted_text = self.cli.delete_current_line()

        self.assertEqual(self.cli.text, 'line1\nline3')
        self.assertEqual(deleted_text, 'line2')
        self.assertEqual(self.cli.cursor_position, len('line1\n'))

    def test_join_next_line(self):
        self.cli.insert_text('line1\nline2\nline3')
        self.cli.cursor_up()
        self.cli.join_next_line()

        self.assertEqual(self.cli.text, 'line1\nline2line3')

        # Test when there is no '\n' in the text
        self.cli.reset()
        self.cli.insert_text('line1')
        self.cli.cursor_position = 0
        self.cli.join_next_line()

        self.assertEqual(self.cli.text, 'line1')

    def test_go_to_matching_bracket(self):
        self.cli.insert_text('A ( B [ C ) >')
        self.cli.home()
        self.cli.cursor_right()
        self.cli.cursor_right()

        self.assertEqual(self.cli.cursor_position, 2)
        self.cli.go_to_matching_bracket()
        self.assertEqual(self.cli.cursor_position, 10)
        self.cli.go_to_matching_bracket()
        self.assertEqual(self.cli.cursor_position, 2)

    def test_newline(self):
        self.cli.insert_text('hello world')
        self.cli.newline()

        self.assertEqual(self.cli.text, 'hello world\n')

    def test_swap_characters_before_cursor(self):
        self.cli.insert_text('hello world')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.swap_characters_before_cursor()

        self.assertEqual(self.cli.text, 'hello wrold')
Ejemplo n.º 13
0
        Error: '#000000 bg:#ff8888',

        # Completion Menu
        Token.Menu.Completions.Completion.Current: 'bg:#00aaaa #000000',
        Token.Menu.Completions.Completion: 'bg:#008888 #ffffff',
        Token.Menu.Completions.ProgressButton: 'bg:#003333',
        Token.Menu.Completions.ProgressBar: 'bg:#00aaaa',
    }


if __name__ == '__main__':
    cli = CommandLineInterface(layout=Layout(
        before_input=DefaultPrompt('(pdb) '),
        after_input=CompletionHint(grammar),
        menus=[CompletionsMenu()]),
                               line=Line(completer=ShellCompleter(grammar)),
                               style=PdbStyle)

    try:
        while True:
            document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)

            try:
                parse_info = get_parse_info(grammar, document)
            except InvalidCommandException:
                print('Invalid command\n')
                continue
            else:
                print(parse_info.get_variables())

    except Exit:
Ejemplo n.º 14
0
 def setUp(self):
     self.cli = Line()
Ejemplo n.º 15
0
class LineTest(unittest.TestCase):
    def setUp(self):
        self.cli = Line()

    def test_initial(self):
        self.assertEqual(self.cli.text, '')
        self.assertEqual(self.cli.cursor_position, 0)

    def test_insert_text(self):
        self.cli.insert_text('some_text')
        self.assertEqual(self.cli.text, 'some_text')
        self.assertEqual(self.cli.cursor_position, len('some_text'))

    def test_cursor_movement(self):
        self.cli.insert_text('some_text')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.cursor_right()
        self.cli.insert_text('A')

        self.assertEqual(self.cli.text, 'some_teAxt')
        self.assertEqual(self.cli.cursor_position, len('some_teA'))

    def test_backspace(self):
        self.cli.insert_text('some_text')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.delete_before_cursor()

        self.assertEqual(self.cli.text, 'some_txt')
        self.assertEqual(self.cli.cursor_position, len('some_t'))

    def test_cursor_up(self):
        # Cursor up to a line thats longer.
        self.cli.insert_text('long line1\nline2')
        self.cli.cursor_up()

        self.assertEqual(self.cli.document.cursor_position, 5)

        # Going up when already at the top.
        self.cli.cursor_up()
        self.assertEqual(self.cli.document.cursor_position, 5)

        # Going up to a line that's shorter.
        self.cli.reset()
        self.cli.insert_text('line1\nlong line2')

        self.cli.cursor_up()
        self.assertEqual(self.cli.document.cursor_position, 5)

    def test_cursor_down(self):
        self.cli.insert_text('line1\nline2')
        self.cli.cursor_position = 3

        # Normally going down
        self.cli.cursor_down()
        self.assertEqual(self.cli.document.cursor_position, len('line1\nlin'))

        # Going down to a line that's storter.
        self.cli.reset()
        self.cli.insert_text('long line1\na\nb')
        self.cli.cursor_position = 3

        self.cli.cursor_down()
        self.assertEqual(self.cli.document.cursor_position, len('long line1\na'))

#    def test_auto_up_and_down(self):
#        self.cli.insert_text('long line3\nlong line4')
#
#        # Test current
#        self.assertEqual(self.cli.text, 'long line3\nlong line4')
#        self.assertEqual(self.cli.cursor_position, len('long line3\nlong line4'))
#
#        # Go up.
#        self.cli.auto_up()
#        self.assertEqual(self.cli.text, 'long line3\nlong line4')
#        self.assertEqual(self.cli.cursor_position, len('long line3'))
#
#        # Go up again (goes to first item.)
#        self.cli.auto_up()
#        self.assertEqual(self.cli.text, 'line1\nline2')
#        self.assertEqual(self.cli.cursor_position, len('line1\nline2'))
#
#        # Go up again (goes to first line of first item.)
#        self.cli.auto_up()
#        self.assertEqual(self.cli.text, 'line1\nline2')
#        self.assertEqual(self.cli.cursor_position, len('line1'))
#
#        # Go up again (while we're at the first item in history.)
#        # (Nothing changes.)
#        self.cli.auto_up()
#        self.assertEqual(self.cli.text, 'line1\nline2')
#        self.assertEqual(self.cli.cursor_position, len('line1'))
#
#        # Go down (to second line of first item.)
#        self.cli.auto_down()
#        self.assertEqual(self.cli.text, 'line1\nline2')
#        self.assertEqual(self.cli.cursor_position, len('line1\nline2'))
#
#        # Go down again (to first line of second item.)
#        # (Going down goes to the first character of a line.)
#        self.cli.auto_down()
#        self.assertEqual(self.cli.text, 'long line3\nlong line4')
#        self.assertEqual(self.cli.cursor_position, len(''))
#
#        # Go down again (to second line of second item.)
#        self.cli.auto_down()
#        self.assertEqual(self.cli.text, 'long line3\nlong line4')
#        self.assertEqual(self.cli.cursor_position, len('long line3\n'))
#
#        # Go down again after the last line. (nothing should happen.)
#        self.cli.auto_down()
#        self.assertEqual(self.cli.text, 'long line3\nlong line4')
#        self.assertEqual(self.cli.cursor_position, len('long line3\n'))

    def test_join_next_line(self):
        self.cli.insert_text('line1\nline2\nline3')
        self.cli.cursor_up()
        self.cli.join_next_line()

        self.assertEqual(self.cli.text, 'line1\nline2line3')

        # Test when there is no '\n' in the text
        self.cli.reset()
        self.cli.insert_text('line1')
        self.cli.cursor_position = 0
        self.cli.join_next_line()

        self.assertEqual(self.cli.text, 'line1')

    def test_newline(self):
        self.cli.insert_text('hello world')
        self.cli.newline()

        self.assertEqual(self.cli.text, 'hello world\n')

    def test_swap_characters_before_cursor(self):
        self.cli.insert_text('hello world')
        self.cli.cursor_left()
        self.cli.cursor_left()
        self.cli.swap_characters_before_cursor()

        self.assertEqual(self.cli.text, 'hello wrold')